html5-geolocation:navigator.geolocation.watchPosition连续回调

时间:2011-06-15 20:59:02

标签: html geolocation latitude-longitude

我正在使用HTML5地理定位API。我最近决定从轮询用户位置转移到 使用watchPosition方法,一旦设备位置发生变化,它就会激活其“成功”功能。

但相反,它一遍又一遍地填充我的数据库。相关代码发布如下:

updateLocation = navigator.geolocation.watchPosition(success, failed, {enableHighAccuracy:true, maximumAge:30000, timeout:27000});

function success(){
showGPS(position);
}

function showGPS(position) {
    var lng = position.coords.longitude;
    var lat = position.coords.latitude;
    gpsText.innerText = "Latitude: "+ lat +"\nLongitude: "+ lng + "\nAccuracy: "+    position.coords.accuracy + "\nSpeed:" + (position.coords.speed*3.6) + "\nAltitude:" + position.coords.altitude;
    getData("http://databaseEntryURL/gpsReceiver.aspx?string=" + gpsText.innerText);
}

getData每秒调用约5次。我确信latlng没有变化。我正在使用android 2.2来加载这个页面。如果设备位置发生变化,我如何才能调用成功功能?

2 个答案:

答案 0 :(得分:1)

也许它只是由一些错误造成的,所以即使位置没有变化(或者变化太小),你的回调仍然会被触发。

解决这个问题的一种方法是存储最后一个位置并使用它来与当前位置进行比较。如果没有变化(或者变化太小),则在回调中不执行任何操作。这将节省带宽和数据库空间。

如果您需要为手机节省电池电量,则需要优化选项,例如,将enableHighAccuracy更改为false

答案 1 :(得分:0)

更有效的方法是将watchPosition设置为变量,并在收到第一个回复后调用clearWatch()

var watchID = navigator.geolocation.watchPosition(onSuccess, onFailed);
function onSuccess(position) {
    navigator.geolocation.clearWatch(watchID);
};