Bing Maps SDK for Windows Apps:デバイスの現在位置を表示する
(※本記事は2013年3月時点の情報により書き直しました。)
今回は以下の記事の方法を利用して現在使っているデバイスの位置を地図上に表示してみます。
手順は以下の通りです。
- デバイスの現在位置を取得する
- 地図の表示範囲をデバイスの現在位置の周辺に変更する
- デバイスの現在位置の座標にプッシュピンを置く
デバイスの現在位置を取得する
ソリューション内のPackage.appxmanifestを開きアプリケーションが利用する機能として[場所]を追加しておきます。
Windowsストアアプリからデバイスの現在位置を取得するには、Windows.Devices.Geolocation.GeolocatorクラスのGetGeopositionAsync()メソッドを使用します。
[C#]
private async void ZoomToDeviceLocation() { //現在位置をデバイスから取得 Geolocator geoLocator = new Geolocator(); Geoposition loc = await geoLocator.GetGeopositionAsync(); }
地図の表示範囲をデバイスの現在位置の周辺に変更する
取得したデバイスの現在位置を中心にその周辺に地図の表示範囲を変更します。地図の中心を示すBing.Mas.LocationクラスはGetGeopositionAsyncで取得したGeopositionクラスの座標値から生成します。
[C#]
//デバイスの現在位置に表示位置を変更 var deviceLocation = new Bing.Maps.Location(loc.Coordinate.Latitude, loc.Coordinate.Longitude); myMap.SetView(deviceLocation, 18, TimeSpan.FromSeconds(3));
デバイスの現在位置の座標にプッシュピンを置く
デバイスの現在位置にプッシュピンを置きます。
[C#]
//デバイスの現在位置にプッシュピンを置く var pushpin = new Bing.Maps.Pushpin(); Bing.Maps.MapLayer.SetPosition(pushpin, deviceLocation); myMap.Children.Add(pushpin);
実行してみる
コードの最終形です。ズームレベルとプッシュピンの表示の有無を引数にしました。
[C#]
private async void ZoomToDeviceLocation(double zoomLevel, bool showPushin) { //現在位置をデバイスから取得 Geolocator geoLocator = new Geolocator(); Geoposition loc = await geoLocator.GetGeopositionAsync(); //デバイスの現在位置に表示位置を変更 var deviceLocation = new Bing.Maps.Location(loc.Coordinate.Latitude, loc.Coordinate.Longitude); myMap.SetView(deviceLocation, zoomLevel, TimeSpan.FromSeconds(3)); //プッシュピンを表示するのであれば if (showPushin) { //デバイスの現在位置にプッシュピンを置く var pushpin = new Bing.Maps.Pushpin(); Bing.Maps.MapLayer.SetPosition(pushpin, deviceLocation); myMap.Children.Add(pushpin); } }
とりあえず今回は、アプリ起動後に呼び出します。
[C#]
public MainPage() { this.InitializeComponent(); //デバイスの現在位置を表示 ZoomToDeviceLocation(18, true); }
シュミレーターを使用している場合はまずデバイスの現在位置を設定しておきます。シュミレータ―を起動し、右メニューから地球儀アイコンをクリックして現在位置を設定します。今回は東京スカイツリーの座標(緯度:35.710139、経度:139.810833)を使います。
最初にアプリケーションを起動すると、アプリケーションが位置情報を使用しても良いか許可を求められます。