2010-08-20 5 views
11

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

+2

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

Odpowiedz

9

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

+0

Dzięki, spróbuję teraz i zaakceptuję, jeśli działa. – Centurion

+1

Więc jeśli mój promień jest w kilometrach, zapytanie będzie takie, jak piszesz, czy powinienem je zmienić? dzięki – Centurion

+0

Mysql podaje błąd: Nieznana kolumna "clients.longitude-schools.longitude" w "liście pól" ..., jakie znaczenie ma tu znak "-"? – Centurion