モバイルデバイスでは、.getCurrentPosition()
は非常に不正確です。 .watchPosition()
を使用する方がより正確ですが、最高の読みを得るには約5秒かかります。その後、バッテリーを無駄にしてアクティブに保ちます。
これは、.watchPosition()
を使用して15秒ごとに位置を確認し、.clearWatch()
を使用して5秒後に確認を停止します。
デモ:https://jsfiddle.net/ThinkingStiff/phabq6r3/
スクリプト:
var latitude, longitude, accuracy;
function setGeolocation() {
var geolocation = window.navigator.geolocation.watchPosition(
function (position) {
latitude = position.coords.latitude;
longitude = position.coords.longitude;
accuracy = position.coords.accuracy;
document.getElementById('result').innerHTML +=
'lat: ' + latitude + ', '
+ 'lng: ' + longitude + ', '
+ 'accuracy: ' + accuracy + '<br />';
},
function() { /*error*/ }, {
maximumAge: 250,
enableHighAccuracy: true
}
);
window.setTimeout(function() {
window.navigator.geolocation.clearWatch(geolocation)
},
5000 //stop checking after 5 seconds
);
};
setGeolocation();
window.setInterval(function() {
setGeolocation();
},
15000 //check every 15 seconds
);
HTML:
<div id="result"></div>
私はそれに感謝の男 –
をしようとします。このスクリプトは完全に不合理です。スクリプトがロードされるとwatchPositionが呼び出され、何もない理由で15秒後に2回目が呼び出されます。もちろん、setTimeoutは15秒ごとにsetGeolocationを呼び出すのではなく、そうする必要はありません。 watchPositionに与えられた最初の関数は、ユーザーの位置が実際に変更された場合にコールバックを取得します。 5秒後にclearWatchを呼び出すのも無意味です。 – user414873
@ user414873 'getPosition()'自体は、モバイルデバイス上で非常に不正確です。 15秒ごとに呼び出すと、結果は不正確になります。 'watchPosition()'は約3回の試行(約5秒)まで正確になります。その後、バッテリーを無駄にするだけです。 'clearWatch()'はあなたが再び追跡する準備が整うまでオフにします。これは、モバイルデバイスでのトラッキングに最適な方法です。 – ThinkingStiff