Geolocation API
Geolocation APIはWebブラウザの位置情報を扱うAPIになります。主にスマートフォン、タブレット向けの機能になりますが最近ではIPアドレスからだいたいの国や地域を出せるようになっているため、デスクトップでも使われるようになっています。
Geolocation APIの利用可否
まずGeolocation APIが使えるブラウザなのかどうか判別する必要があります。
// Geolocation APIが利用可能
} else {
// Geolocation APIが利用不可能
}
ユーザの許可を得る
次に位置情報取得についてユーザの許可を得る必要があります。スマートフォンの場合はアラートで、デスクトップブラウザの場合はウィンドウ上部にバーで許諾確認が表示されます。
function (loc) {
console.log(loc.coords.latitude); // 緯度
console.log(loc.coords.longitude); // 軽度
},
function (error) {
switch (error.code) {
case error.POSITION_UNAVAILABLE:
// 位置情報の取得に失敗した場合
case error.PERMISSION_DENIED:
// 使用が許可されなかった場合
case error.PERMISSION_DENIED_TIMEOUT:
// 取得がタイムアウトした場合
}
}
);
navigator.geolocation.getCurrentPosition を呼び出した結果、前の関数であれば取得成功、2番目の関数が呼ばれた場合は何らかのエラーが起きたケースになります。
loc.coords オブジェクト
getCurrentPosition で成功した時の返り値、Geoposition.Coordinates(loc.coords)は次のような値を持っています。
- accuracy: 誤差
- altitude: 高度
- altitudeAccuracy: 高度誤差
- heading: 方角
- latitude: 緯度
- longitude: 軽度
- speed: 速度
デスクトップブラウザなど方角が取得できない場合はnullが入ります(高度もnullになるようです)。
Geolocationのメソッド
navigator.geolocationは以下の3つのメソッドを持っています。
- getCurrentPosition: 現在位置の取得
- watchPosition: 位置情報の監視
- clearWatch: 監視の停止
位置情報を定期的に記録する場合はwatchPositionを使います。
位置情報取得時のオプション
getCurrentPosition/watchPositionを使う際のオプションは以下が指定できます。
- enableHighAccuracy: 位置情報の精度をなるべく高いものにするかどうか
- timeout: 位置情報取得のタイムアウト時間をミリ秒で指定
- maximumAge: 取得した位置情報のキャッシュ時間をミリ秒で指定
位置情報のずれ
デスクトップブラウザの場合、GPSが内蔵されていないケースもありかなりずれるケースがあります。Geolocation APIはGPS以外でもWifi、IPアドレスなども使って位置情報を取得しますので精度はそれぞれの技術で異なります。スマートフォンの場合でも精度はそれぞれ異なりますので注意が必要です。
使いどころ
地図を扱う場合のユーザの現在地に基づいた情報の提供、メモを行う際に位置情報と結びつけることもできます。ユーザの入力手間を減らしたり、補助的に使うと良さそうです。プライバシー性の高いデータになりますので、無闇に取得するのは控えるべきでしょう。