Android に新しく搭載された Fused Location Provider、これは GPS/WiFi/センサーを統合的に使ってその時ベストな位置を取得できるというもので、Google I/O のデモ が衝撃的だったので、自分でも試してみました。
駐車場に車を停めて、歩いて店内に入場、店内をなるべくゆっくり直線的にぐるっと徘徊して、退店、駐車場を歩いて戻って来ました。
緑が実際の経路、青が Fused Provider の経路です。
もう一度。 今度は入店してすぐエスカレータで2Fへ。2Fフロアをぐるっと回ってからエスカレータで1Fへ降りて駐車場へ戻って来ました。
うーん、かいかぶり過ぎたか Fused Provider。
確かに GPS と WiFi をシームレスに扱ってくれているようですが、期待していた屋内での測位結果はちょっと残念でした。
I/O のセッションの中では、WiFi+Sensor を使ってると言っていたので、WiFi-AP の電波強度と加速度センサーの振れ具合で自律測位してくれるのかなあと思ったのですが、あまり自律測位が機能してないように見えます。
屋外だとだいたい 10m前後、屋内でも 20〜40m くらいの精度でした。 上図の幅が約200mですが、実際の位置よりもっと離れている感じがします。
Fused Provider を使うと、妙に Accuracy が小さい(精度の良い)値が得られるのですが、実際の位置がその精度が示す円の中にも入らないこともあり、それなら高い確率で実際の位置を包括する(精度の悪い)WiFi or 基地局測位 の方が有用では?とも思えました。
また、施設内に WiFi-AP が何個あったとかの細かい調査はしていません(たぶん5〜6個)が、都会の繁華街とか地下街の方が圧倒的に多いと思うので、また違った結果が出るものと思います。
今回は PRIORITY_HIGH_ACCURACY
を使いました。これは GPS を使います。(PRIORITY_BALANCED_POWER_ACCURACY
は GPS を使いません[が、 ACCESS_FINE_LOCATION
を付けないと精度が数kmレベルになります。])
記録中の GPS アイコンの動きは、点滅 → 数秒後消える → また点滅 → GPSを捕捉したらつきっぱなし という感じで、屋外に移動すると GPS を捕まえる、屋内では度々トライするが捕まえられないのですぐ消える。という動きをしてました。
自律測位に状態認識(Activity Recognition)がもし使われているなら、持ちながらよりも、ポケットに入れっぱで歩いた方に最適化されてたかも知れないなあと思ったり。
ActivityRecognitionClient を試した 時も、持ちながらよりも尻ポケに入れたまま歩いた方が認識されやすい気がしました。気だけですが。