HTML と JavaScript と Android 4 で位置情報を取得した感想文
■環境
GALAXY S III SC-06D (Android 4.0.4)
■コードについて
Geolocation の利用 | MDN
Geolocation API-HTML5のAPI、および、関連仕様
などを参考に…
対応していないブラウザは
(※ブログの都合で全角スペース入れてます…)
1回だけ取得なら navigator.geolocation.getCurrentPosition
定期的に監視するなら navigator.geolocation.watchPosition
を使う。
どちらも成功時に呼ばれるコールバック関数に
位置情報のオブジェクトが渡される。
失敗時の方はエラーに関するオブジェクトが渡される。
位置情報の有効期限なし(都度取得)で取得できる。
■位置情報がキャッシュされる?
getCurrentPosition だと位置情報がキャッシュされてしまう、
という話を聞いて、書いて試したものの
第三引数に {maximumAge:0} を渡すようにしたからか、Android 4 だからなのか、
ちゃんと都度位置情報を取得しなおしているように見えた。
(数秒あけて、繰り返し実行した際に、位置がずれることがあった。)
Android 2.3 や iPhone ではキャッシュされてしまうものがあるのかないのか、
検証できていないのでわからない。
■GPS をオンにしても位置情報が取得できない
Galaxy S3 だけなのかそうでないのかわからないが
設定 → 位置情報サービス → GPS機能を使用 にチェックを入れても
エラーコード 2 (The last location provider was disabled) となって
位置情報が取得できなかった。
設定 → 位置情報サービス → 無線ネットワークを使用 にチェックを入れたところ
GPS機能を使用 のチェックの有無にかかわらず位置情報を取得することができた。
■取得した位置が明らかに遠いことがあった
関東某所の駅・電車内で実行したところ、大阪の位置情報が返されることがあった。
その際、同じような場所で3分ほどの間に11回実行し、5回が大阪の位置情報だった。
GPS による位置取得でなかったのが原因だと思う。
ただ、GPS を使用して位置情報を取得するかどうかは
端末側の設定次第で HTML や JS を書く側からは指定できないので
サービスに組み込む場合は、位置情報が違うかもしれませんよ、と
あらかじめユーザに伝える必要がありそう。
■感想
位置情報を単純に取得して、さらに Google Maps API で
地図上に表示するだけならとても簡単。お手軽。
ただ、位置情報の取得は一瞬では終わらないので
待ち時間をどうユーザに示すかは、工夫した方が親切かもしれない。
また、どのような設定をすれば位置情報の取得ができるのか、
どの程度の精度での取得になるかはわかりづらいと感じた。
GPS のオンオフは画面上部を"引っ張る"とボタンが出てくるが、
「無線ネットワークを使用」に相当するものは一度ホームに戻って
設定から選ばないといけなくてオンオフの切り替えが面倒だと感じた。
最後に、位置情報はある程度誤差が出ることを考えると
検証は移動しながら行うことになるので
検証しながらコードをいじるのが難しくてやりづらいと思った。
GALAXY S III SC-06D (Android 4.0.4)
■コードについて
Geolocation の利用 | MDN
Geolocation API-HTML5のAPI、および、関連仕様
などを参考に…
対応していないブラウザは
if (!navigator.geolocation) {みたいな感じで処理を分けておく。
alert ("geolocation services are not supported by your browser.");
return;
}
(※ブログの都合で全角スペース入れてます…)
1回だけ取得なら navigator.geolocation.getCurrentPosition
定期的に監視するなら navigator.geolocation.watchPosition
を使う。
どちらも成功時に呼ばれるコールバック関数に
位置情報のオブジェクトが渡される。
失敗時の方はエラーに関するオブジェクトが渡される。
navigator.geolocation.getCurrentPosition(こんな感じにしておくと、
function(position){
success(position);
},
function(error){
fail(error);
},
{maximumAge:0}
);
位置情報の有効期限なし(都度取得)で取得できる。
■位置情報がキャッシュされる?
getCurrentPosition だと位置情報がキャッシュされてしまう、
という話を聞いて、書いて試したものの
第三引数に {maximumAge:0} を渡すようにしたからか、Android 4 だからなのか、
ちゃんと都度位置情報を取得しなおしているように見えた。
(数秒あけて、繰り返し実行した際に、位置がずれることがあった。)
Android 2.3 や iPhone ではキャッシュされてしまうものがあるのかないのか、
検証できていないのでわからない。
■GPS をオンにしても位置情報が取得できない
Galaxy S3 だけなのかそうでないのかわからないが
設定 → 位置情報サービス → GPS機能を使用 にチェックを入れても
エラーコード 2 (The last location provider was disabled) となって
位置情報が取得できなかった。
設定 → 位置情報サービス → 無線ネットワークを使用 にチェックを入れたところ
GPS機能を使用 のチェックの有無にかかわらず位置情報を取得することができた。
■取得した位置が明らかに遠いことがあった
関東某所の駅・電車内で実行したところ、大阪の位置情報が返されることがあった。
その際、同じような場所で3分ほどの間に11回実行し、5回が大阪の位置情報だった。
GPS による位置取得でなかったのが原因だと思う。
ただ、GPS を使用して位置情報を取得するかどうかは
端末側の設定次第で HTML や JS を書く側からは指定できないので
サービスに組み込む場合は、位置情報が違うかもしれませんよ、と
あらかじめユーザに伝える必要がありそう。
■感想
位置情報を単純に取得して、さらに Google Maps API で
地図上に表示するだけならとても簡単。お手軽。
ただ、位置情報の取得は一瞬では終わらないので
待ち時間をどうユーザに示すかは、工夫した方が親切かもしれない。
また、どのような設定をすれば位置情報の取得ができるのか、
どの程度の精度での取得になるかはわかりづらいと感じた。
GPS のオンオフは画面上部を"引っ張る"とボタンが出てくるが、
「無線ネットワークを使用」に相当するものは一度ホームに戻って
設定から選ばないといけなくてオンオフの切り替えが面倒だと感じた。
最後に、位置情報はある程度誤差が出ることを考えると
検証は移動しながら行うことになるので
検証しながらコードをいじるのが難しくてやりづらいと思った。
■
[PR]
by tokage-shippo
| 2013-01-28 23:12
| プログラミング