windows phone 8プログラミング~gps&地図編~
DESCRIPTION
第6回まどべんよっかいちでの発表内容です。Windows Phone 8での地図とGPS機能の使い方を紹介しました。TRANSCRIPT
自己紹介名前 青木宣明(あおきのぶあき)• Twitter @kumar0001• Facebook http://www.facebook.com/nobukuma
趣味 熊好き、テディベア制作職歴 名古屋市内の某企業で SE として• C 言語+ Win32API での WinCE5.0 案件とか、 Java での Web
サービス開発など非 .NET 系が多数
関心事• Windows Phone 8• Windows 8 ストアアプリ• Raspberry Pi, Arduino
これまでの活動
Windows Phone 8 の新機能を順次紹介してます。• まどべん 4th “WP8 SDK の紹介”• まどべん 5th “WP8 での近接通信”• COD2013jp “ カメラ&フォト”• まどべん 6th “ 地図&位置情報サービス”
これからの予定
Windows Phone 8 が日本で出そうもないので… Win8 ストアアプリに取り組んでいく予定• WP8
音声、検索の機能拡張、 3D 、 …• Win8 ストアアプリ
Windows 8.1 ストア AP vs Windows Phone 8 との比較
Raspberry Pi, Arduino• WP8, Win8 との連携
Agenda
•新しい地図コントロール&タスク•日本での問題点1. WP8 と地図
•2通りの方法•エミュレータ
2. WP8 と位置情報
•地図作成•ジオコーダー•移動経路•ロケーション関連情報
3. 地図・位置情報とWebサービス
4. まとめ
新しい地図関連 APIWindows Phone 7.x / 8 Windows Phone 8
地図データ Bing Map Nokia Map
地図表示コントロール
Microsoft.Phone.Controls.Maps
Microsoft.Phone.Maps.Controls
地図表示タスク BingMapsTask MapsTask
道順表示タスク BingMapsDirectionsTask MapsDirectionsTask
地図 DL タスク - MapDownloaderTask
地図更新タスク - MapUpdaterTask
地図表示タスク OS 標準の地図 AP で指定場所を表示する
道順表示タスク OS 標準の地図 AP で移動経路を表示する
地図 DL タスク オフライン利用の地図データを取得する( 日本は対象外 )
地図更新タスク オフライン利用の地図データを更新する
日本での問題点日本では新しいマッ
プは非実用的• 地図データが整備さ
れていなくほぼ真っ白• 移動経路の探索はで
きるが、地図データが乏しいので実用に耐えない
日本向けの WP8 アプリでは別の方法が必要
デモ
日本向け WP8 アプリでの地図表示 (1of2)方法 1これまでの BingMap コントロールを使う
1. 参照の追加C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\Libraries\Microsoft.Phone.Controls.Maps.dll
2. 名前空間の追加xmlns:bingmaps="clr-namespace:Microsoft.Phone.Controls.Maps;assembly=Microsoft.Phone.Controls.Maps“
3. コントロールの配置<bingmaps:Map/>
日本向け WP8 アプリでの地図表示 (2of2)方法 2WP8 の Map コントロールにVirtualEarth.net の地図データを読み込む
高橋 忍のブログ「 Bing Map Control で日本の地図を」http://blogs.msdn.com/b/shintak/archive/2011/06/08/10172426.aspx
hereMap.TileSources.Add( new Microsoft.Phone.Maps.Controls.TileSource( "http://ecn.t1.tiles.virtualearth.net/tiles/r{quadkey}.png?g=1"))
Google Map の利用について
Using our ServicesYou must follow any policies made available to you within the Services. Don’t misuse our Services. For example, don’t interfere with our Services or try to access them using a method other than the interface and the instructions that we provide.
Google 利用規約 http://www.google.co.jp/intl/ja/policies/terms/regional.html
Google が提供したインターフェース以外でのサービスの利用は禁止されている。
現時点では旧来の BingMap コントロールを使う回避策がおすすめ
「 Google Map の地図データは使えないの?」
「 Map コントロールで Google Map の地図データを使う例をブログで見たことがあるけど?」
Google Map の地図データは利用できない!
WP での位置情報取得.NET Location API Windows Runtime Location API
クラス GeoCoordinateWatcher GeoLocator
名前空間 System.Device.Location Windows.Devices
測定精度 (enum) GeoPositionAccuracy・ Default・ High
PositionAccuracy・ Default・ HighDesiredAccuracyInMeters
移動検知の制限 指定可 (MovementThreshold プロパティ )
指定可 (MovementThreshold プロパティ )
測定状態 (enum) GeoPositionStatus・ Disabled (PF が未サポート、未許可 )・ Ready ( データ利用可能 )・ Initializing ( 初期化中 )・ NoData ( データがまだない )
PositionStatus・ Ready ( データ利用可能 )・ Initializing ( 初期化中 )・ NoData ( データがまだない )・ Disabled ( ユーザが許可していない )・ NotInitialized ( 初期化されていない )・ NotAvailable (PF が対応していない )
測定方法 ・位置変更イベントでの通知 ・ 1 回だけ測定・位置変更イベントでの通知
戻り値クラス System.Device.Location.GeoCoordinate Windows.Devices.Geolocation.Geoposition
利用可能 WP WP7.x / WP8 WP8
GeoLocator の使い方 (1 回の測位 )
準備 •ユーザに位置情報サービス利用可否の確認
設定 •GeoLocatorインスタンスの生成•測位精度(DesiredAccuracyInMeters, DesiredAccuracy)の設定
測位 •GetGeopositionAsyncメソッドの呼び出し(Geopositionを返す)•取得した位置の取得、処理
GeoLocator の使い方 (1 回の測位 )Geolocator oneShotGeoLocator = new Geolocator{ DesiredAccuracyInMeters = 50,};try{ Geoposition position = await oneShotGeoLocator.GetGeopositionAsync( TimeSpan.FromSeconds(30), // 30 秒以内のキャッシュは利用可 TimeSpan.FromSeconds(10) // タイムアウト 10 秒 ); // 位置情報の処理}catch (Exception ex){ if ((uint)ex.HResult == 0x80004004) { // Capability がない場合 } else { // その他の例外処理 }}
キャッシュの有効期間・タイムアウトを指定
精度を指定
デモ
GeoLocator の使い方 ( 連続測位 )
準備 • ユーザに位置情報サービス利用可否の確認
設定
• GeoLocator インスタンスの生成• 測位精度、移動検知距離などの設定• StatusChanged( 状態変化 ) イベントの処理• PositionChanged( 位置変化 ) イベントの処理 →
Tracking を開始
測位 •StatusChangedイベントの処理•PositionChangedイベントの処理
後処理 •イベントハンドラの削除•インスタンスの破棄
GeoLocator の使い方 ( 連続測位 ){ this.geoLocator = new Geolocator(); this.geoLocator.DesiredAccuracy = PositionAccuracy.High; this.geoLocator.MovementThreshold = 50;
this.geoLocator.StatusChanged += geoLocator_StatusChanged; this.geoLocator.PositionChanged += geoLocator_PositionChanged; // ...}void geoLocator_PositionChanged(Geolocator sender, PositionChangedEventArgs args){ Dispatcher.BeginInvoke(() => { // 位置情報 (args.Position) を処理 });}void geoLocator_StatusChanged(Geolocator sender, StatusChangedEventArgs args){ Dispatcher.BeginInvoke(() => { // 状態 (args.Status) を処理 });} デモ
精度を指定
ここで測位を開始
Windows Phone が提供する機能
Windows Phone が提供しない機能
WP8 の機能を補うためには
地理情報住所
ランドマーク
道順の検索交通情報地図の表示
位置の検出
Web サービスを利用して地理情報などを補う
地図・位置情報関連の Web サービス
地図• 静的な地図
の生成• 標高の取得• 2 点間の距離
の取得
ジオコーダ• 地名⇔位置
情報• 郵便番号⇔
位置情報• ランドマー
ク⇔位置情報
道順• 目的地まで
の移動経路
ロケーション情報• 店舗情報• 交通情報
( 渋滞、事故など )
• 公共交通機関 ( 最寄り駅、バス停など )
代表的な Web サービス提供元
Bing Maps•利用上の制約あり(http://www.microsoft.com/maps/product/terms.html)•http://www.microsoft.com/maps/
Yahoo! Open Local Platform (YOLP)•日本国内の情報に基づいた独特のAPIがある•http://developer.yahoo.co.jp/webapi/map/
Google Maps•Windows Phoneでは利用不可•https://developers.google.com/maps/?hl=ja
Google Maps API の利用について
(g) No Use of Content without a Google Map. You must not use or display the Content without a corresponding Google map, unless you are explicitly permitted to do so in the Maps APIs Documentation, or through written permission from Google.In any event, you must not use or display the Content on or in conjunction with a non-Google map. For example, you must not use geocodes obtained through the Service in conjunction with a non-Google map.
Google Maps/Google Earth APIs Terms of Service https://developers.google.com/maps/terms?hl=ja
Google Map に表示せずにコンテンツを使うことが禁止されている(例:ジオコーダーの結果)
Google Map が使えない WP8 アプリでは、 Google Maps API を利用できない。
Web サービス比較Bing Maps YOLP
AP キー 1ID で 3個(1個は試用 )
1ID で 10個
制限 Bing Map で表示する50000 transactions/24 時間 ,1KEY他サービスとの併用不可
50000 総リクエスト /1日 ,1KEY(午前 0 時にリセット )
API AJAX V7Windows ストア AP (JS, .NET)RESTサービスSpatial Dataサービス (REST)WPF コントロールSilverlight コントロール
RESTサービスJavaScript マップ SDKSilverlight マップ APIiOS マップ SDKAndroid マップ SDKSilverlight マップ SDK
機能 地図画像ジオコーダ (緯度経度、住所、郵便番号 )道順・交通情報標高
地図画像ジオコーダ (緯度経度、住所、郵便番号 )ロケーション情報道順・距離・標高
不足したら別 ID 取得
(APごとに ID 取得 )
WP からは RESTサービスを使用
WP からは RESTサービスを使用
REST サービスの利用方法
入力データ準備 •APIに入力するデータを準備する•GETメソッドのURLとして指定することが多い
アクセス •指定されたHTTPメソッドでURLにアクセスする•WebRequestもしくはWebClientを使う
出力の解析 •HTTPレスポンスに含まれるサービスの出力を解析する•出力形式はJSONもしくはXMLが多い→クラスにデシリアライズすれば完了
デモ : ジオコーダ ( 住所→緯度・経度 )
API の仕様調査• マニュアルで入力、出力の仕様を調べる
• Web ブラウザで手動で試してみる
API アクセスの実装• JSON.NET などを使って API
にアクセスする処理を実装する