JavaScript 定期的に位置情報を取得・停止する
定期的に位置情報を取得するには、「watchPosition()」メソッドを使います。位置情報を取得するメソッドとしてはgetCurrentPosition()メソッドがありますが、状況によっては位置情報が取得できない場合があります(地下やトンネルなど)。このような場合は、watchPosition()メソッドの方が向いてます。ただし、watchPosition()メソッドは定期的に位置情報を取得するため、スマートフォンではバッテリーの消耗が激しくなります。そこで、一度期間だけ位置情報を取得、もしくは期待する精度の位置情報が取得できたら、監視を停止をする方法があります。watchPosition()メソッドの動作停止するには、clearWatch()メソッドを使います。パラメータには、watchPosition()メソッドが返すタイマーIDを指定します。
<body>
<script>
window.addEventListener("load" , function(){
var ele = document.getElementsByTagName("output")[0];
//Geolocation APIが使えるか調べる
if(!navigator.geolocation){
ele.innerHTML = "Geolocation APIは使えません";
return;
}
//定期的に位置情報を取得する
var watchID = navigator.geolocation.watchPosition(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
});
//10秒経過したら取得を停止
setTimeout(function(){
navigator.geolocation.clearWatch(watchID);
ele.innerHTML += "位置情報の取得を停止";
}, 1000*10);
}, false);
</script>
<output></output>
</body>
位置情報が表示されます。なお、この前に位置情報の取得を行ってよいかどうかの確認メッセージが表示されることがあります。
10秒間だけ位置情報を取得し、10秒経過したら取得を停止して、その旨のメッセージが表示されます。