Вычислить расстояние между двумя точками


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

2 2

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 стала вашим самым большим источником ошибок.