在移动设备上,.getCurrentPosition()
非常不准确。使用.watchPosition()
更准确,但需要大约五秒钟才能获得最佳读数。之后,浪费电池保持活动状态。
这会使用.watchPosition()
每15秒检查一次位置,并在使用.clearWatch()
五秒钟后停止检查。
演示: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>
我会尝试感谢花花公子 – 2012-01-17 00:09:15
这个脚本是完全荒谬的。 watchPosition在脚本加载时被调用,15秒后第二次没有理由。当然,setTimeout不会每15秒调用一次setGeolocation,而且您不必。如果用户的位置实际发生变化,给watchPosition的第一个函数将得到回调。 5秒后调用clearWatch也毫无意义。 – user414873 2012-12-26 08:58:29
@ user414873'getPosition()'本身在移动设备上非常不准确。如果你每15秒调用一次,你得到的每一个结果都是不准确的。 'watchPosition()'可以在三次尝试(大约5秒)内更准确。之后,它只是在浪费电池。 'clearWatch()'把它关掉,直到你准备好再次追踪。这是在移动设备上进行跟踪的最佳方法。 – ThinkingStiff 2012-12-26 09:03:18