2011-06-15 56 views
0

我正在使用HTML5地理定位API。我最近决定使用watchPosition方法从轮询用户位置切换到 ,一旦设备位置改变,该方法应该触发其“成功”功能。html5-geolocation:navigator.geolocation.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来加载这个页面。如果设备位置发生变化,我如何才能使其调用成功功能?

回答

1

也许它只是由一些错误引起的,所以即使当位置没有变化(或变化很小),您的回调仍然被触发。

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

如果您需要节省电话的电池使用时间,那么您需要优化选项,例如,将enableHighAccuracy更改为false

+0

这是一个错误......现在已经得到解决。不管怎么说,还是要谢谢你! – 2011-06-16 11:55:14

+0

@ anirudh4444 - 我不认为这是一个* bug *,我认为当有关位置变化的任何数据,即经纬度/精度/海拔高度等等时,触发回调。 – James 2011-12-27 14:52:39

+0

某些浏览器有问题,其他。检查iOS和Android 2.3。 – 2011-12-28 20:26:16

0

更有效的办法是设置watchPosition作为变量,并呼吁它clearWatch()一旦你收到的第一个响应:

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

当时,我不想停止接收更新。一旦调用了clearWatch(),当位置改变时我不会得到更新,并且不得不使用'setTimeOut()'轮询。 – 2013-01-25 13:26:13