Mejores prácticas: Capas de gráficos, símbolos y renderizadores

Utilizando ArcGIS API for Silverlight, puede mostrar dinámicamente gráficos en un mapa mediante una capa de Gráficos. Una capa de Gráficos podría, por ejemplo, utilizarse para mantener los polígonos dibujados por un usuario o mostrar las entidades que cumplen con la consulta definida por un usuario.

Los símbolos definen todos los aspectos no geográficos del aspecto de un gráfico. Esto incluye el color, el ancho del borde, la transparencia, etc. de un gráfico. ArcGIS API for Silverlight incluye muchas clases de símbolos, cada una de las cuales le permite especificar la simbología en una forma única. Cada tipo de símbolo también es específico a un tipo de geometría (es decir, punto, línea o polígono).

Los renderizadores definen uno o más símbolos para aplicar a una capa de Gráficos. El símbolo que se aplica a cada gráfico depende de los atributos del gráfico. El renderizador especifica qué valores de los atributos corresponden a qué símbolo.

Las siguientes secciones detallan algunas de las mejores prácticas para trabajar con GraphicsLayer, símbolos y renderizadores.

Establezca la propiedad de GraphicsLayer.Renderer

Debe utilizar la propiedad GraphicsLayer.Renderer para establecer la simbología de la capa. Si la propiedad del Renderizador no se establece cuando se agrega un GraphicsLayer al mapa, el Visor rellena automáticamente esta propiedad con un renderizador predeterminado; por lo tanto, debe establecer la propiedad GraphicsLayer.Renderer antes de agregar la capa al mapa. Una propiedad del renderizador de GraphicsLayer siempre invalida cualquier conjunto de símbolos mediante Graphic.Symbol.

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

Renderizadores compatibles

Solo UniqueValueRenderer, ClassBreaksRenderer y SimpleRenderer son compatibles actualmente para la persistencia y configuración. Si se utiliza un tipo de renderizador no compatible, los usuarios no podrán configurar la simbología de la capa de resultados después de que se ha agregado al mapa. Como ejemplo, considere una herramienta que agregue un GraphicsLayer al mapa. Es posible que los usuarios del Generador de aplicaciones ejecuten esa herramienta mientras editan una aplicación del Visor. Si utilizan un tipo de renderizador compatible, los usuarios pueden configurar la simbología de la capa de resultados después de que se ha agregado al mapa. Además, si guardan o implementan esa aplicación, la capa de resultados se almacenará como parte del mapa de esa aplicación. Estas capacidades no estarán disponibles en GraphicsLayers que utilice los tipos de renderizador que no admiten la persistencia y configuración (por ejemplo, TemporalRenderer).

Si se utiliza un tipo de renderizador que no sea UniqueValueRenderer, ClassBreaksRenderer o SimpleRenderer, no permita que se ejecute la herramienta desde el Generador de aplicaciones. Esto es porque los tipos de renderizador distintos a los que se enumeran, no admiten la persistencia y configuración. Para hacer esto, verifique si Application.Current.IsEditMode es cierto, y si es así, evite que se ejecute la herramienta.

Símbolos de GraphicsLayer

Declare los símbolos que se utilizan en su GraphicsLayer en una recopilación de recursos en su Lenguaje de marcado extensible de la aplicación (XAML) de la UI. A pesar de que los símbolos pueden crearse mediante programación, declararlos en XAML es más conciso, legible y, en general, más fácil de mantener.

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

Nombre de capa

Para recuperar o establecer el nombre de la capa que se muestra en el panel Contenido de mapa, utilice MapApplication.LayerNameProperty. Puede establecer el nombre al invocar Layer.SetValue(MapApplication.LayerNameProperty, “nombre de capa"), y recuperar el nombre al invocar Layer.GetValue(MapApplication.LayerNameProperty).

GraphicsLayer gl = new GraphicsLayer();
gl.SetValue(MapApplication.LayerNameProperty, "Identify Results");
gl.GetValue(MapApplication.LayerNameProperty);
6/8/2012