Вычислить расстояние между двумя точками
Я создаю приложение для отслеживания пользователя во время его бега, езды на велосипеде или ходьбы и отображения его на экране. Я знаю, что есть функция distanceBetween, встроенная в android, но достаточно ли это точно для приложения fittness? Я рассматривал возможность использования формулы Хаверсина или другой подобной формулы для вычисления расстояний между точками единственная проблема, которую я вижу в этих формулах, заключается в том, что обычно это прямая линия или как ворона пролетает расстояния. У кого-нибудь есть идея на этот счет?
2 ответа:
Формула Хаверсина точна для большинства расстояний, но она страдает от ошибок округления, когда точки (почти) антиподальны. Следующая формула точна для всех расстояний.
> double delta = G1 - G2; > double p1 = cos(L2) * sin(delta); > double p2 = cos(L1) * sin(L2) - sin(L1) * cos(L2) * cos(delta); > double p3 = sin(L1) * sin(L2) + cos(L1) * cos(L2) * cos(delta); > distance = 60 * Math.atan2(Math.sqrt(p1*p1 + p2*p2), p3);
Ресурс: Здесь
Отслеживание их маршрута, когда они идут, будет включать в себя ряд точек пути. Если вы делаете выборку, скажем, в 1 точке пути каждые 10 секунд, то вы можете рассчитать расстояние между предыдущей точкой и новой точкой, используя либо метод ворон-мух, такой как haversine, либо просто сделать несколько запросов веб-служб к внешнему сервису, такому как google maps, и их матрицу расстояний, которая может дать вам расстояние между двумя точками, используя предложенный наилучший путь.
Http://code.google.com/apis/maps/documentation/distancematrix/
Вам просто нужно убедиться, что ваша частота дискретизации не слишком высока, или вы можете перейти через 2500 вызовов API/24-часовой ограничитель частоты (что соответствует IP, я полагаю). Но 2500 даст вам 7 часов при 1 образце за 10 секунд, или вы можете попробовать более низкую скорость, например 1 за 35 секунд, и рискуете, что маршрут будет угадан неправильно, но гарантируете, что ваше устройство не будет проходить более 2500 образцов.
Лично, если опрос местоположения бесплатный, я бы просто пошел с расстоянием между ними и опросом каждые 1-2 секунды. Это должно быть достаточно коротким, чтобы точность GPS стала вашим самым большим источником ошибок.