Pratiques conseillées : couches de graphiques, symboles et moteurs de rendu

A l'aide d'ArcGIS API for Silverlight, vous pouvez afficher dynamiquement les graphiques d'une carte via une couche de graphiques. Une couche de graphiques peut, par exemple, servir à contenir des polygones dessinés par un utilisateur ou à afficher des entités qui répondent à une requête définie par l'utilisateur.

Les symboles définissent tous les aspects non géographiques de l'apparence d'un graphique. Cela inclut la couleur d'un graphique, sa largeur de bordure, sa transparence, etc. ArcGIS API for Silverlight comprend de nombreuses classes de symboles, chacune d'entre elles vous autorisant à spécifier la symbologie de manière unique. Chaque type de symbole est également spécifique à un type de géométrie (point, ligne ou polygone).

Les moteurs de rendu définissent un ou plusieurs symboles à appliquer à une couche de graphiques. Le symbole appliqué à chaque graphique dépend des attributs du graphique. Le moteur de rendu indique quelles valeurs attributaires correspondent à quel symbole.

Les sections suivantes détaillent quelques-unes des pratiques conseillées pour l'utilisation d'une couche de graphiques, des symboles et des moteurs de rendu.

Définissez la propriété GraphicsLayer.Renderer ou GraphicsLayer.RendererTakesPrecedence

Par défaut, la visionneuse attend la propriété GraphicsLayer.Renderer pour définir la symbologie de la couche. Si la propriété Renderer n'est pas définie lorsqu'une couche de graphiques est ajoutée à la carte, la visionneuse renseigne automatiquement cette propriété par un moteur de rendu par défaut. Par conséquent, il est conseillé de définir la propriété GraphicsLayer.Renderer avant d'ajouter la couche à la carte. Exemple de code de définition du moteur de rendu :

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

Vous pouvez également définir la propriété GraphicsLayer.RendererTakesPrecedence sur false, puis la propriété Symbol de chaque graphique dans la couche. Lorsque la propriété RendererTakesPrecedence est définie sur false, Graphic.Symbol remplace la symbologie définie par GraphicsLayer.Renderer. Dans cette approche, il convient de définir RendererTakesPrecedence et Graphic.Symbol avant d'ajouter la couche à la carte.

Moteurs de rendu pris en charge

Seuls les moteurs de rendu UniqueValueRenderer, ClassBreaksRenderer et SimpleRenderer sont actuellement pris en charge pour la persistance et la configuration. Si un type de moteur de rendu non pris en charge est utilisé, les utilisateurs ne pourront pas configurer la symbologie de la couche de résultats après son ajout à la carte. Par exemple, imaginez un outil qui ajoute une couche de graphiques à la carte. Les utilisateurs d'Application Builder peuvent exécuter ce genre d'outil pendant qu'ils mettent à jour une application de visionnage. S'ils utilisent un type de moteur de rendu pris en charge, les utilisateurs peuvent configurer la symbologie de la couche de résultats après son ajout à la carte. En outre, s'ils enregistrent ou déploient cette application, la couche de résultats sera stockée dans la carte de cette application. Ces fonctionnalités ne seront pas disponibles dans les couches de graphiques qui utilisent des types de moteur de rendu qui ne prennent pas en charge la persistance ni la configuration (par exemple, TemporalRenderer).

Si un type de moteur de rendu autre que UniqueValueRenderer, ClassBreaksRenderer ou SimpleRenderer est utilisé, n'autorisez pas l'outil à s'exécuter depuis Application Builder. En effet, les types de moteur de rendu autres que ceux répertoriés ne prennent pas en charge la persistance ni la configuration. Pour ce faire, vérifiez si Application.Current.IsEditMode a la valeur vrai et, si tel est le cas, empêchez l'exécution de l'outil.

Symboles des couches de graphiques

Déclarez les symboles utilisés dans votre couche de graphiques dans un ensemble de ressources dans le langage XAML de votre interface utilisateur. Bien que les symboles puissent être créés par programmation, leur déclaration dans XAML est plus concise, plus lisible et généralement plus facile à gérer.

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

Nom de la couche

Pour récupérer ou définir le nom de la couche qui est affiché dans le volet Contenu de la carte, utilisez la propriété MapApplication.LayerNameProperty. Vous pouvez définir le nom en appelant la méthode Layer.SetValue(MapApplication.LayerNameProperty, "nom de la couche") et récupérer le nom en appelant la méthode Layer.GetValue(MapApplication.LayerNameProperty).

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