Рассчитать расстояние между двумя точками - PullRequest
2 голосов
/ 26 января 2012

Я делаю приложение для отслеживания пользователей, когда они бегают, ездят на велосипеде или гуляют, и отображают его на экране. Я знаю, что есть функция distanceBetween, встроенная в Android, но достаточно ли это точно для приложения пригодности? Я рассматривал вопрос об использовании формулы Хаверсайна или другой такой формулы для расчета расстояний между точками. Единственная проблема, которую я вижу в этих формулах, состоит в том, что обычно это прямая линия или когда ворон летит расстояния. У кого-нибудь есть идеи по этому поводу?

Ответы [ 2 ]

1 голос
/ 26 января 2012

Формула Хаверсайна точна для большинства расстояний, но она страдает от ошибок округления, когда точки (почти) противоположны. Следующая формула является точной для всех расстояний.

> 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 голос
/ 26 января 2012

Отслеживание их маршрута во время ходьбы будет включать в себя ряд точек пути. Если вы производите выборку, скажем, в 1 промежуточную точку каждые 10 секунд, то вы можете рассчитать расстояние между предыдущей и новой точками, используя метод «мухи-мухи», например, «haversine», или просто сделать несколько запросов веб-сервиса к внешнему сервису, такому как карты Google и их расстояние матрица, которая может дать вам расстояние между двумя точками, используя предложенный лучший путь.

http://code.google.com/apis/maps/documentation/distancematrix/

Вам просто нужно убедиться, что ваша частота дискретизации не слишком высока, или вы можете перейти через ограничение 2500 вызовов API / 24-часовой период (по каждому IP, я полагаю). Но 2500 даст вам 7 часов при 1 пробе за 10 секунд, или вы можете попробовать более низкую скорость, например, 1 за 35 секунд, и рискуете ошибиться в маршруте, но гарантируйте, что ваше устройство не пропустит 2500 проб.

Лично, если опрос местоположения свободен, я бы просто пошел с distanceBetween и проводил опрос каждые 1-2 секунды. Это должно быть достаточно коротким, чтобы точность GPS стала вашим основным источником ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...