- getCurrentPosition:一度だけ位置情報を取得
- watchPosition:連続的に位置情報を取得
→ 参考:Geolocation の利用 - MDN
現在位置を特定したいのであれば get〜 を使えば良さそうなのだけれど、一発だけの測定だと非常に精度が悪い。精度を高めるには、
- getCurrentPositionを何回か呼んで、最後の測定結果を取り出す
- watchPositionを一定時間走らせる
という解決方法が考えられます。たぶん後者のほうが簡単に書けそうなので、こちらを採用。例えばこんな感じ。測定開始から5秒後に終了して、得られた緯度・経度を表示します。
<script type="text/javascript">
var watchID;
var lat;
var lng;
var geoOptions = {
maximumAge : 0 ,
timeout : 2000 ,
enableHighAccuracy : true
};
var WAIT = 5000;
watchID = navigator.geolocation.watchPosition( onSuccess , onErr , geoOptions );
setTimeout( function(){ navigator.geolocation.clearWatch( watchID );
alert( '緯度:' + lat + ' / 経度:' + lng );} ,
WAIT );
function onSuccess( pos ){
lat = pos.coords.latitude ;
lng = pos.coords.longitude ;
}
function onErr( err ){
// エラー処理
}
</script>
var watchID;
var lat;
var lng;
var geoOptions = {
maximumAge : 0 ,
timeout : 2000 ,
enableHighAccuracy : true
};
var WAIT = 5000;
watchID = navigator.geolocation.watchPosition( onSuccess , onErr , geoOptions );
setTimeout( function(){ navigator.geolocation.clearWatch( watchID );
alert( '緯度:' + lat + ' / 経度:' + lng );} ,
WAIT );
function onSuccess( pos ){
lat = pos.coords.latitude ;
lng = pos.coords.longitude ;
}
function onErr( err ){
// エラー処理
}
</script>
手許の iPhone で試してみると、数秒間の測定で割と充分な精度が得られました。
エラーコードのメモ。上の例だと、エラーコールバック関数内 err.code で参照できます。
- 0:不明のエラー (UNKNOWN_ERROR)
- 1:位置情報の利用が許可されていない。(PERMISSION_DENIED)そのアプリケーションで位置情報が利用できない設定になっている。
- 2:現在位置が特定できない。(POSITION_UNAVAILABLE)iPhoneならば、例えば「機内モード」がONになっているときなど。
- 3:測定のタイムアウト。(TIMEOUT)watchPosition()の第三引数の timeout の値によってタイムアウトまでの時間を制御できる。
コメント