40
iPhone でバックグラウンド位置情報 アプリケーションを作ってみた。 by Haruyuki Seki(@hal_sk) 20101023日土曜日

iPhone でバックグラウンド位置情報アプリケーションを作ってみた。

  • Upload
    hal-seki

  • View
    14.144

  • Download
    4

Embed Size (px)

Citation preview

•関 治之•シリウスラボ 所長• Georepublic Japan CEO•ジオメディアサミット 主催

hal_sk です。

2010年10月23日土曜日

位置情報とモバイルが好きです。

2010年10月23日土曜日

突然ですが

2010年10月23日土曜日

OpenStreetMapって知ってます?

2010年10月23日土曜日

自由な地理情報データを作成することを目的とした世界的なプロジェクト

OpenStreetMapって知ってます?

2010年10月23日土曜日

①Logging

2010年10月23日土曜日

②Upload

2010年10月23日土曜日

③Edit

2010年10月23日土曜日

ライセンスフリーの地図ができる

2010年10月23日土曜日

iPhone でもログが取れます• OSM Track

2010年10月23日土曜日

でも、OSM Track では

• Sleep 中やバックグラウンド起動中にログを取らない!

2010年10月23日土曜日

iOS4.0からはバックグラウンドでアプリを動かせる

2010年10月23日土曜日

バックグラウンドで使える7つの機能

• Fast App Switching• Background Audio• Background Location• Background VoIP• Task Compression• Push Notification• Local Notification

2010年10月23日土曜日

というわけで

2010年10月23日土曜日

自分でロガーを作ってみよう

2010年10月23日土曜日

検証したいこと

•どれくらいの精度なの?•電池の消費は?

2010年10月23日土曜日

CLLocationManagerのメソッド

• startUpdateLocationGPSとWi-Fi測位

• startMonitoringSignificantLocationChanges基地局が変わったらイベント発生

• startMonitoringForRegion:desiredAccuracy指定したエリアに入ったらイベント発生

2010年10月23日土曜日

今回はこの2つで実験

CLLocationManagerのメソッド

• startUpdateLocationGPSとWi-Fi測位

• startMonitoringSignificantLocationChanges基地局が変わったらイベント発生

• startMonitoringForRegion:desiredAccuracy指定したエリアに入ったらイベント発生

2010年10月23日土曜日

使い方LocationCheckViewController.h@interface LocationCheckViewController <CLLocationManagerDelegate>{! CLLocationManager *locMan;}

LocationCheckViewController.m@implementation LocationCheckViewController- (void)loggingStart{! locMan = [[CLLocationManager alloc] init]; // ①! locMan.delegate = self; // ②! [locMan startUpdatingLocation];//③! [locMan startMonitoringSignificantLocationChanges];//③’}

CLLocationManager のインスタンスを作り(①)、CLLocationManagerDelegate を実装した delegate を設定し(②)、startUpdatingLocation(③) かstartMonitoringSignificantLocationChanges(③’)を呼ぶ

2010年10月23日土曜日

緯度経度の取り方- (void)locationManager:(CLLocationManager *)manager

! didUpdateToLocation:(CLLocation *)newLocation! ! fromLocation:(CLLocation *)oldLocation{! NSString *log = [self makeLogText:newLocation];! [self logText:log];}

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{! [self logTextWithTime:[NSString stringWithFormat:@"LocationManager Failed %@", [error localizedDescription]]];}

delegateで設定されたクラスの-(void)locationManager:didUpdateToLocation:fromLocation:か-(void)locationManager:didFailWithError:が呼ばれる。

2010年10月23日土曜日

バックグラウンド対応

• info.plist ファイルに、Key:Required background modes Value:App registers for location updates を追加

2010年10月23日土曜日

完成

http://github.com/halsk/iPhone_GPS_Logger

2010年10月23日土曜日

使ってみよう!精度をどうやって測ろうか?

2010年10月23日土曜日

山手線コンピューティング!

2010年10月23日土曜日

3周しました!

2010年10月23日土曜日

なぜ3周したか

•1周目:フォアグラウンド測位•2周目:バックグラウンド測位•3周目:SignificantLocation

2010年10月23日土曜日

ログを見てみましょう!

2010年10月23日土曜日

1周目:Foreground低Accuracy 込み 低Accuracy 抜き

2010年10月23日土曜日

1周目:Foreground低Accuracy 込み 低Accuracy 抜き

恵比寿~大崎間でうまく取れていない線路から数百mずれるときはあるが、概ね良好

1秒に1回くらいレスポンスありログ数:3106回

※低Accurasy=誤差500m以上

2010年10月23日土曜日

2周目:Background低Accuracy 込み 低Accuracy 抜き

2010年10月23日土曜日

2周目:Background低Accuracy 込み 低Accuracy 抜き

バックグラウンドに回ると精度が結構落ちる

測位回数が減る(1分待つこともあり)ログ数:361回

2010年10月23日土曜日

3週目:Significant

2010年10月23日土曜日

3週目:Significant

精度は、誤差1km場所自体は意外とずれてない測位回数はわずか17回

2010年10月23日土曜日

電池消費

•1周目:15~20%の間で消費•2周目:5~10%の間で消費•3周目:1~5%の間で消費

※[UIDevice batteryLevel] は、5%刻みでしか取れないので正確に測れなかった

2010年10月23日土曜日

結論

•地図書く精度が必要なら、Foreground の方がいい

•写真とったりメールみたりTwitterしたくなった時にも取り続けることができるので、無いよりましかな

2010年10月23日土曜日

ていうか•My Tracks 使えばいいよね

•バックグラウンド対応•写真撮影やWaypointなどのメモ機能あり

2010年10月23日土曜日

車輪の再発明

2010年10月23日土曜日

時間があればやるかも

•地図をOSMへ変更•メモ書き、写真撮影機能• OSMへのアップロード機能•Waypointの追加・編集機能• Foursquare連携とか• iPad 対応

2010年10月23日土曜日