Mam bazę danych mysql i 2 tabele, powiedzmy klientów i szkoły. Teraz każda tabela ma kolumny szerokości i długości geograficznej. I potrzebuję zrobić SELECT na przykład z drugiego stołu, gdzie szkoły są w danym promieniu jednego rekordu z pierwszego stołu. Obliczenia należy wykonać na podstawie szerokości i długości geograficznej. PS: Używam PHP.Otrzymuj wyniki z mysql na podstawie długości geograficznej
Odpowiedz
można obliczyć odległość przy użyciu Spherical law of cosines:
SELECT DEGREES(ACOS(SIN(RADIANS(clients.latitude)) * SIN(RADIANS(schools.latitude)) +
COS(RADIANS(clients.latitude)) * COS(RADIANS(schools.latitude))
* COS(RADIANS(clients.longitude
– schools.longitude))))
* 60 * 1.1515 * 1.609344 AS distance
FROM clients, schools HAVING distance < $radius
RADIANS(X) - stopnie na radiany
ACOS(X) - arcus cosinus liczby X czyli wartość, której cosinus wynosi X
DEGREES(X) - radianów na stopnie
60 - minut w stopniu
1.1515 - mile w nautical mile
1,609344 - km w mili
Dzięki, spróbuję teraz i zaakceptuję, jeśli działa. – Centurion
Więc jeśli mój promień jest w kilometrach, zapytanie będzie takie, jak piszesz, czy powinienem je zmienić? dzięki – Centurion
Mysql podaje błąd: Nieznana kolumna "clients.longitude-schools.longitude" w "liście pól" ..., jakie znaczenie ma tu znak "-"? – Centurion
Oprócz odpowiedzi Piskvor, ten poradnik jest dość dobre: [Geo Odległość Szukaj z MySQL] (http://www.scribd.com/doc/2569355/Geo-Distance- Search-with-MySQL), chociaż odkryłem, że strona nie ładowała się zbyt dobrze. Alternatywnie prezentację PowerPoint można znaleźć [tutaj] (http://www.mysqlconf.com/mysql2008/public/schedule/detail/347). – Mike