Mam problemy podczas próby zwrócenia najbliższej lokalizacji użytkownikowi za pomocą instrukcji SQL. Aby przetestować używam te same współrzędne, oto co mam:Pomiar odległości między dwoma punktami Lat/Lng
SQL:
SELECT `companies`.`customerName` ,
(3959 *
ACOS(
COS(
RADIANS(37.367485) * COS(RADIANS(`locations`.`gps_lat`)) *
COS(
RADIANS(`locations`.`gps_lng`) - RADIANS(-77.399994) +
SIN(RADIANS(37.367485)) * SIN(RADIANS(`locations`.`gps_lat`))
)
)
)
)
AS `distance`
FROM `locations`
JOIN `companies` ON `locations`.`co_id`
HAVING `distance` > 25
ORDER BY distance
LIMIT 0 , 10
Wyniki:
| customerName | distance |
| SOME COMPANY | 1914.41747964854 |
locations
wartości z tabeli :
gps_lat | gps_lng
37.367485 | -77.399994
użyłem przykład z Google, sprawdziłem wzór A kilka razy, a ja nie potrafię wymyślić, gdzie poszło źle. Każda pomoc jest doceniana.
EDIT:
Ponieważ nie wydaje się być trochę zamieszania na mnie wiedząc, co robię:
>
zastapiony uzyskując wynik, 1914
jest oczywiście większy niż 25
.
Stosowanie tego polega na przekazywaniu współrzędnych użytkownika z aplikacji na Androida na nasz serwer sieciowy. Szerokość i długość geograficzna zostaną pobrane z wartości $_GET
i przekierowane przez firmy znajdujące się w bazie danych MySQL serwera WWW.
Powyższa składnia to po prostu sprawdzanie mojej instrukcji SQL w Mysql Workbench. Oczywiście szukam wyniku zerowego.
Jeśli chcesz się najbliżej, dlaczego go, aby ograniczyć „odległość > 25 "? –
Zrobiłem, zwróciłem zero wyników. Zwróć uwagę na odległość, którą otrzymałem powyżej – jnthnjns
W zależności od używanego systemu RDBMS, może to być znacznie prostsze (i szybsze). Przykład: [MySQL] (http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html), [SQL Server] (http://msdn.microsoft.com/en-us/ library/bb933876% 28v = sql.105% 29.aspx), [PostgreSQL] (http://postgis.refractions.net/). –