Geolocation APIは、緯度経度などの現在位置(座標)を取得する仕組み(API)です。
なお、このAPIはW3C独自に策定したものです。
フィーチャーフォン、特にガラパゴス携帯と揶揄される日本の携帯電話の多くは、既にGeolocation APIと同等の機能を各キャリア、機種独自で実装してきました。
しかし、各キャリア毎、機種毎によってその取得方法や精度が異なります。
Geolocation APIは、位置情報取得のAPIを標準化しています。
かつ、Javascriptから扱うことができます。
(ガラパゴス携帯では、a要素でしか扱えなかったりするものもあります。)
これにより、PCでもスマートフォンでも共通して扱えるようになりました。
(ガラパゴス携帯は、別途の実装が必要です)
Geolocation APIは、GPS搭載でも、非GPS搭載(その場合はWi-Fiの基地局やIPなどから判定)の場合でも対応します。
例えば、iPhoneなどGPS搭載デバイスにおいても、GPSを搭載していないiPod touchでも、デスクトップPCでも、Geolocation APIで現在位置を取得出来ます。
但し、非GPS搭載デバイスに比べ、iPhoneなどのGPS搭載デバイスの方が精度は当然良くなります。
各ブラウザの対応
Geolocation APIは、2011年8月現在以下のブラウザで対応しています。
FireFox 3.5~、Safari 5~、Opera 10.6~、Google Chrome 5.6~、IE 9~
Geolocation APIは、navigatorオブジェクトのgeolocationオブジェクトにて利用します。
位置情報の取得
「getCurrentPosition」メソッドで、現在の位置情報を取得できます。
リスト1. 位置取得のコード
// 現在の位置情報を取得します。
window.navigator.geolocation.getCurrentPosition(
success_Callback, // 位置情報取得時のコールバック
error_Callback, // 取得失敗時のコールバック
options // 取得時オプション(オブジェクト)
);
// 位置情報取得時のコールバック
function success_Callback( event ){
/*
位置情報を取得できた時実行されます。
結果は変数eventに受け継がれます。
*/
}
// 取得失敗時のコールバック
function error_Callback( event ){
/*
位置情報の取得に失敗時に実行されます。
結果は変数eventに受け継がれます。
*/
}
位置情報を取得できると、「getCurrentPosition」メソッドの第1引数に定義されているコールバック関数が実行されます。
位置情報取得時のコールバック関数の第1引数の内容は以下の通りです。
- event.coords.latitude
-
座標(coords)オブジェクトの緯度(latitude)プロパティです。
単位は度(角度)です。
- event.coords.longitude
-
座標(coords)オブジェクトの経度(longitude)プロパティです。
単位は度(角度)です。
- event.coords.accuracy
-
座標(coords)オブジェクトの精度(accuracy)プロパティです。
緯度経度の精度のレベルを数値で示します。
単位はメートルです。
- event.coords.altitude
-
座標(coords)オブジェクトのGPS高度(altitude)プロパティです。
現在位置の高度を数値で示します。
単位はメートルです。
取得できない場合はnullとなります。
- event.coords.altitudeAccuracy
-
座標(coords)オブジェクトのGPS高度の精度プロパティです。
GPS高度のレベルを数値で示します。
単位はメートルです。
取得できない場合はnullとなります。
- event.coords.heading
-
座標(coords)オブジェクトの進行方向角度プロパティです。
進行方向0~360で示します。
単位は度(角度)です。
取得できない場合はnullとなります。
取得できるのは、移動中のみです。移動していない場合はNaNとなります。
- event.coords.speed
-
座標(coords)オブジェクトの速度プロパティです。
移動速度を数値で示します。
単位はメートル/秒です。
取得できない場合はnullとなります。
- event.timestamp
-
位置情報取得時のタイムスタンププロパティです。
Dateオブジェクトとなります。
取得失敗時のコールバック関数の第1引数の内容は以下の通りです。
- event.code
-
エラーコードプロパティです。
- 位置情報取得の許可が得られなかった(PERMISSON_DENIED)
- 位置情報取得に失敗した(POSITION_UNAVAILABLE)
- タイムアウト(TIMEOUT)
- event.message
-
エラーメッセージプロパティです。
「getCurrentPosition」メソッドの第3引数 取得時オプション は以下の内容を持つオブジェクトとなります。
- enableHighAccuracy
-
プラウザに対して高精度な位置情報を要求するオプションです。
デフォルトはfalseです。
trueにすると、位置情報取得の精度を上げます。
特にGPS搭載デバイスで顕著になります。
- timeout
-
位置情報取得を断念するタイムアウトまでの時間を設定するオプションです。
デフォルトは各ブラウザによります。
単位はミリ秒です。
0より大きい数値としてください。
0以下の数値の場合は、常にタイムアウト(エラー)になります。
- maximumAge
-
位置情報取得をキャッシュしておく時間を設定するオプションです。
デフォルトは各ブラウザによります。
単位はミリ秒です。
キャッシュしない場合は、0を指定してください。
位置情報の連続取得
「watchPosition」メソッドを使うことで、連続して位置情報を取得します。
「watchPosition」メソッドの各引数は、「getCurrentPosition」メソッドと同様です。
「watchPosition」メソッドは、監視識別IDを返します。
リスト2. 連続取得のコード
// 現在の位置情報を連続取得します。
wid = window.navigator.geolocation.watchPosition(
success_Callback, // 位置情報取得時のコールバック
error_Callback, // 取得失敗時のコールバック
options // 取得時オプション(オブジェクト)
);
連続取得の停止
「clearWatch」メソッドを使うことで、位置情報を連続取得を停止します。
第1引数は、「watchPosition」メソッドの監視識別IDとなります。
リスト3. 連続取得の停止コード
// 連続取得を停止する。
window.navigator.geolocation.clearWatch( wid );
以下は、Geolocation APIのコーディング及び実装例です。
リスト4. Geolocation APIの例
//現在位置を取得する
function myPosition(){
window.navigator.geolocation.getCurrentPosition(
success_Callback, // 位置情報取得時のコールバック
error_Callback, // 取得失敗時のコールバック
{
// 取得時オプション(オブジェクト)
enableHighAccuracy : true,
maximumAge : 0
}
);
}
// 位置情報取得時のコールバック
function success_Callback( event ){
var str = "";
str = "緯度(°) : " + event.coords.latitude + "\n"
+ "経度(°) : " + event.coords.longitude + "\n";
alert(str);
}
// 取得失敗時のコールバック
function error_Callback( event ){
alert( "エラーコード(" + event.code + "):" + event.message );
}
実装例
Geolocation APIは、PC、スマートフォン共通で利用できます。
html5対応のスマートフォンでは、このAPIを使って 行動系アプリを作成することができます。