ベスト プラクティス: グラフィックス レイヤ、シンボル、レンダラ
ArcGIS API for Silverlight では、グラフィックス レイヤを使用して、マップ上にグラフィックスを動的に表示できます。たとえば、ユーザが描画したポリゴンを保持したり、ユーザ定義のクエリを満たすフィーチャを表示したりできます。
シンボルは、すべてのグラフィックス表示要素です。たとえば、グラフィックスの色、枠線の幅、透過表示などがシンボルとなります。ArcGIS API for Silverlight には多数のシンボル クラスが用意されており、それぞれ異なる方法でシンボルを指定できます。さらに、各シンボル タイプはそれぞれ 1 つのジオメトリ タイプ(ポイント、ライン、ポリゴン)に対応しています。
レンダラは、グラフィックス レイヤに適用する 1 つ以上のシンボルを定義します。各グラフィックスに適用されるシンボルは、そのグラフィックスの属性によって異なります。レンダラは、どの属性値にどのシンボルを割り当てるかを指定します。
この後のセクションでは、グラフィックス レイヤ、シンボル、およびレンダラの操作に関するベスト プラクティスを紹介します。
GraphicsLayer.Renderer プロパティの設定
レイヤのシンボルを設定するには、GraphicsLayer.Renderer プロパティを使用する必要があります。Renderer プロパティを設定しないと、マップに GraphicsLayer が追加されたときデフォルトのレンダラが自動的に設定されます。マップにレイヤが追加される前に、GraphicsLayer.Renderer プロパティを設定してください。GraphicsLayer の Renderer プロパティは、Graphic.Symbol で設定したシンボルより常に優先されます。
GraphicsLayer gl = new GraphicsLayer()
{
ID = "IdentifyResultsLayer",
Renderer = new SimpleRenderer()
{
Symbol = identifyDialog.Resources["RedMarkerSymbol"] as Symbol
}
};
サポートされているレンダラ
保存と構成をサポートしているのは、現在のところ UniqueValueRenderer、ClassBreaksRenderer、SimpleRenderer だけです。サポート対象でないレンダラ タイプを使用した場合、生成されたレイヤをユーザがマップに追加したとき、そのレイヤのシンボルを構成することができません。たとえば、GraphicsLayer をマップに追加するツールを作成するとします。Application Builder のユーザは、ビューア アプリケーションを編集しているときにこのツールを実行できます。サポート対象のレンダラ タイプを使用すれば、生成されたレイヤをユーザがマップに追加した後、そのレイヤのシンボルを構成できます。また、アプリケーションを保存または配置する場合、そのアプリケーションのマップの一部としてレイヤが保存されます。GraphicsLayers のレンダラ タイプが保存と構成をサポートしていない場合は、これらの機能を使用できません(TemporalRenderer など)。
UniqueValueRenderer、ClassBreaksRenderer、SimpleRenderer 以外のレンダラ タイプを使用する場合は、Application Builder からそのツールを実行できないようにしてください。この 3 つ以外のレンダラ タイプは保存と構成をサポートしていません。Application.Current.IsEditMode が true かどうかをチェックし、true であれば、そのツールが実行されないようにします。
グラフィックス レイヤのシンボル
UI の XAML(Extensible Application Markup Language)のリソース コレクションで、GraphicsLayer で使用するシンボルを宣言します。シンボルはプログラミング可能ですが、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);