Практические советы: Графические слои, символы и способы отображения

С помощью ArcGIS API for Silverlight вы можете динамически отображать графику на карте с использованием графического слоя. Графический слой может использоваться, к примеру, для хранения полигонов, нарисованных пользователем, или для отображения объектов, удовлетворяющих пользовательскому запросу.

Символы отражают не связанные с географией аспекты показа объектов на карте. Это цвет, толщина границы, прозрачность графики и т.д. ArcGIS API for Silverlight содержит большое количество классов символов, каждый из которых позволит вам указать свои виды условных обозначений. Каждый тип символа относится к определенному типу геометрии (точка, линия или полигон).

Способы представления определяют один или несколько символов, с использованием которых будет отображаться слой. Символ, примененный к каждому графическому элементу, зависит от атрибутов графики. Метод отображения задает значения атрибутов, соответствующие определенному символу.

Следующие разделы содержат практические советы по работе с графическими слоями, символами и способами отображения.

Задает свойства GraphicsLayer.Renderer или GraphicsLayer.RendererTakesPrecedence

По умолчанию Viewer ожидает, что для задания символов слоя будет использоваться свойство GraphicsLayer.Renderer. Если свойство отображения Renderer не задано, при добавлении на карту графического слоя GraphicsLayer Viewer автоматически использует способ отображения по умолчанию, поэтому необходимо задать свойство GraphicsLayer.Renderer перед добавлением слоя на карту. Пример кода для задания свойства Renderer:

GraphicsLayer gl = new GraphicsLayer()
{
    ID = "IdentifyResultsLayer",
    Renderer = new SimpleRenderer()
    {
          Symbol = identifyDialog.Resources["RedMarkerSymbol"] as Symbol
    }
};

Или вы можете задать для свойства GraphicsLayer.RendererTakesPrecedence значение false, затем задать свойство Symbol для каждого Graphic на слое. Когда для RendererTakesPrecedence задано false, Graphic.Symbol имеет приоритет над всеми символами, заданными параметром GraphicsLayer.Renderer. При использовании такого способа, следует задавать RendererTakesPrecedence и Graphic.Symbol перед добавлением слоя на карту.

Поддерживаемые способы отображения

В настоящий момент поддерживаются только способы UniqueValueRenderer, ClassBreaksRenderer и SimpleRenderer. Если используется не поддерживаемый способ, пользователи не смогут настраивать символы слоя после того, как он будет добавлен на карту. Например, рассмотрим инструмент, добавляющий на карту графический слой. Пользователи Application Builder могут запускать такой инструмент во время редактирования приложения вьюера. При использовании поддерживаемого способа отображения пользователи могут менять символы результирующего слоя после его добавления на карту. Кроме того, если они сохраняют или развертывают такое приложение, слой результатов может быть сохранен в качестве части карты приложения. Эти возможности недоступны для графических слоев, использующих не поддерживающие настройки и сохранение способы отображения (например, TemporalRenderer).

Если используемый способ отображения другой (не UniqueValueRenderer, ClassBreaksRenderer или SimpleRenderer), не запускайте такой инструмент из Application Builder. Такая ситуация связана с тем, что способы отображения, отличающиеся от перечисленных, не поддерживают сохранение и настройку. Для этого проверьте, что значение свойства Application.Current.IsEditMode равно true, и затем предотвратите запуск инструмента.

Символы графического слоя

Объявите символы, используемые вашим графическим слоем в наборе ресурса Extensible Application Markup Language (XAML) вашего пользовательского интерфейса. Поскольку символы могут создаваться программно, объявление их в XAML значительно проще и удобнее.

<UserControl.Resources>
   <ResourceDictionary>
       <esri:SimpleMarkerSymbol x:Key="RedMarkerSymbol" Color="Red" Size="12" Style="Circle" />
   </ResourceDictionary>
</UserControl.Resources>

Имя слоя

Для получения или задания имени слоя, показанного на панели содержания карты, воспользуйтесь свойством MapApplication.LayerNameProperty. Можно указать имя, вызвав Layer.SetValue(MapApplication.LayerNameProperty, “имя слоя”), либо получить имя, вызвав Layer.GetValue(MapApplication.LayerNameProperty).

GraphicsLayer gl = new GraphicsLayer();
gl.SetValue(MapApplication.LayerNameProperty, "Identify Results");
gl.GetValue(MapApplication.LayerNameProperty);
1/23/2014