Формулы для расчета географической близости

Мне нужно реализовать поиск гео-близости в моем приложении, но я очень озадачен относительно правильной формулы для использования. После некоторых поисков в Интернете и в StackOverflow я обнаружил, что решения:

ИспользоватьФормула HaversineИспользоватьФормула расстояния большого кругаИспользоватьПространственный поиск в базе данных

Вариант № 3 действительно не вариант для меня банкомат. Теперь я немного сбит с толку, так как всегда думал, чтоФормула расстояния большого круга а такжеФормула Haversine мысинонимичный но видимо я ошибся?

Формула Хаверсина http://i46.tinypic.com/30shbn6.png

Приведенный выше снимок экрана был взят из удивительногоGeo (близость) Поиск с MySQL бумага, и использует следующие функции:

ASIN, SQRT, POWER, SIN, PI, COS

Я также видел изменения отта же формула (Сферический закон косинусов), как этот:

(3956 * ACOS(COS(RADIANS(o_lat)) * COS(RADIANS(d_lat)) * COS(RADIANS(d_lon) - RADIANS(o_lon)) + SIN(RADIANS(o_lat)) * SIN(RADIANS(d_lat))))

Это использует следующие функции:

ACOS, COS, RADIANS, SIN

Я не эксперт по математике, но эти формулы одинаковы? Я сталкивался с некоторымибольше вариаций и формул (такой какСферический закон косинусов иVincenty-х формулы - что кажется наиболее точным), и это еще больше смущает меня ...

Мне нужно выбрать хорошую формулу общего назначения для реализации в PHP / MySQL. Может кто-нибудь объяснить мне различия между формулами, которые я упомянул выше?

Какой из них самый быстрый для вычисления?Какой из них дает наиболее точные результаты?Какой из них является лучшим с точки зрения скорости / точности результатов?

Я ценю ваше понимание этих вопросов.

На основеtheonlytheory ответ Я проверил следующие формулы расстояния большого круга:

Винсенти ФормулаФормула HaversineСферический закон косинусов

Винсенти Формула однако медленноэто довольно точно (до 0,5 мм).

Формула Haversine Это намного быстрее, чем Формула Винсенти, я смог выполнить 1 миллион вычислений примерно за 6 секунд, что вполне приемлемо для моих нужд.

Сферический закон формулы косинусов показал, чтопочти в два раза быстрее как формула Haversine, иразница в точности - пренебрежение для большинства случаев использования.

Вот несколько тестовых локаций:

Google HQ (37.422045, -122.084347)Сан-Франциско, Калифорния (37.77493, -122.419416)Эйфелева башня, Франция (48.8582, 2.294407)Оперный театр, Сидней (-33.856553, 151.214696)

Google HQ - Сан-Франциско, Калифорния:

Винсенти Формула:49 087.066 metersФормула Haversine:49 103.006 metersСферический закон косинусов:49 103.006 meters

Google HQ - Эйфелева башня, Франция:

Винсенти Формула:8 989 724.399 metersФормула Haversine:8 967 042.917 metersСферический закон косинусов:8 967 042.917 meters

Google HQ - Opera House, Сидней:

Винсенти Формула:11 939 773.640 metersФормула Haversine:11 952 717.240 metersСферический закон косинусов:11 952 717.240 meters

Как вы можете видеть, естьнет заметной разницы между формулой Хаверсин и сферическим законом косинусов, однако обарасстояние до 22 километров по сравнению с формулой Винсенти, потому что она использует эллипсоидальное приближение Земли вместо сферического.

Ответы на вопрос(2)

Ваш ответ на вопрос