JavaScript 一度だけ位置情報を取得する
位置情報を一度だけ取得するには、Geolocation APIの「getCurrentPosition()」メソッドを使います。getCurrentPosition()メソッドの最初のパラメータには、位置情報の取得に成功した場合に呼び出される関数を指定します。2番目のパラメータには、位置情報が取得できなった場合、エラー時の処理を行う関数を指定します。2番目のパラメータは必須ではないため省略可能です。3番目のパラメータは位置情報の取得に関数オプションを設定します。指定できるオプションは次の表です。
オプション | 説明 |
---|---|
enableHighAccuracy | 「true」を指定すると、詳細な位置を返すようにする。ただし、スマートフォンではバッテリーの消耗が激しくなる |
timeout | タイムアウトまでの時間をミリ秒で指定する |
maximumAge | 取得した位置情報を何ミリ秒有効にするか指定する。「0」を指定すると、常に最新の位置情報になる。ただしスマートフォンではバッテリーの消耗が激しくなる。また、パソコンの場合は「0」を指定しても最新の情報が返されない場合がある |
位置情報を得るには、ユーザーの許可が必要になります。ユーザーの許可が得られない場合は、エラーになります。他にも、位置情報が取得できない、時間切れ(タイムアウト)の場合は、次の表に示すエラーが返されます。このエラーコードは、エラー発生時に呼び出される関数に渡されるオブジェクトの「code」プロパティに格納されています。また、エラーメッセージは「message」プロパティに格納されています。
エラーコード値 | キーワード値 | 説明 |
---|---|---|
1 | PERMISSION_DENIED | ユーザーが位置情報の提供を拒否した |
2 | POSITION_UNAVAILABLE | 何らかの原因で位置情報が取得できなかった |
3 | TIMEOUT | タイムアウトになった |
位置情報が取得できた場合に呼び出される関数には、オブジェクトが渡されます。このオブジェクト内にある「coords」オブジェクトに位置情報を示すプロパティがあります。位置情報を示すプロパティは、次の表のようになります。緯度と経度は、世界測地系WGS84に準拠しています。
プロパティ | 説明 |
---|---|
latitude | 緯度 |
longitude | 経度 |
altitude | 緯度と経度の誤差。単位はメートル |
accuracy | 高度。取得できない場合は「null」、もしくは、「undefined」 |
altitudeAccuracy | 高度の誤差。単位はメートル |
heading | 移動方向。移動していない場合は「null」、もしくは、「undefined」 |
speed | 移動速度。単位はm/sec |
<body>
<script>
window.addEventListener("load" , function(){
var ele = document.getElementsByTagName("output")[0];
//Geolocation APIが使えるか調べる
if(!navigator.geolocation){
ele.innerHTML = "Geolocation APIは使えません";
return;
}
//一度だけ位置情報を取得する
navigator.geolocation.getCurrentPosition(function(position){
//緯度を求める
var lat = position.coords.latitude;
//経度を求める
var lon = position.coords.longitude;
//緯度経度の誤差を求める
var acc = position.coords.accuracy;
//高度を求める
var alt = position.coords.altitude;
//高度の誤差を求める
var accAlt = position.coords.altitudeAccuracy;
ele.innerHTML = "緯度:"+lat+"<br>";
ele.innerHTML += "経度:"+lon+"<br>";
ele.innerHTML += "緯度経度の誤差:"+acc+"m<br>";
ele.innerHTML += "高度:"+alt+"<br>";
ele.innerHTML += "高度の誤差:"+accAlt+"<br>";
},function(err){
//エラーの場合、エラーコードを出力
ele.innerHTML = "エラー:"+err.code;
},{
//詳細な位置を返すように設定
enableHighAccuracy:true
});
}, false);
</script>
<output></output>
位置情報を取得してよいかの確認が行われます。ここで拒否すると位置情報は取得できません。
許可すると、取得した位置情報が表示されます。