Android: distanceTo() неверные значения
Я пишу заявку для отслеживания моего маршрута. Я запрашиваю обновления от GPS каждую минуту, и он работает нормально. Это показывает мне мою точную точку зрения. Когда я хочу вычислить расстояние между текущей точкой и предыдущей, она работает нормально, но время от времени она вычисляет общее расстояние неверно (я переместился примерно на 200 м, и он вернул мне значение более 10 км). Кто-нибудь знает, почему это могло произойти?
Вот функция, которую я использую:
iRoute += myGPSLocation.distanceTo(prevLocation);
Заранее спасибо!
2 ответа
Прекратите использование функций Google Location.distancebetween & location.distanceto. Они не работают последовательно.
Вместо этого используйте прямую формулу для расчета расстояния:
double distance_between(Location l1, Location l2)
{
//float results[] = new float[1];
/* Doesn't work. returns inconsistent results
Location.distanceBetween(
l1.getLatitude(),
l1.getLongitude(),
l2.getLatitude(),
l2.getLongitude(),
results);
*/
double lat1=l1.getLatitude();
double lon1=l1.getLongitude();
double lat2=l2.getLatitude();
double lon2=l2.getLongitude();
double R = 6371; // km
double dLat = (lat2-lat1)*Math.PI/180;
double dLon = (lon2-lon1)*Math.PI/180;
lat1 = lat1*Math.PI/180;
lat2 = lat2*Math.PI/180;
double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
double d = R * c * 1000;
log_write("dist betn "+
d + " " +
l1.getLatitude()+ " " +
l1.getLongitude() + " " +
l2.getLatitude() + " " +
l2.getLongitude()
);
return d;
}
distanceTo() работает правильно.
Ошибка на вашей стороне, наиболее вероятная алгоритмическая, например, если нет доступного GPS-решения, и телефон занимает местоположение на основе соты GSM, это, конечно, может быть отключено на 1000 м.
Для вашего приложения, которое, вероятно, хочет подвести итог пройденного расстояния, используйте только GPS-исправления, не используйте другого LocationProvider, чем GPS!