バージョン

Open Street Maps へバインド

始める前に

xamMap コントロールの MapTileSource プロパティは、地理的画像がロードされるソースを構成するために使用されます。サポートされる地理的画像のソースの完全なリストについては、 「サポートされる地理的画像」セクションを参照してください。ただし、このセクションは、地理的画像のソースとして OpenStreetMap だけに焦点を当てます。Open Street Maps Web マッピング サービスはライセンスされていないため、xamMap で作業するためのライセンス キーを提供しません。

達成すること

Open Street Maps を地理的画像ソースとして xamMap コントロールに追加し、世界地図座標を設定します。

xamMap Binding Open Street Maps 01.png

以下の手順を実行します。

以下の一連の指示は、xamMap コントロールのために WPF プロジェクトをすでに設定済みであることを前提とします。

  1. Microsoft® WPF® プロジェクトを作成します。

  2. 以下の NuGet パッケージ参照をプロジェクトに追加します。

    • Infragistics.WPF.Controls.Maps.XamMap

    NuGet フィードのセットアップと NuGet パッケージの追加の詳細については、NuGet フィード ドキュメントを参照してください。

  1. 以下の xamMap コントロールの名前空間宣言を追加します。

XAML の場合:

xmlns:igMap="http://schemas.infragistics.com/xaml"

Visual Basic の場合:

Imports Infragistics.Controls.Maps
Imports Infragistics

C# の場合:

using Infragistics.Controls.Maps;
using Infragistics;
  1. XamMap コントロールを適切な投影タイプで追加します。

XAML の場合:

<igMap:XamMap x:Name="xamMap" >
        <!-- TODO: 地理的画像データ ソースとして Open Street Maps を追加 -->
</igMap:XamMap>
  1. MapTileSource プロパティを OpenStreetMapTileSource に設定します。

XAML の場合:

<igMap:XamMap.MapTileSource >
      <igMap:OpenStreetMapTileSource/>
</igMap:XamMap.MapTileSource>
  1. コード ビハインドで、User Control オブジェクトの Loaded イベントのイベント ハンドラーを追加します。

Visual Basic の場合:

Public Sub New()
        InitializeComponent()
        AddHandler Me.Loaded, AddressOf UserControl_Loaded
End Sub

C# の場合:

public MainPage()
{
      InitializeComponent();
      this.Loaded += new RoutedEventHandler(UserControl_Loaded);
}
  1. UserControl の Loaded イベントのイベント ハンドラーを実装します。

Visual Basic の場合:

Private Sub UserControl_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
        InitMapCoordinates()
End Sub

C# の場合:

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
        InitMapCoordinates();
}
  1. xamMap コントロールの世界地図座標を初期化するために以下のメソッドを追加します。

Visual Basic の場合:

Private Sub InitMapCoordinates()
        ' 世界のサイズを変換します
        Dim worldTopLeft As Point = New Point(-180, 90)
        Dim worldBottomRight As Point = New Point(180, -90)
        ' 測地座標をデカルト座標に変換します
        Dim winTopLeft As Point = Me.xamMap.MapProjection.ProjectToMap(worldTopLeft)
        Dim winBottomRight As Point = Me.xamMap.MapProjection.ProjectToMap(worldBottomRight)
        ' Rect 構造、地図コントロールの WindowRect および WorldRect を作成します
        Dim winRect As New Rect()
        winRect.X = Math.Min(winTopLeft.X, winBottomRight.X)
        winRect.Y = Math.Min(winTopLeft.Y, winBottomRight.Y)
        winRect.Width = Math.Abs(winTopLeft.X - winBottomRight.X)
        winRect.Height = Math.Abs(winTopLeft.Y - winBottomRight.Y)
        Me.xamMap.IsAutoWorldRect = False
        Me.xamMap.WindowZoomMaximum = 80
       ' 地図コントロールの WindowRect および WorldRect を変更します
        Me.xamMap.WorldRect = winRect
        Me.xamMap.WindowRect = winRect
End Sub

C# の場合:

private void InitMapCoordinates()
{
            // 世界のサイズを定義します
            Point worldTopLeft = new Point(-180, 90);
            Point worldBottomRight = new Point(180, -90);
            // 測地座標をデカルト座標に変換します
            Point winTopLeft = this.xamMap.MapProjection.ProjectToMap(worldTopLeft);
            Point winBottomRight = this.xamMap.MapProjection.ProjectToMap(worldBottomRight);
            // Rect 構造、地図コントロールの WindowRect および WorldRect を作成します
            Rect winRect = new Rect()
            {
                X = Math.Min(winTopLeft.X, winBottomRight.X),
                Y = Math.Min(winTopLeft.Y, winBottomRight.Y),
                Width = Math.Abs(winTopLeft.X - winBottomRight.X),
                Height = Math.Abs(winTopLeft.Y - winBottomRight.Y)
            };
            this.xamMap.IsAutoWorldRect = false;
            this.xamMap.WindowZoomMaximum = 80;
            // 地図コントロールの WindowRect および WorldRect を変更します
            this.xamMap.WindowRect = this.xamMap.WorldRect = winRect;
}
  1. アプリケーションを実行します。xamMap コントロールは、Open Street Maps ソースから地図画像データをロードし表示します。以下のスクリーンショットはその結果を示します。

xamMap Binding Open Street Maps 01.png