Является ли Формула Хаверсайна или Формула Винсенти лучше для расчета расстояния?

Что лучше для расчета расстояния между двумя точками широты / долготы, формулой Хаверсин или формулой Винсенти? Зачем?

Расстояние явно рассчитывается на Земле. Влияет ли координаты WGS84 и GCJ02 на расчет или расстояние (формула Винсенти учитывает ось WGS84)?

Например, в Android формула Haversine используется в Google Map Utils, а формула Винсенти используется android.Location объект (Location.distanceBetween()).

2 ответа

Решение

Haversine - это более простое вычисление, но оно не обеспечивает высокую точность, которую предлагает Vincenty.

Vincenty более точен, но также требует больших вычислительных ресурсов и, следовательно, работает медленнее и увеличивает расход заряда батареи.

Как и во всем "лучше", это вопрос вашего конкретного приложения. Для вашего приложения Vincenty может быть "лучшим" выбором, чем Haversine, но для другого приложения Haversine может быть лучшим выбором. Вам нужно будет рассмотреть особенности ваших вариантов использования и принять решение на основе того, что вы там найдете.

Хаверсайн и Винсенти - два алгоритма решения разных задач. Хаверсайн вычисляет расстояние по большому кругу на сфере, а Винсенти вычисляет самое короткое (геодезическое) расстояние на поверхности эллипсоида вращения. Так что ответ на ваш вопрос можно разбить на 2 части:

  1. Вы хотите вычислить расстояние на сфере на эллипсоиде?
  2. Насколько точен Хаверсайн или Винсенти при расчете данной проблемы?

Для наземных применений эллипсоид вращения является разумным приближением к "среднему уровню моря"; ошибка составляет ± 100 м. Уплощение этого эллипсоида небольшое, около 1/300, и поэтому может быть аппроксимировано сферой (например, равного объема).

Расстояния большого круга отличаются от геодезических на 0,5%. В некоторых приложениях, например, каково расстояние от мыса до Каира? Этой ошибкой можно пренебречь. В других приложениях, например, при определении морских границ, он слишком велик (это 5 м на расстоянии 1 км). В общем, вы безопаснее, используя геодезическое расстояние.

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

На вопрос, являются ли алгоритмы точными:

Haversine является точным для округления, если только точки не являются почти противоположными. Лучшие формулы приведены в статье Википедии о расстояниях большого круга.

Винсенти обычно с точностью до 0,1 мм. Однако, если точки почти противоположны, алгоритм не сходится и ошибка намного больше. Я даю лучший алгоритм для решения геодезической задачи в Алгоритмы для геодезических. Смотрите также статью в Википедии о геодезических на эллипсоиде.

Решение геодезической задачи медленнее, чем решение для большого круга. Но это все еще очень быстро (около 1 мкс на расчёт), поэтому это не должно быть причиной, чтобы предпочитать большие расстояния по кругу.

ADENDUM

Вот пакет Java, который реализует мой алгоритм для поиска геодезических расстояний. В отличие от метода Винсенти, он точен для округления и сходится повсюду.

Другие вопросы по тегам