Mam tabelę mySQL z nazwą użytkownika, szerokością i długością geograficzną użytkownika. Chciałbym uzyskać listę użytkowników, którzy znajdują się w okręgu lub kwadracie o określonej szerokości i długości geograficznej z określoną odległością. Na przykład moje dane wejściowe Lat = 78,3232 i Long = 65,3234, a odległość = 30 mil. Chciałbym uzyskać listę użytkowników, którzy znajdują się w odległości 30 mil od punktów 78.3232 i 65.3234. Czy można to rozwiązać za pomocą pojedynczego zapytania? Czy możesz dać mi wskazówkę, jak rozpocząć rozwiązywanie tego zapytania? Jestem nowy w informacji geograficznej.
20
Odpowiedzi:
Instrukcja SQL, która znajdzie najbliższe 20 lokalizacji, które znajdują się w promieniu 30 mil od współrzędnych 78.3232, 65.3234. Oblicza odległość na podstawie szerokości / długości geograficznej tego wiersza i docelowej szerokości / długości geograficznej, a następnie prosi tylko o wiersze, w których wartość odległości jest mniejsza niż 30 mil, porządkuje całe zapytanie według odległości i ogranicza go do 20 wyników. Aby wyszukiwać według kilometrów zamiast mil, zamień 3959 na 6371.
To używa Google Maps API v3 z backendem MySQL, który już masz.
https://developers.google.com/maps/articles/phpsqlsearch_v3#findnearsql
źródło
Odpowiedź Mapperza jest nieprawidłowa. Zatokę należy obliczać na podstawie szerokości geograficznej, a NIE długości geograficznej. Tak więc instrukcja Corect SQL to:
źródło
Utworzenie funkcji może być podstawą .. abyś mógł z niej ponownie korzystać w innych obszarach. Sprawiłoby to, że twoje zapytanie byłoby trochę czystsze ... Przynajmniej to moje 2 centy.
źródło
Oto mój wariant zapytania, wydaje się nieco łatwiejszy ( http://dexxtr.com/post/83498801191/how-to-determine-point-inside-circle-using-mysql )
źródło