xamMap コントロールの MapTileSource プロパティは、地理的画像がロードされるソースを構成するために使用されます。サポートされる地理的画像のソースの完全なリストについては、 「サポートされる地理的画像」セクションを参照してください。ただし、このセクションは、地理的画像のソースとして OpenStreetMap だけに焦点を当てます。Open Street Maps Web マッピング サービスはライセンスされていないため、xamMap で作業するためのライセンス キーを提供しません。
Open Street Maps を地理的画像ソースとして xamMap コントロールに追加し、世界地図座標を設定します。
以下の一連の指示は、xamMap コントロールのために WPF プロジェクトをすでに設定済みであることを前提とします。
Microsoft® WPF® プロジェクトを作成します。
ソリューション エクスプローラーで次の参照をプロジェクトに追加します。
InfragisticsWPF4.Controls.Maps.XamMap.v20.1.dll
InfragisticsWPF4.DataVisualization.v20.1.dll
InfragisticsWPF4.v20.1.dll
以下の xamMap コントロールの名前空間宣言を追加します。
XAML の場合:
xmlns:igMap="http://schemas.infragistics.com/xaml"
Visual Basic の場合:
Imports Infragistics.Controls.Maps Imports Infragistics
C# の場合:
using Infragistics.Controls.Maps; using Infragistics;
XamMap コントロールを適切な投影タイプで追加します。
XAML の場合:
<igMap:XamMap x:Name="xamMap" >
<!-- TODO: 地理的画像データ ソースとして Open Street Maps を追加 -->
</igMap:XamMap>
MapTileSource プロパティを OpenStreetMapTileSource に設定します。
XAML の場合:
<igMap:XamMap.MapTileSource >
<igMap:OpenStreetMapTileSource/>
</igMap:XamMap.MapTileSource>
コード ビハインドで、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);
}
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();
}
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;
}
アプリケーションを実行します。xamMap コントロールは、Open Street Maps ソースから地図画像データをロードし表示します。以下のスクリーンショットはその結果を示します。