久しぶりの更新です。

今日はマップを表示したいと思います。

完成図はこんなイメージ。

マルドゥークのブログ-Hoge


①まずは、ツールボックスからMAPを選んで、セットしてください。

ツールボックスから、UIをセットする方法は
前回の記事
を参考にしてください。ボタンをセットしているので、それをMAPに変えるだけです。


②次にネームスペースの参照追加です

ネームスペースは、Javaでいうパッケージみたいなものです。

これはソースのトップにusingと宣言しているところに

using System.Device.Location;

using Microsoft.Phone.Controls.Maps;

と2行追加します。


ちなみにLocationはGPS関連
Mapsはその名の通りMapを扱うものです。

このまま、この2行を追加しても、コンパイルエラーが出ます。

VisualStudio右側の

ソリューションエクスプローラーの欄に参照設定の項目があります。

そこを右クリックして参照の追加を選んで

上記のネームスペースを参照に追加してください。




マルドゥークのブログ-hogehoge


場所は上記の画像を参考にしてみてください。


③次に、BingMapsAPIキーを取得します。

このページでキーを取得します。

ちなみに必要なものは

WindowsLiveIDです。

ここで取得したキーを

XAMLファイルないに記述します。

下記のようにマップを書き換えてください

<my:map width="444" verticalalignment="Top" name="map1" margin="6,126,0,0" horizontalalignment="Left" height="481"/>

<my:map width="444" verticalalignment="Top" name="map1" margin="6,126,0,0" horizontalalignment="Left" height="481">
  <!--bingMaps Keyの登録 -->
<my:map.credentialsprovider>
   <my:applicationidcredentialsprovider applicationid="ここにキーを記述" />
  </my:Map.CredentialsProvider>
</my:Map />


これで、実装前の準備は終了です。


④ここからソースコードを記述していきたいを思います。



中身については各行のコメント参考にしてください

public partial class MainPage : PhoneApplicationPage
{
//GPS用のフィールド
GeoCoordinateWatcher GeoWatcher = new GeoCoordinateWatcher();

/*縮尺の設定
* 0から20(最接近)
* 妥当な距離として16から18の間くらいが一般的な尺度と思われる
*/
private int MapScale = 16;


// Constructor
public MainPage()
{
InitializeComponent();


//GPSの場所が変化した時に呼び出されるイベントの設定
GeoWatcher.PositionChanged +=
new EventHandler>(wtc_PositionChanged);
//GPSの計測を開始
GeoWatcher.Start();
}

/**
* GPSの場所が変わるたびに呼び出されるメソッド
*/

void wtc_PositionChanged(object sender, GeoPositionChangedEventArgs e)
{
//緯度の取得及び表示
idoBlock.Text = e.Position.Location.Latitude.ToString();

//経度の取得及び表示
keidoBlock.Text = e.Position.Location.Longitude.ToString();

}
//ボタンがクリックされた時に呼ばれる処理
private void startBtnClick(object sender, RoutedEventArgs e)
{
MessageBox.Show("ボタンクリック");
/***
* 押した瞬間に現在地情報で更新
*/
//現在地を取得する
GeoCoordinate location = GeoWatcher.Position.Location;


//現在地情報が取得出来た場合
if (true != location.IsUnknown)
{
//緯度の取得及び表示
idoBlock.Text = "緯度:" + location.Latitude.ToString();


//経度の取得及び表示
keidoBlock.Text = "経度:"+ location.Longitude.ToStrin
g();

//マップ表示
map1.SetView(location, MapScale);



}
else {
MessageBox.Show("位置情報を取得できませんでした。ごめんなさい。");
return;

}



}
}


ちなみに

/**
* GPSの場所が変わるたびに呼び出されるメソッド
*/
void wtc_PositionChanged(object sender, GeoPositionChangedEventArgs e)
{
//緯度の取得及び表示
idoBlock.Text = e.Position.Location.Latitude.ToString();

//経度の取得及び表示
keidoBlock.Text = e.Position.Location.Longitude.ToString();

}


このメソッドについては、ボタンを押したときに更新すると言う処理で間に合う場合は、特に実装する必要はないです。

ざっくりこんな感じです。