Formuły do ​​obliczania bliskości geograficznej

Muszę zaimplementować wyszukiwanie zbliżeniowe Geo w mojej aplikacji, ale jestem bardzo zdezorientowany co do poprawnej formuły do ​​użycia. Po kilku wyszukiwaniach w sieci Web iw StackOverflow odkryłem, że rozwiązania są:

UżyjFormuła HaversineUżyjFormuła odległości wielkiego kołaUżyćWyszukiwarka przestrzenna w bazie danych

Opcja nr 3 naprawdę nie jest dla mnie rozwiązaniem ATM. Teraz jestem trochę zdezorientowany, ponieważ zawsze myślę, żeFormuła odległości wielkiego koła iFormuła Haversine bylirównoznaczny ale najwyraźniej myliłem się?

Haversine Formula http://i46.tinypic.com/30shbn6.png

Powyższy zrzut ekranu został zaczerpnięty z niesamowitegoGeo (bliskość) Wyszukiwanie z MySQL papier i wykorzystuje następujące funkcje:

ASIN, SQRT, POWER, SIN, PI, COS

Widziałem także odmiany zta sama formuła (Prawo sferyczne kosinusów), jak ten:

(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))))

Używa następujących funkcji:

ACOS, COS, RADIANS, SIN

Nie jestem ekspertem od matematyki, ale czy te formuły są takie same? Natknąłem się na niektórychwięcej odmian i formuł (tak jakPrawo sferyczne kosinusów iVincenty's wzory - co wydaje się być najdokładniejsze), co czyni mnie jeszcze bardziej zdezorientowanym ...

Muszę wybrać dobrą formułę ogólnego przeznaczenia do wdrożenia w PHP / MySQL. Czy ktoś może mi wyjaśnić różnice między formułami, o których wspomniałem powyżej?

Który jest najszybszy do obliczenia?Który z nich zapewnia najbardziej dokładne wyniki?Który z nich jest najlepszy pod względem szybkości / dokładności wyników?

Doceniam twój wgląd w te pytania.

Oparte natylko teoria odpowiedź Przetestowałem następujące wzory odległości wielkiego koła:

Vincenty FormulaFormuła HaversinePrawo sferyczne kosinusów

TheVincenty Formula jest jednak powolnyjest dość dokładny (do 0,5 mm).

TheFormuła Haversine jest znacznie szybszy niż Formuła Vincenty'ego, udało mi się wykonać 1 milion obliczeń w około 6 sekund, co jest całkiem do przyjęcia dla moich potrzeb.

TheSferyczne prawo formuły cosinusów okazało się byćprawie dwa razy szybciej jak Formuła Haversine, iróżnica precyzji to zaniedbanie w większości przypadków użycia.

Oto kilka lokalizacji testowych:

Google HQ (37.422045, -122.084347)San Francisco, CA. (37.77493, -122.419416)Wieża Eiffla, Francja (48.8582, 2.294407)Opera House, Sydney (-33.856553, 151.214696)

Google HQ - San Francisco, Kalifornia:

Formuła Vincenty:49 087.066 metersFormuła Haversine:49 103.006 metersSferyczne prawo kosinusów:49 103.006 meters

Google HQ - Wieża Eiffla, Francja:

Formuła Vincenty:8 989 724.399 metersFormuła Haversine:8 967 042.917 metersSferyczne prawo kosinusów:8 967 042.917 meters

Google HQ - Opera House, Sydney:

Formuła Vincenty:11 939 773.640 metersFormuła Haversine:11 952 717.240 metersSferyczne prawo kosinusów:11 952 717.240 meters

Jak widać, jestbrak zauważalnej różnicy między formułą Haversine a sferycznym prawem kosinusów, jakkolwiek obie mająprzesunięcia odległości sięgające 22 kilometrów w porównaniu z formułą Vincenty'ego, ponieważ wykorzystuje elipsoidalne przybliżenie ziemi zamiast sferycznego.

questionAnswers(2)

yourAnswerToTheQuestion