Mam zapytanie, które próbuje znaleźć rzeczy w określonej geolokalizacji, ale wyniki, które przynosi, są trochę ... dziwne.Zapytanie o rzeczy w pobliżu geolokalizacji?
Wcześniej opublikowałem ten wątek, a społeczność pomogła mi znaleźć formułę, której potrzebowałem: Querying within longitude and latitude in MySQL, ale zapytanie daje teraz naprawdę zwariowane wyniki.
Moje dane są otaczające miasto San Francisco, który ma lat/lng 37.780182 , -122.517349
Zapytanie:
SELECT
id,
hike_title,
lat,
lng,
(3959 * acos( cos(radians(37))
* cos(radians(lat))
* cos(radians(lng) - radians(37.780182))
+ sin(radians(-122.517349)) * sin(radians(lat))
)
) AS distance
FROM
my_awesome_table
HAVING
distance < 10000
ORDER BY
distance
LIMIT
0 , 50
Więc jak widać - nawet jeśli robię promień 10000 wciąż robi” t znaleźć wiele, więc zastanawiam się, czy moje zapytanie jest wyłączone. Niektóre z rezultatów, które przynosi, mają nawet 0,0 dla lng/lng, co oznacza, że nie ma lat/lng dla tego rekordu.
Oto jak formuła ma wyglądać następująco:
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
LIMIT
0 , 20;
Dziękuję i przepraszam za boleśnie długi pytanie! Przy okazji, używam MySQL.
Hmmm,
Próbowałem tylko z dokładnym zapytania dałeś i to działało z dokładnością 50%. Oto przykład zestawu danych:
lat lng
| 37.223465 | -122.090363 |
| 39.320980 | -111.093735 |
| 38.031715 | -84.495132 |
| 37.787144 | -122.493263 |
| 52.975361 | -1.458620 |
| 40.848557 | -111.906883 |
| 40.572498 | -111.859718 |
Więc teraz zapytanie zwróciło wszystkie elementy, które były wiele mil, ale nie przedmioty, które były pod 100 mil. Podobnie jak ten przedmiot (37.787144, -122.493263) nigdy nie został zwrócony, mimo że znajduje się około 50 mil od punktu początkowego. Czy wiesz, dlaczego?
Dlaczego nie używasz rozszerzenia Spatial MySQL, które zapewniają funkcje dla tego typu rzeczy? http://dev.mysql.com/doc/refman/5.5/en/spatial-extensions.html –
Po prostu przeczytaj niektóre z tematów. Nie jestem pewien, czy rozumiem to zbyt dobrze, ale prawdopodobnie wydaje się przesadny dla moich potrzeb. Czy to sprawia, że zapytania są o wiele szybsze? Czy uważasz, że jest to o wiele lepsze rozwiązanie niż to, które omawiamy w tym wątku? Dzięki! – Genadinik