В настоящее время я создаю мобильное веб-приложение, которое позволяет пользователю ходить с приложением, и оно будет измерять пройденное расстояние (только по прямой линии).Очевидно, что использование 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 м).
Кто-нибудь знает, почему первое чтение может быть настолько неточным, или как я могу обойти это?Я подумал о том, чтобы, возможно, просто проигнорировать первое и взять второе чтение, но это, очевидно, не очень научно.