Мне нужно реализовать поиск гео-близости в моем приложении, но я очень озадачен относительно правильной формулы для использования. После некоторых поисков в Интернете и в StackOverflow я обнаружил, что решения:
- Используйте формулу Haversine
-  Используйте формулу расстояния большого круга
- Используйте систему пространственного поиска в базе данных
Вариант № 3 действительно не вариант для меня банкомат. Теперь я немного сбит с толку, поскольку всегда считал, что Формула Великого Круга и Формула Хаверсин были синонимами, но, видимо, я ошибался?
Приведенный выше снимок экрана был взят из удивительного поиска 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
Я не эксперт по математике, но эти формулы одинаковы? Я встречал еще несколько вариаций и формул (таких как сферический закон косинусов и формулы Винсенти, которые кажутся наиболее точными), и это еще больше сбивает меня с толку...
Мне нужно выбрать хорошую формулу общего назначения для реализации в PHP/MySQL. Может кто-нибудь объяснить мне различия между формулами, которые я упомянул выше?
- Какой из них самый быстрый для вычисления?
- Какой из них дает наиболее точные результаты?
- Какой из них является лучшим с точки зрения скорости/точности результатов?
Я ценю ваше понимание этих вопросов.
Основываясь на единственном теоретическом ответе, я проверил следующие формулы расстояния большого круга:
- Винсенти Формула
- Формула Haversine
- Сферический закон косинусов
Формула Винсенти очень медленная, но довольно точная (до 0,5 мм).
Формула Хаверсайна намного быстрее, чем Формула Винсенти, я смог выполнить 1 миллион вычислений примерно за 6 секунд, что вполне приемлемо для моих нужд.
Сферическая формула закона косинусов показала, что она почти в два раза быстрее формулы Хаверсина, а разница в точности - пренебрежение для большинства случаев использования.
Вот несколько тестовых локаций:
-  Google HQ (37.422045,-122.084347)
-  Сан-Франциско, Калифорния (37.77493,-122.419416)
-  Эйфелева башня, Франция (48.8582,2.294407)
-  Оперный театр, Сидней (-33.856553,151.214696)
Google HQ - Сан-Франциско, Калифорния:
-  49 087.066 metersФормула: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 километров по сравнению с формулой Винсенти, поскольку она использует эллипсоидальное приближение Земли вместо сферического.

