2012-03-04 60 views
0

我目前正在生產一個移動web應用程序,使用戶可以隨應用程序一起行走,並且它將測量覆蓋的距離(僅限於直線)。顯然,使用Haversine很好,並且計算按預期工作。不過,我已經注意到在iOS 5(iPhone 3GS,未經測試的4和4G)上進行測試時出現了一些小問題。navigator.geolocation報告錯誤的第一個值

下面是我使用的看着自己的位置上的JavaScript:

var points = [ ]; // This will be an array holding all of the points we have recorded. 

// Start watching the position: 
navigator.geolocation.watchPosition(function(location) { 
    var this_coords = { lat: location.coords.latitude, lng : location.coords.longitude }; 
    points.push(this_coords); 
}, function() { }, true); 

// When we're done, I output them to the console: 
var start = points[0], 
end = points[points.length - 1]; 
console.log('Start: ' + start.lat + ', ' + start.lng); 
console.log('End: ' + end.lat + ', ' + end.lng); 

從本質上講,所有的點都記錄到一個數組,然後第一個和最後一個經/緯對用於半正矢。但是,輸入到數組中的初始值似乎總是不正確的(距離很遠)。最終值總是正確的(在〜5m內)。

有誰知道爲什麼第一次閱讀可能會如此不準確,或者我怎樣才能避免這種情況?我想也許只是忽略了第一個問題,然後進行了二讀,但這顯然不是很科學。

回答

2

第一個位置是最快的迴應,然後它試圖進一步縮小它。因爲它試圖通過電話連接,WiFi和GPS連接,他們都在不同的時間。

您可以使用position.coords.accuracy首先縮小範圍,然後再執行。

例如

if (position.coords.accuracy < 100){ 
      // if accuracy is less than 100m do something 

    }