navigator.geolocation сообщает ложное первое значение - PullRequest
0 голосов
/ 04 марта 2012

В настоящее время я создаю мобильное веб-приложение, которое позволяет пользователю ходить с приложением, и оно будет измерять пройденное расстояние (только по прямой линии).Очевидно, что использование Haversine - это нормально, и вычисления работают как положено.Однако я заметил небольшую ошибку при тестировании на iOS 5 (iPhone 3GS, не тестировался на 4 и 4G).

Вот код 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);

По сути, все точки записываются в массив, а затем первая и последняя пары широта / длинная используются для Haversine.Однако начальное значение, введенное в массив, всегда кажется неправильным (на значительном расстоянии).Окончательное значение всегда верно (в пределах ~ 5 м).

Кто-нибудь знает, почему первое чтение может быть настолько неточным, или как я могу обойти это?Я подумал о том, чтобы, возможно, просто проигнорировать первое и взять второе чтение, но это, очевидно, не очень научно.

1 Ответ

2 голосов
/ 17 марта 2012

Первое местоположение является самым быстрым, чтобы ответить, затем оно пытается сузить его дальше. Поскольку он пытается подключиться через телефонное соединение, Wi-Fi и GPS все они приходят в разное время.

Вы можете использовать position.coords.accuracy, чтобы сузить его перед выполнением.

, например

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

    }
...