xamMap コントロールは、 サポートされる地図画像セクションに記載されている多数の地図画像のソースをサポートします。このトピックでは、地理的画像データ ソースとして Bing Maps を使用する方法について説明します。 xamMap コントロールの MapTileSource プロパティは、地図画像データを取得するために Microsoft の Bing Maps 画像サービスで使用されます。Bing Maps は Microsoft によってライセンスされている Web 地図サービスで、このトピックの以下の手順を続行する前に Microsoft の Web サイトから Bing Maps Key キーを取得する必要があります。
Bing Maps 地理的画像データをデータ ソースとして xamMap コントロールに追加し、コントロールのウィンドウ地図座標を初期化します。
以下の指示は、xamMap コントロールのためにプロジェクトを設定済みで、Bing Maps 画像サービスのキーを取得していることが前提となります。
Microsoft® WPF® プロジェクトを作成します。
ソリューション エクスプローラーで次の参照をプロジェクトに追加します。
InfragisticsWPF4.Controls.Maps.XamMap.v20.1.dll
InfragisticsWPF4.DataVisualization.v20.1.dll
InfragisticsWPF4.v20.1.dll
以下の xamMap コントロールの名前空間宣言を追加します。
XAML の場合:
xmlns:ig="http://schemas.infragistics.com/xaml"
Visual Basic の場合:
Imports Infragistics.Controls.Maps Imports Infragistics
C# の場合:
using Infragistics.Controls.Maps; using Infragistics;
xamMap コントロールをメインの XAML ファイルに追加します。
XAML の場合:
<ig:XamMap x:Name="igMap"> <!-- 注: ここで、シェープファイルなどを使用してさらに Map Layer オブジェクトを追加できます --> </ig:XamMap>
注: 以下の手順は、Bing Maps 画像サービスから地図画像のタイルを取得するために xamMap コントロールの設定で必要となります。
アプリケーション プロジェクトを右クリックし、[サービス参照の追加] をメニュー項目から選択します。
[サービス参照の追加] ウィンドウで [詳細] ボタンをクリックします。
[サービス参照設定] ウィンドウのクライアント セクションで [非同期操作を生成する] をチェックします。
[サービス参照の追加] ウィンドウの [Web 参照の追加] ボタンをクリックします。
以下のアドレスを [URL] テキストボックスに入力して [移動] ボタンをクリックします。
[Web 参照名] テキストボックスにBingImageryServiceReference と入力し、[参照の追加] ボタンをクリックします。
UserControl のコンストラクターで、UserControl の Loaded イベント用のハンドラーを追加して実装します。
Visual Basic の場合:
Private Sub UserControl_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
InitImageryService()
InitMapCoordinates()
End Sub
C# の場合:
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
InitImageryService();
InitMapCoordinates();
}
地図画像データを要求するために Bing Maps 画像サービスを初期化する以下のメソッドを追加します。
Visual Basic の場合:
Private Sub InitImageryService()
Dim mapImgRequest As New BingImageryServiceReference.ImageryMetadataRequest()
' 注: Bing Maps の本人キーを提供する必要があります
mapImgRequest.Credentials = New BingImageryServiceReference.Credentials()
mapImgRequest.Credentials.ApplicationId = "BING_MAPS_SECRET_KEY"
mapImgRequest.Style = BingImageryServiceReference.MapStyle.AerialWithLabels
' 地理的画像要求を処理するために非同期の Bing Maps サービスを作成します
Dim imgService As New BingImageryServiceReference.ImageryServiceClient("BasicHttpBinding_IImageryService")
AddHandler imgService.GetImageryMetadataCompleted, AddressOf OnImageryServiceGetImageryMetadataCompleted
imgService.GetImageryMetadataAsync(mapUriRequest)
End Sub
C# の場合:
private void InitImageryService()
{
BingImageryServiceReference.ImageryMetadataRequest mapImgRequest = new BingImageryServiceReference.ImageryMetadataRequest();
// 注: Bing Maps の本人キーを提供する必要があります
mapImgRequest.Credentials = new BingImageryServiceReference.Credentials();
mapImgRequest.Credentials.ApplicationId = "BING_MAPS_SECRET_KEY";
mapImgRequest.Style = BingImageryServiceReference.MapStyle.AerialWithLabels;
// 地理的画像要求を処理するために非同期の Bing Maps サービスを作成します
BingImageryServiceReference.ImageryServiceClient imgService = new BingImageryServiceReference.ImageryServiceClient("BasicHttpBinding_IImageryService");
imgService.GetImageryMetadataCompleted += OnImageryServiceGetImageryMetadataCompleted;
imgService.GetImageryMetadataAsync(mapImgRequest);
}
地理的画像の要求を処理し、xamMap コントロールで地理的画像を表示するために以下のメソッドを追加します。
Visual Basic の場合:
Private Sub OnImageryServiceGetImageryMetadataCompleted(ByVal sender As Object, ByVal e As BingImageryServiceReference.GetImageryMetadataCompletedEventArgs)
Dim result As BingImageryServiceReference.ImageryMetadataResult = e.Result.Results(0)
Dim source As New Infragistics.Controls.Maps.BingMapsTileSource()
source.TilePath = result.ImageUri
source.SubDomains = New ObservableCollection(Of String)(result.ImageUriSubdomains)
igMap.MapTileSource = source
End Sub
C# の場合:
private void OnImageryServiceGetImageryMetadataCompleted(object sender, BingImageryServiceReference.GetImageryMetadataCompletedEventArgs e)
{
BingImageryServiceReference.ImageryMetadataResult result = e.Result.Results[0];
igMap.MapTileSource = newInfragistics.Controls.Maps.BingMapsTileSource()
{
TilePath = result.ImageUri,
SubDomains = new ObservableCollection<string>(result.ImageUriSubdomains)
};
}
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.igMap.IsAutoWorldRect = False
Me.igMap.WindowZoomMaximum = 80
' 地図コントロールの WindowRect および WorldRect を変更します
Me.igMap.WorldRect = winRect
Me.igMap.WindowRect = winRect
End Sub
C# の場合:
private void InitMapCoordinates()
{
// 世界のサイズを定義します
Point worldTopLeft = new Point(-180, 90);
Point worldBottomRight = new Point(180, -90);
// 測地座標をデカルト座標に変換します
Point winTopLeft = this.igMap.MapProjection.ProjectToMap(worldTopLeft);
Point winBottomRight = this.igMap.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.igMap.IsAutoWorldRect = false;
this.igMap.WindowZoomMaximum = 80;
// 地図コントロールの WindowRect および WorldRect を変更します
this.igMap.WindowRect = this.igMap.WorldRect = winRect;
}
プロジェクトを保存して実行します。xamMap コントロールは、Bing Maps ソースから地理的画像データをロードし表示します。以下のスクリーンショットはその結果を示します。