久しぶりの更新です。
今日はマップを表示したいと思います。
完成図はこんなイメージ。
①まずは、ツールボックスからMAPを選んで、セットしてください。
ツールボックスから、UIをセットする方法は
前回の記事
を参考にしてください。ボタンをセットしているので、それをMAPに変えるだけです。
②次にネームスペースの参照追加です
ネームスペースは、Javaでいうパッケージみたいなものです。
これはソースのトップにusingと宣言しているところに
using System.Device.Location;
using Microsoft.Phone.Controls.Maps;
と2行追加します。
ちなみにLocationはGPS関連
Mapsはその名の通りMapを扱うものです。
このまま、この2行を追加しても、コンパイルエラーが出ます。
VisualStudio右側の
ソリューションエクスプローラーの欄に参照設定の項目があります。
そこを右クリックして参照の追加を選んで
上記のネームスペースを参照に追加してください。
場所は上記の画像を参考にしてみてください。
③次に、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 />
中身については各行のコメント参考にしてください
ちなみに
このメソッドについては、ボタンを押したときに更新すると言う処理で間に合う場合は、特に実装する必要はないです。
ざっくりこんな感じです。
今日はマップを表示したいと思います。
完成図はこんなイメージ。
①まずは、ツールボックスからMAPを選んで、セットしてください。
ツールボックスから、UIをセットする方法は
前回の記事
を参考にしてください。ボタンをセットしているので、それをMAPに変えるだけです。
②次にネームスペースの参照追加です
ネームスペースは、Javaでいうパッケージみたいなものです。
これはソースのトップにusingと宣言しているところに
using System.Device.Location;
using Microsoft.Phone.Controls.Maps;
と2行追加します。
ちなみにLocationはGPS関連
Mapsはその名の通りMapを扱うものです。
このまま、この2行を追加しても、コンパイルエラーが出ます。
VisualStudio右側の
ソリューションエクスプローラーの欄に参照設定の項目があります。
そこを右クリックして参照の追加を選んで
上記のネームスペースを参照に追加してください。
場所は上記の画像を参考にしてみてください。
③次に、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, GeoPositionChangedEventArgse)
{
//緯度の取得及び表示
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.ToString();
//マップ表示
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();
}
このメソッドについては、ボタンを押したときに更新すると言う処理で間に合う場合は、特に実装する必要はないです。
ざっくりこんな感じです。