ベスト プラクティス: グラフィックス レイヤ、シンボル、レンダラ

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);
11/30/2012