【DroidKaigi 2017】位置情報を正確にトラッキングする技術
自己紹介
- @mizutory
- 元SonyEricsson
- 現在 Goldrush Computing
- 位置情報を使ったネイティブアプリ開発をしていた
アジェンダ
- 位置情報の取得
- マップへの描画
- 位置情報フィルタリング
- バッテリー消費について
位置情報の取得
メモ
マップへの描画
メモ
- 位置情報を使うアプリでも、マップを使わないアプリはあると思うが、デバッグ目的でマップ上に位置情報を出して見れるようにしておいたほうがわかりやすい
- バグも見つけやすい
map.addCircle()
- Accuracyをこいつにセットすると、円で精度が見れるようになるので良い
map.addMarker()
- 位置が分かる
map.位置情報を線で繋ぐメソッド()
- 通った経路がわかる
フィルタリング
取得時刻でフィルターする
位置情報取得タイミングに影響を与えるもの
- GPS衛星の位置 (頭上にたくさんあるかどうか)
- 衛生とAndroid機との間の障害物 (ビル、受寄、雲など)
- 携帯電話基地局の位置 (近くにたくさんあるか)
- 携帯電話基地局とAndroid機との間の障害物の状況
- 古い位置情報が来るときは、キャッシュされた位置情報
サンプルコード
メモ
- 水平方向の精度は
getAccuracy
で取れるのだが、取れないケースがある getAccuracy()
の精度は68%- ドキュメントに書いてある
- 信じすぎない
- 最近のOSの時はあまりおかしい時はないが、4とか5の時はおかしいことが多かった
- KalmanFilterでフィルターすることで対応していた
- 移動速度などから次の位置情報の予測をしてくれる
- Accuracyが良いのに、おかしい時はこいつでフィルタリングする
- これで弾いた情報をマップ上に出すことで、おかしくなる場所を見れるようにしたりもしていた
バッテリー
メモ
- 3-5分、5-6kmでの消費量
- 2~4%くらい
- 5km か 5時間走っても3,40%くらい
- 残量取得はサンプルコードに乗せているので見てね
バッテリー残量を意識した設計
- バッテリー残量によってCriteriaを変える
- Minmum DistanceとMinimumTimeは変えてもGPSチップが消費するエネルギー量は同じ
- 計測して見たけど変わらなかった
耐久性について
- 全然取れなかったら妥協してとるという設計方法があるけど、詳しくは懇親会で聞いて
まとめ
- もう少し詳しい内容を後日ブログに書くよ