2011-06-15 23 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