У меня возникают проблемы с попыткой вернуть ближайшее место пользователю через инструкцию SQL. Для тестирования я использую те же самые координаты, вот что у меня есть:Измерение расстояния между двумя точками 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
Результаты:
| customerName | distance |
| SOME COMPANY | 1914.41747964854 |
locations
таблице значений :
gps_lat | gps_lng
37.367485 | -77.399994
Я использовал пример из Google, я проверил формулу несколько раз, и я не могу придумать, куда я пошел неправильно. Любая помощь приветствуется.
EDIT:
Поскольку, как представляется, некоторая путаница на меня, зная, что я делаю:
>
был заменен, чтобы получить результат, 1914
, очевидно, больше чем 25
.
Приложение это передача координат пользователей из приложения для Android на наш веб-сервер. Широта и долгота будут вытягиваться из значений $_GET
и перекрестно привязаны от компаний в нашей базе данных MYSQL веб-серверов.
Синтаксис выше - это просто проверка моего оператора SQL в Mysql Workbench. Очевидно, что я ищу результат с нулевым значением.
Если вы хотите ближе, почему бы ограничить его на «расстояние > 25 "? –
Я сделал, вернул нулевые результаты. Обратите внимание на расстояние, которое оно дало мне выше – jnthnjns
В зависимости от того, какую СУБД вы используете, могут быть значительно упрощены (и быстрее) способы сделать это. Пример: [MySQL] (http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html), [SQL Server] (http://msdn.microsoft.com/en-us/ библиотека/bb933876% 28v = sql.105% 29.aspx), [PostgreSQL] (http://postgis.refractions.net/). –