windows phone 8プログラミング~gps&地図編~

32
Windows Phone 8 プププププププ プププ ププププププププププ ~&~ 6 ププププププププププ 2013/7/27 ププ ププ (@kumar0001)

Upload: nobuaki-aoki

Post on 04-Dec-2014

989 views

Category:

Mobile


5 download

DESCRIPTION

第6回まどべんよっかいちでの発表内容です。Windows Phone 8での地図とGPS機能の使い方を紹介しました。

TRANSCRIPT

Windows Phone 8プログラミング

~地図&位置情報サービス編~

@第 6 回まどべんよっかいち2013/7/27青木 宣明 (@kumar0001)

自己紹介名前 青木宣明(あおきのぶあき)• 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. まとめ

Windows Phone8 と地図

• 新しい OS 標準地図アプリ• 新しい地図関連 API• 日本での問題点

WP8 での地図の変更点

1. 新しい OS 標準地図アプリ2. 新しい地図関連 API

1. 地図表示コントロール2. 地図関連タスク

新しい OS 標準地図アプリ• 地図表示• 現在位置への移動• 周辺の店舗等情報• 移動経路の検索

新しい地図関連 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 コントロールを使う

日本向け 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 の地図データは利用できない!

Windows Phone8 と位置情報

• 位置検出方法の比較• WinRT API での位置検出方法とそのメリット

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 回限りの測位メソッドが提供されている

連続測位で時間間隔、距離間隔を指定できる

Win8 ストアアプリとコードを共有できる

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) を処理 });} デモ

精度を指定

ここで測位を開始

補足:エミュレータについて• Map で指定した位置

を WP に取得させることができる (7.x/8)• 位置の指定• 移動順序に沿った再

生• 位置の保存、読込み

地図・位置情報の WEB サービス

• 地図作成• ジオコーダー• 移動経路• ロケーション関連

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

にアクセスする処理を実装する

まとめ

地図表示

• 新しい地図コントロールは日本では実用的に使えない• 旧来の BingMap 版の Map コントロールを使う

位置検出

• WinRT 版の GeoLocator は、 1 回限りの測位メソッドがあり便利• WP7.x とのコードの共通化をしなければ活用したい

Web サービス

• 地図・位置情報を扱うアプリが必要とする機能を補える• RESTサービスの使い方はほぼ同じ。マニュアルを読んでブラウザでアクセスしてみる• 利用規約にも注意が必要