バージョン

マップ要素を使用した画像の追加

xamMap で特定の場所をマークするために画像を追加するための賢明な方法は、 SymbolElement オブジェクトを使用してマップでマーカーを追加し、値テンプレートを使用して画像を提供することです。同じ画像を使用する複数の点がある時にこのアプローチは最も有効です。

たとえば、画像を追加したいマップに複数の州がある場合、これらの州のために SymbolElement オブジェクトを作成し、それらのオブジェクトをレイヤーに追加し、そしてそのレイヤー上の画像を含む Value template を適用できます。

以下のコードはピザを食べるのに最適な場所を表すためにピザの画像をニューヨークに追加する方法を示します。ニューヨークの上に SymbolElement オブジェクトを配置したレイヤーを作成し、値テンプレートを使用して画像を追加します。

XAML の場合:

<igMap:XamMap x:Name="map1">
   <igMap:XamMap.Layers>
      <igMap:MapLayer x:Name="statesLayer" Imported="statesLayer_Imported">
         <igMap:MapLayer.Reader>
            <igMap:ShapeFileReader Uri="/../../Shapefiles/usa_st" DataMapping="Name=STATE_NAME; Caption=STATE_ABBR" />
         </igMap:MapLayer.Reader>
      </igMap:MapLayer>
      <igMap:MapLayer x:Name="symbolLayer">
         <igMap:MapLayer.ValueTemplate>
            <DataTemplate>
               <Image Width="50" Height="50" Source="pizza.png" />
            </DataTemplate>
         </igMap:MapLayer.ValueTemplate>
      </igMap:MapLayer>
   </igMap:XamMap.Layers>
</igMap:XamMap>

Visual Basic の場合:

Private Sub statesLayer_Imported(ByVal sender As System.Object, ByVal e As Infragistics.Controls.Maps.MapLayerImportEventArgs)
        If e.Action = MapLayerImportAction.End Then
                ' Name プロパティを使用して要素を検索します
                Dim newYork As MapElement = map1.Layers(0).Elements.FindElement("Name", "New York").ElementAt(0)
                ' デカルト座標から Point データを取得します
                Dim nyOrigin As New Point(newYork.WorldRect.X + 350000, newYork.WorldRect.Y + 300000)
                ' 要素を作成します
                Dim element As New SymbolElement()
                element.SymbolOrigin = nyOrigin
                element.Caption = "Best Pizzarias"
                element.SymbolType = MapSymbolType.None
                element.SymbolSize = 20
                ' Value Template を使用できるように任意の値を指定します
                element.Value = 1
                map1.Layers(1).Elements.Add(element)
                ' 追加された図形のために十分なスペースを作ります
                Dim worldRect As Rect = map1.Layers(1).WorldRect
                worldRect.Union(element.WorldRect)
                map1.Layers(1).WorldRect = worldRect
        End If
End Sub

C# の場合:

private void statesLayer_Imported(object sender, Infragistics.Controls.Maps.MapLayerImportEventArgs e)
{
   if (e.Action == MapLayerImportAction.End)
   {
      // Name プロパティを使用して要素を検索します
      MapElement newYork = map1.Layers[0].Elements.FindElement("Name", "New York").ElementAt<MapElement>(0);
      // デカルト座標から Point データを取得します
      Point nyOrigin = new Point(newYork.WorldRect.X + 350000, newYork.WorldRect.Y + 300000);
      // 要素を作成します
      SymbolElement element = new SymbolElement() { SymbolOrigin = nyOrigin, Caption = "Best Pizzarias", SymbolType = MapSymbolType.None, SymbolSize = 20 };
      // Value Template を使用できるように任意の値を指定します
      element.Value = 1;
      map1.Layers[1].Elements.Add(element);
      // 追加された図形のために十分なスペースを作ります
      Rect worldRect = map1.Layers[1].WorldRect;
      worldRect.Union(element.WorldRect);
      map1.Layers[1].WorldRect = worldRect;
   }
}
XamMap Add Image Using Map Elements 01.png