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秒経過したら取得を停止して、その旨のメッセージが表示されます。

実行結果