民芸的プログラミング 〜ソフトウェア開発日記〜

アクセスカウンタ

zoom RSS スマホのジオロケーションAPIの話

<<   作成日時 : 2014/10/24 17:50   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

スマホのジオロケーション機能、もっと平たく言えばGPSの機能を利用したソフトを開発しようとしています。

その位置情報の精度でちょっと困ったことが起こったので、ここにメモ書きしておきます。

普通にWEB上に転がっている情報だけを参考にすると、スマホで現在位置を取得するには
navigator.geolocation.getCurrentPosition
というAPIを使用することになります。

MDNの参考資料:
https://developer.mozilla.org/ja/docs/Web/API/Geolocation.getCurrentPosition

これを信じて、このページにあるようなサンプルを元にしてプログラミングしたところ、少なくとも手元のNexus5ではとんでもない結果になりました。
そのとんでもない結果とは...

場所によるのですが、現在位置が正確に把握できないのです。
私が試した場所は公園の中でした。
スマホのジオロケーション機能が指す位置と、現実の位置とに、目視で50mくらいの誤差があるのです。
それも恐ろしいことに、ジオロケーションAPIで、誤差を示すaccuracyという情報は10m前後となっています。

Nexus5は自信満々に間違った場所を示しているのです。
どう見ても50m以上ずれているのに、スマホは誤差が10mと言っているのですから、これは間違っていると表現しても許されますよね。

比較的住宅が密集している自宅では数mくらいの誤差だったので、これはいけると思ってせっせとコードを書いた結果がこれです。

実際にスマホを持って家の周りを数百m単位で歩き回って調べたところ、いろいろと厄介な問題が見えてきました。

とても率直に評価して、navigator.geolocation.getCurrentPosition というAPIはどうも単独では使い物にならないようです。
Google Map など、他のアプリと併用して、ジオロケーション機能をある程度調整したうえで、navigator.geolocation.getCurrentPosition を呼び出すと比較的いい成績が出ます。
けれども、単発でnavigator.geolocation.getCurrentPositionを呼び出すと、たとえ自分が立ち止まっていたとしても、だめなときは全然だめです。
やはり50mくらいはずれてしまいます。

繰り返しnavigator.geolocation.getCurrentPositionを呼び出しても、キャッシュか何かが残っているのか、実用的な時間内にまともな位置情報は返ってきませんでした。

10mくらいの誤差しか許されないような状況では、navigator.geolocation.getCurrentPosition を単発で使用するだけでは、十分な精度を得ることができないようです。

結論としては、要は上記のGoogle Mapのような役割をする、位置情報を調整する機能を自作アプリに組み込むしかない、ということになります。

コードを書くのが面倒くさいと言ったらプログラミングの神様に怒られてしまいますが、メンテの手間が増えてしまうのはよくないことです。
さらにバッテリーを食うことにもなりますので、あまりいい手とはいえません。

まあ、精度と引き替え、としか言いようがないのですが。

以上、本日のぐだぐだメモでした。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
スマホのジオロケーションAPIの話 民芸的プログラミング 〜ソフトウェア開発日記〜/BIGLOBEウェブリブログ
文字サイズ:       閉じる