2012-12-19 12 views
7

Tworzę aplikację mobilną za pomocą Phonegapa i JQuery.Uzyskiwanie podobnej długości i szerokości geograficznej z bazy danych

Aplikacja zbiera długość i szerokość geograficzną użytkowników i przechowuje je w bazie danych (przy użyciu skryptu PHP - usługa sieciowa), a w przypadku niektórych algorytmów wykrywa, czy występuje ruch drogowy, czy nie. Potrzebuję pobrać wszystkie wartości długości i szerokości geograficznej z bazy danych, które znajdują się blisko siebie, powiedzmy w tym samym obszarze ulicy/200 m.

Powiedzmy, że masz listę w bazie danych z 5 lon/lat, które są blisko siebie (w tej samej ulicy A), 3 lon/lat, które są blisko siebie w niektórych ulicach B, a niektóre inne reprezentują użytkowników losowo na innych ulicach. Czy ktoś może mi powiedzieć, w jaki sposób mogę wykryć wartości lon/lat, które są blisko siebie? Wartości przechowuję je jako oddzielne wartości w bazie danych MySQL, tj. Jedno pole dla długości i inne dla szerokości geograficznej.

Gdy zdobędę lon/lat, które znajdują się blisko siebie, będę musiał znaleźć punkt środkowy między użytkownikami na ulicy A, a użytkownikami na ulicy B, aby oznaczyć jako zatłoczenie (na podstawie innych wykrytych przypadków).

+0

W zależności od skali aplikacji i jeśli jest to opcja, warto rozważyć użycie PostGIS. Ponieważ ma znacznie lepsze wsparcie SPATIAL niż MySQL. Robienie tego w PostGIS byłoby bardzo proste, patrz http://gis.stackexchange.com/q/27878/3591 –

+0

Witaj Mark, skala aplikacji jest dość prosta. Rozważaliśmy PostGIS, ale uciekliśmy się do MySQL, ponieważ znaleźliśmy hosting, który był tańszy ... W przeciwnym razie to prawda PostGIS ma lepsze cechy przestrzenne:/ – user1809790

Odpowiedz

5

Powinieneś zajrzeć do formuły Haversine'a. Zobacz poniżej:

SELECT id, (3959 * acos(cos(radians(37)) * cos(radians(lat)) * cos(radians(lng) - radians(-122)) + sin(radians(37)) * sin(radians(lat)))) AS distance 
FROM markers 
HAVING distance < 25 
ORDER BY distance; 

Spowoduje to zwrócenie wszystkich rekordów znajdujących się w odległości 25 mil od wprowadzonej pary długich/lat.

+0

HAVING odległość <25 słowo kluczowe odległość tutaj - czy jest to coś rozpoznane przez MySQL? Jakaś funkcja czy coś w tym rodzaju? – user1809790

+0

Proszę sprawdzić ans, co czyni alias "odległość" –

+0

@ m4k Myślę, że powyższy fragment dostałby mnie wszystkie długie/lat, które są zarówno na ulicy A i ulicy B. Czy jest jednak jakiś sposób na rozróżnienie dwóch? Cos, co musiałbym zrobić, to zdobyć punkty, które są blisko siebie (jak wyżej), a następnie zdobyć wszystkie punkty na ulicy A lub B i znaleźć ich punkt środkowy. – user1809790

Powiązane problemy