JavaScriptでGeolocation APIを使って位置情報を取得する
利用可能か
Geolocation APIが利用可能であるかチェックするにはnavigator.geolocation
が存在するかチェックします。
if (navigator.geolocation) {
}
else {
}
Geolocation APIが利用可能である場合にはnavigator.geolocation
が存在し、利用不可能である場合には存在しません。
なお、Geolocation APIが利用可能である場合、navigator.geolocation
にはGeolocation APIの機能を利用するための関数を提供しているオブジェクトが格納されています。
すなわち、このオブジェクトの関数を使用して現在位置の取得を行います。
現在位置の取得
クライアントの現在位置を取得するにはnavigator.geolocation.getCurrentPosition
関数を使用します。
navigator.geolocation.getCurrentPosition(function (position) {
}, function (err) {
}, {
enableHighAccuracy: true,
timeout: 1000,
maximumAge: 1000
});
第1引数に現在位置の取得が成功した場合に呼び出される関数を指定します。この関数の第1引数は現在位置を表すオブジェクトです。
このオブジェクトは下のようなプロパティを有します。
coords.latitude
・・・度単位の緯度です。coords.longitude
・・・度単位の経度です。coords.altitude
・・・メートル単位の高度です。coords.accuracy
・・・緯度と経度のメートル単位の精度です。coords.altitudeAccuracy
・・・高度のメートル単位の精度です。coords.heading
・・・度単位の方角です。0
が北を表し、時計回りで度数が大きくなります。coords.speed
・・・速度です。timestamp
・・・日時です。
第2引数に現在位置の取得が失敗した場合に呼び出される関数を指定します。この引数は指定しなくても構いません。この関数の第1引数はエラーオブジェクトです。このエラーオブジェクトはエラーの種類を表すcode
プロパティとエラーメッセージを表すmessage
プロパティを有します。code
プロパティの値は下のようになります。
0
・・・不明なエラーです。1
・・・ユーザが取得を許可しませんでした。2
・・・取得に失敗しました。3
・・・取得がタイムアウトしました。
第3引数にオプションをオブジェクトとして指定します。この引数は指定しなくても構いません。
主なオプションには下のようなものがあります。
enableHighAccuracy
・・・精度の高いデータを取得する場合にはtrue
を指定します。timeout
・・・現在位置の取得がタイムアウトする時間をミリ秒単位で指定します。maximumAge
・・・データをキャッシュする時間をミリ秒単位で指定します。
現在位置の追跡
クライアントの現在位置を追跡するにはnavigator.geolocation.watchPosition
関数を使用します。
var wp = navigator.geolocation.watchPosition(function (position) {
}, function (err) {
}, {
enableHighAccuracy: true,
timeout: 1000,
maximumAge: 1000
});
第1引数の関数が繰り返し呼び出されるという点以外はnavigator.geolocation.getCurrentPosition
関数と同じです。
ただし、返り値として現在位置を追跡する処理を表すオブジェクトが得られます。
現在位置の追跡の終了
クライアントの現在位置の追跡を終了するにはnavigator.geolocation.clearWatch
関数を使用します。
navigator.geolocation.clearWatch(wp);
第1引数にnavigator.geolocation.watchPosition
関数の返り値として得られる現在位置を追跡する処理を表すオブジェクトを指定します。
