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 danychOpcja 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ówTheVincenty 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 meters
Formuła Haversine:49 103.006 meters
Sferyczne prawo kosinusów:49 103.006 meters
Google HQ - Wieża Eiffla, Francja:
Formuła Vincenty:8 989 724.399 meters
Formuła Haversine:8 967 042.917 meters
Sferyczne prawo kosinusów:8 967 042.917 meters
Google HQ - Opera House, Sydney:
Formuła Vincenty:11 939 773.640 meters
Formuła Haversine:11 952 717.240 meters
Sferyczne 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.