Bing Maps SDK for Windows Apps:タップした位置にプッシュピンを置く

(※本記事は2013年3月時点の情報により書き直しました。)

今回は以下の記事の方法を利用して地図上のタップした位置にプッシュピンを置きます。

まず XAML 上で定義したMapクラスにTappedイベントを定義します。

[XAML]

<bm:Map Credentials="開発者キー" x:Name="myMap"
        Tapped="myMap_Tapped"/>


TappedイベントにPushpinクラスを配置するコードを書いて行きます。まずTappedイベントが返すTappedRoutedEventArgsクラスのGetPositionメソッドを使用してMapクラスを基準としたタップ位置(ポインター位置)を取得します。

[C#]

private void myMap_Tapped(object sender, TappedRoutedEventArgs e)
{
     Point p = e.GetPosition(myMap);
}


次にポインター位置をMapクラスのTryPixelToLocationメソッドを使用してBing.Maps.Locationクラスに変換します。

[C#]

Bing.Maps.Location loc;
if (myMap.TryPixelToLocation(p, out loc))
{
}


変換したLocationクラスの位置にプッシュピンを置きます

[C#]

var pushpin = new Bing.Maps.Pushpin();
Bing.Maps.MapLayer.SetPosition(pushpin, loc);
myMap.Children.Add(pushpin);


Tappedイベントの最終形です。

[C#]

private void myMap_Tapped(object sender, TappedRoutedEventArgs e)
{
	Point p = e.GetPosition(myMap);
	Bing.Maps.Location loc;
	if (myMap.TryPixelToLocation(p, out loc))
	{
		var pushpin = new Bing.Maps.Pushpin();
		Bing.Maps.MapLayer.SetPosition(pushpin, loc);
		myMap.Children.Add(pushpin);
	}
}


実行結果です。タップした位置にプッシュピンが追加されます。