JavaScriptを利用した位置情報の取得方法を解説します。
Geolocation APIを利用する
Geolocation APIとは,JavaScriptで位置情報を取得するAPIのことで,現在W3Cで仕様を策定中ではありますが,FirefoxやGoogle Chrome,Safari,IE9など,いくつかのモダンなブラウザではすでに利用できます。
ただし,プラグインや設定などによって利用できるかどうかは変わってくるため,コードの中で利用可否の判定を行う場合は,ブラウザ名とバージョンで判定するのではなく,geolocationオブジェクトが利用可能かどうかで判定するのが一般的です。
位置情報を取り扱うgeolocationオブジェクトは,window.navigatorから取得することができます。window.navigator.geolocationについて,仕様では現在のところ以下の3つのメソッドが提供されています。
- navigator.geolocation.getCurrentPosition( successCallback , errorCallback , option)
- 現在の位置を取得する
- navigator.geolocation.watchPosition( successCallback , errorCallback , option)
- 位置を定期的に取得する
- navigator.geolocation.clearWatch( watchId)
- watchPositionの定期的な位置情報取得を止める
getCurrentPositionとwatchPositionの第一引数には,位置情報取得が成功したときのコールバック関数を指定します。コールバック関数は,以下のpositionオブジェクトを受け取ります。
position.coords |
緯度経度などを保持するCordinatesオブジェクト。 |
position.timestamp |
位置情報を取得した時刻。 |
緯度経度を保持するCordinatesオブジェクトは,以下のプロパティを保持しています。緯度経度に加えて,高度や方位,速度が定義されていますが,デバイスが対応していない場合は取得することはできません。
coords.latitude |
緯度 |
coords.longitude |
経度 |
coords.altitude |
高度 |
coords.accuracy |
正確性(値が小さいほど正確) |
coords.altitudeAccuracy |
高度の正確性 |
coords.heading |
方位 |
coords.speed |
速度 |
getCurrentPositionとwatchPositionの第二引数には,位置情報取得が失敗したときのコールバック関数を指定します。コールバック関数は,以下のerrorオブジェクトを受け取ります。
error.code |
エラーコード
1.位置情報の取得が許可されていない
2.位置情報の取得が利用できない
3.タイムアウト |
error.message |
エラーメッセージ |
getCurrentPositionとwatchPositionの第三引数には,関数実行時のオプションを指定します。
option.enableHighAccuracy |
より高い正確性を求める(ただし,取得時間が長くなる)
スマートフォンでこのオプションを指定するとGPSを利用する |
option.timeout |
処理のタイムアウト |
option.maximumAge |
キャッシュされている位置情報オブジェクトを許容するキャシュ時間 |
watchPositionはlong値のidを返します。clearWatch 関数にこのidを渡すと,位置情報の監視を停止します。