Empfehlungen: Grafik-Layer, Symbole und Renderer
Mit ArcGIS API for Silverlight können Sie Grafiken mithilfe eines Grafik-Layers dynamisch auf einer Karte anzeigen. Ein Grafik-Layer kann beispielsweise zum Speichern von Polygonen, die von einem Benutzer erstellt wurden, oder zum Anzeigen von Features, die die Abfrage einer benutzerdefinierten Abfrage erfüllen, verwendet werden.
Symbole definieren alle nicht geographischen Aspekte der Darstellung einer Grafik. Dazu gehören u. a. die Farbe, die Rahmenbreite und die Transparenz einer Grafik. ArcGIS API for Silverlight umfasst viele Symbolklassen, die jeweils eine eindeutige Festlegung der Symbologie ermöglichen. Jeder Symboltyp wird außerdem für einen speziellen Geometrietyp verwendet (d. h. Punkt, Linie oder Polygon).
Renderer definieren ein oder mehrere Symbole, die auf den Grafik-Layer angewendet werden sollen. Das auf die jeweilige Grafik angewendete Symbol hängt von den Attributen der Grafik ab. Der Renderer gibt an, welche Attributwerte welchem Symbol entsprechen.
Die folgenden Abschnitte enthalten einige Empfehlungen für das Arbeiten mit einem GraphicsLayer, mit Symbolen und Renderern.
Festlegen der Eigenschaften "GraphicsLayer.Renderer" oder "GraphicsLayer.RendererTakesPrecedence"
Der Viewer erwartet standardmäßig, dass die Eigenschaft "GraphicsLayer.Renderer" zum Festlegen der Symbologie des Layers verwendet wird. Wenn der Karte ein GraphicsLayer hinzugefügt wird und keine Renderer-Eigenschaft festgelegt wurde, füllt der Viewer diese Eigenschaft automatisch mit einem Standard-Renderer aus; daher sollten Sie die Eigenschaft "GraphicsLayer.Renderer" festlegen, bevor der Layer der Karte hinzugefügt wird. Der Renderer wird anhand des folgenden Beispielcodes festgelegt:
GraphicsLayer gl = new GraphicsLayer()
{
ID = "IdentifyResultsLayer",
Renderer = new SimpleRenderer()
{
Symbol = identifyDialog.Resources["RedMarkerSymbol"] as Symbol
}
};
Sie können auch die Eigenschaft "GraphicsLayer.RendererTakesPrecedence" auf "False" festlegen und dann die Symboleigenschaft jeder Grafik im Layer festlegen. Wenn "RendererTakesPrecedence" auf "False" gesetzt wird, überschreibt "Graphic.Symbol" die gesamte durch "GraphicsLayer.Renderer" festgelegte Symbologie. Bei Verwendung dieser Methode sollten "RendererTakesPrecedence" und "Graphic.Symbol" vor dem Hinzufügen des Layers zur Karte festgelegt werden.
Unterstützte Renderer
Derzeit werden lediglich "UniqueValueRenderer", "ClassBreaksRenderer" und "SimpleRenderer" zur Speicherung und Konfiguration unterstützt. Wenn ein nicht unterstützter Renderertyp verwendet wird, können Benutzer die Symbologie des Ergebnis-Layers nicht konfigurieren, nachdem er der Karte hinzugefügt wurde. Nehmen Sie als Beispiel ein Werkzeug, das der Karte einen GraphicsLayer hinzufügt. Benutzer des Application Builder können ein solches Werkzeug während der Bearbeitung einer Viewer-Anwendung ausführen. Wenn sie einen unterstützten Renderertyp verwenden, können Benutzer die Symbologie des Ergebnis-Layers konfigurieren, nachdem er der Karte hinzugefügt wurde. Zudem wird der Ergebnis-Layer als Teil der Karte der Anwendung gespeichert, wenn diese Anwendung gespeichert oder bereitgestellt wird. Diese Funktionen stehen für GraphicsLayer, die Renderertypen verwenden, die keine Speicherung und Konfiguration unterstützen (z. B. TemporalRenderer) nicht zur Verfügung.
Wenn ein anderer Renderertyp als "UniqueValueRenderer", "ClassBreaksRenderer" oder "SimpleRenderer" verwendet wird, darf das Werkzeug nicht in Application Builder ausgeführt werden. Dies ist darauf zurückzuführen, dass andere als die oben aufgeführten Renderertypen keine Speicherung und Konfiguration unterstützen. Überprüfen Sie dazu, ob "Application.Current.IsEditMode" auf "True" festgelegt ist. Sollte dies der Fall sein, stellen Sie sicher, dass das Werkzeug nicht ausgeführt wird.
GraphicsLayer-Symbole
Deklarieren Sie die im GraphicsLayer verwendeten Symbole in einer Ressourcen-Sammlung in der XAML (Extensible Application Markup Language) Ihrer Benutzeroberfläche. Obwohl Symbole programmatisch erstellt werden können, sind sie durch die Deklaration in XAML präziser, lesbarer und im allgemeinen einfacher zu verwalten.
<UserControl.Resources>
<ResourceDictionary>
<esri:SimpleMarkerSymbol x:Key="RedMarkerSymbol" Color="Red" Size="12" Style="Circle" />
</ResourceDictionary>
</UserControl.Resources>
Layer-Name
Verwenden Sie "MapApplication.LayerNameProperty", um den im Fenster "Karteninhalt" angezeigten Layer-Namen abzurufen. Sie können den Namen festlegen, indem Sie "Layer.SetValue(MapApplication.LayerNameProperty, "Layer-Name")" aufrufen, und den Namen abrufen, indem Sie "Layer.GetValue(MapApplication.LayerNameProperty)" aufrufen.
GraphicsLayer gl = new GraphicsLayer();
gl.SetValue(MapApplication.LayerNameProperty, "Identify Results");
gl.GetValue(MapApplication.LayerNameProperty);