Geolocation API

Geolocation API [W3C]
The Geolocation API provides access to geographical location information associated with the hosting device.

 Geolocation APIは、ユーザーの位置情報を扱うためのAPIです。Webの標準化団体である W3Cが仕様策定を進める規格であり、JavaScriptで位置情報を取得できるように標準化されています。

Geolocation APIが利用できるかどうかチェックする

 Geolocation APIは「navigator.geolocation」への呼び出しを介してアクセスします。これにより、ブラウザーはユーザーに自分の位置情報にアクセスする許可を要求します。ユーザーが許可すると、ブラウザは端末上で利用可能な最良の機能(無線LAN・WiFi・携帯電話基地局・GPS・IPアドレスなど)を使用してこの情報にアクセスします。

 ユーザー環境で Geolocation APIが利用できるかどうかは、この「navigator.geolocation」を参照することでチェックすることができます。Geolocation APIを利用できる環境と利用できない環境で処理を振り分けることも可能となります。

JavaScript source


if (navigator.geolocation) {
	// Geolocation APIを利用できる環境向けの処理
	console.log("Geolocation API is available.");
} else {
	// Geolocation APIを利用できない環境向けの処理
	console.log("Geolocation API is not available.");
};

位置情報の取得に関する3つのメソッド

 Geolocation APIでユーザーの位置情報の取得をする場合、現在のところ使用できるのは以下の3つのメソッドです。

getCurrentPosition()
ユーザーの現在の位置情報を一回だけ取得する。
watchPosition()
ユーザーの位置情報を定期的に監視する。
clearWatch()
watchPosition()による位置情報の監視をクリア(ストップ)する。

 getCurrentPosition()と watchPosition()は3つの引数を指定することができます。

  1. 位置情報の取得に成功した場合のコールバック関数(必須)
  2. 位置情報の取得ができなかった場合のコールバック関数
  3. 位置情報の取得の詳細を指定する追加オプション

 最初の引数は必須ですが、2番目と3番目の引数は省略することができます。

JavaScript source of getCurrentPosition()


navigator.geolocation.getCurrentPosition(
	successCallback,
	errorCallback,
	options
);

JavaScript source of watchPosition()


var watchId = navigator.geolocation.watchPosition(
	successCallback,
	errorCallback,
	options
);

JavaScript source of clearWatch()


navigator.geolocation.clearWatch(watchId);

位置情報の取得に成功した場合の処理

 getCurrentPosition()または、watchPosition()メソッドで位置情報を取得すると、コールバック関数に positionというオブジェクトが渡されます。 位置情報の取得に成功した場合のコールバック関数内では、positionオブジェクトの coords属性から緯度・経度・高度などの値を取得します。

 現在のところ、positionオブジェクトの coords属性から取得できるのは以下の位置情報です。

latitude
緯度(-180〜180 : 度)
longitude
経度(-90〜90 : 度)
accuracy
緯度・経度の誤差(m)
altitude
高度(m)
altitudeAccuracy
高度の誤差(m)
heading
方角(0〜360 : 度)
speed
速度(m/秒)
timestamp
タイムスタンプ

HTML source


<dl>
	<dt>緯度</dt>
	<dd id="resultLatitude">-</dd>

	<dt>経度</dt>
	<dd id="resultLongitude">-</dd>
</dl>

JavaScript source


// 現在位置情報を取得
navigator.geolocation.getCurrentPosition(
	successCallback,
	errorCallback,
	options
);

// 位置情報取得完了時の処理
function successCallback(position) {
	// 緯度
	const glLatitude = position.coords.latitude;
	document.getElementById("resultLatitude").innerHTML = glLatitude;
	// 経度
	const glLongitude = position.coords.longitude;
	document.getElementById("resultLongitude").innerHTML = glLongitude;
};

>>詳しくは、クイック・スタート

位置情報の取得ができなかった場合の処理

 Geolocation APIでユーザーの位置情報をリクエストしても、ユーザー側の許可設定・接続環境・電波状況などによって位置情報が取得できない場合があります。このような場合に備えて、あらかじめエラー時の処理を設定しておくことができます。

 位置情報の取得時のエラーコードは、code属性で取得することができます。code属性では1, 2, 3のいずれかの数値が返ります。それぞれの意味は以下の通りです。

1 : PERMISSION_DENIED
位置情報の利用が許可されていない(ユーザーが位置情報の利用を許可しなかった場合など)
2 : POSITION_UNAVAILABLE
デバイスの位置が判定できない(プロバイダが内部エラーとなっている場合など)
3 : TIMEOUT
タイムアウト(timeout属性で指定された時間内に Positionオブジェクトを取得できなかった場合など)

 エラー内容の詳細は、message属性で取得することができます。もし、不明なエラーが発生した場合には、 message属性でエラーメッセージを取得することでその詳細が分かるかもしれません。 ただし、message属性は主にデバッグ用であり、 アプリケーションのユーザーインターフェイスには直接使用するべきではないとされています。

JavaScript source of getCurrentPosition()


navigator.geolocation.getCurrentPosition(
	successCallback,
	errorCallback,
	options
);

// 位置情報取得完了時の処理
function successCallback(position) {...};

// 位置情報取得失敗時の処理
function errorCallback(position) {
	alert(position.message + "(" + position.code + ")");
};

>>詳しくは、現在位置を取得する

位置情報の取得の詳細を指定する追加オプション

 3番目の引数は省略も可能ですが、指定すればより詳細に位置情報を制御することができます。指定可能な追加オプションは、現在のところ以下の3つです。

enableHighAccuracy
より精度の高い位置情報を取得する(true, false)
timeout
タイムアウトまでの時間(単位:ミリ秒)
maximumAge
位置情報の有効期限(単位:ミリ秒)

JavaScript source


navigator.geolocation.getCurrentPosition(
	successCallback,
	errorCallback,
	{
		enableHighAccuracy: true,
		timeout: 60000,
		maximumAge: 0
	};
);

>>詳しくは、現在位置を取得する

【Next】クイック・スタート