久しぶりの更新です。

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

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

マルドゥークのブログ-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();

}


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

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

IS12Tを買ったので、ウインドウズフォンのアプリ開発にも、手を出してみることにしました。
ひとまず環境構築は終えて、ハローワールドをやったので、手近なコンテストを目指して頑張ってみることにしました。

まずは、マップアプリに手を出してみようと思っています。


今日やったことは、ボタンイベントの取得。←実は、まだ、これすらやったことのないWP7の初心者です。

「はじめの一歩」と題しまして、
ボタンイベントの取得について、やってみようと思います。



VisualStadioを立ち上げ、プロジェクトの作成を行なったら、
まずはボタンを起きます。
①ツールボックスからボタンを選択
②ボタンをドラッグして任意の場所におく



マルドゥークのブログ-①ボタンをセット


次に
③ボタンの各項目に値をセットしていきます。
xamlから変更も可能ですが、まだ初心者のため、右側のプロパティ設定から変更していきたいと思います。

マルドゥークのブログ-②プロパティの設定

右側のオレンジで囲んだ場所で各値を設定できます。
今回は
BackGround ボタンの背景色 
  ※デフォルトで透明になっているので注意
BroderBrush ボタンの枠線
Content 表示される文字

この3つを変更してみました。
ちなみにIS12Tがマゼンタなので、背景をマゼンタにしてみました。


④クリックイベントを取得。
今日やったことの胆です。


マルドゥークのブログ-③クリック時に呼び出すメソッドを定義


さっきプロパティをセットしたところ、実は、切り替えれるのです。
右側の雷みたいな長音記号1←こんな感じのタブ(上の画像で○してるところです。)をクリックしてください。

表示されている項目が切り替わります。
その中からClickというのを探しください。
そして、Clickの右側の項目に呼び出されるメソッド名(任意の名前)を入力してください。
とりあえずここでは[startBtnClick]という名前を入れてみました。


すると・・・・・・・・・・・・・。



マルドゥークのブログ-④こんなソースができました。


namespace UragawaMap
{
public partial class MainPage : PhoneApplicationPage
{
// Constructor
public MainPage()
{
InitializeComponent();
}

private void startBtnClick(object sender, RoutedEventArgs e)
{
 
}
}
}

画像じゃ 分かりにくかったのソースコピペで
赤文字部分が自動生成されます。

ボタンがクリックされたとき、この赤文字部分が呼ばれるわけです。
Androidで言うところのxmlファイルでonClick="hogehogeClick"って属性指定する感じです。

で、この赤文字部分に処理を入れてみました。

//ボタンがクリックされた時に呼ばれる処理
private void startBtnClick(object sender, RoutedEventArgs e)
{
System.Console.WriteLine("onClick ポチっとなボタン");
}

コンソールにメッセージを出すだけです。



これ実行・・・・。
しかし

コンソールってどうやって確認するんだっけ・・・・・?

調べんのめんどくせぇ

あっデバックポインタを使って呼び出されているか確認しよう

って事でデバッグポインタを置いてみた。

マルドゥークのブログ-⑤デバッグポインタを置いてみた


⑤改めて実行して動作確認。

マルドゥークのブログ-⑥画面



こんな感じでエミュレータが起動しました。

⑥ポチっとなを押してみました。


マルドゥークのブログ-⑦デバッグポインタで止まったよ。


すると、startBtnClickメソッドのないのデバッグポインタでちゃんと処理が中断されました。
⑦設定したメソッドは呼ばれているようです。
よかった、よかった。


ここまでで、つまづいた場所をかく。

RPCサーバーが実行できません。
⇒何かよくわからんですが、最初に起動した場合に起きるみたいです。
2回目以降の起動では発生しないです。
頻発するなら原因調査。

system.exception
⇒今回の原因はプロパティの設定ミスでした。必要ないプロパティはいじらない、もしくはリセットして初期化すると治ることがあります。(あくまで、その場しのぎの対策なので、もっと各パラメータごとの設定地を調べる必要はあります。)

エミュレータ、IDEが重い
⇒よくあることです。

次は、ボタンを押したときにマップを表示するように実装です。