Geolocation API の精度

Geolocation API で現在地情報を取得する際、使ってる端末の Wifi アダプタを ON にしている場合だと、格段に精度が向上することに気付いたので調べてみた。大方、Wifi アダプタで拾えるアクセスポイントのmacアドレスを使ってるってことなんだろうけど、気になったので MozillaChromium のコードを読んでみた。こういうときのオープンソース万歳。

挙動

どちらのコードも流し読みをしただけだが、共通する点を述べると、

  • Wifi アクセスポイントの一覧を取得(mac アドレスや SSID、信号強度などの情報をゲット)
  • それらを元に Google の位置情報サービスに問い合わせ、得た位置情報を返す

ということをやっている。

Google の位置情報サービス自体は Google が色々やって収集した情報を元にしているので、GoogleWifi アクセスポイントの情報を収集されていない地域、またはアクセスポイントSSID の末尾に「 _nomap 」を付けて、Googleからの収集を拒否してるアクセスポイントだらけの地域にいる場合は、Wifi アダプタを ON にしても、位置情報の精度は向上しない。後者のような地域が少なくとも都市部ではどれだけあるのか非常に疑問ではあるけど。

Opera

OperaWifi を ON にした場合では、OFF にした場合と比べて格段に精度が向上した。
Opera位置情報のプロバイダに Google Location Service を使っているので、同じような手順を踏んでいると思われる。

Safari

手元に無いので調べてない。

IE9

Microsoft Location Service を使っている。リンク先で解説されているけど、IP アドレスや近くの Wifi アクセスポイントの一覧から得た情報を元にサーバに問い合わせているとのことなので、GoogleAPI の場合と基本的には変わらない。
Wifi アダプタを ON にしても、Geolocation API の精度が悪いなら、それは単に MS が収集しきれてないだけだと思う。

Android

面倒くさいのでコードは読んでいない。
手元の Xperia arc で確認したところ、設定から

  • 「現在地情報とセキュリティ/無線ネットワークを使用」が有効
  • Wifi を有効

にした状態で、マップで位置情報を測定したら、FirefoxChromeOpera で Geolocation API を使用した場合と同程度の精度で検出された。