Получить ближайшие местоположения, используя широту и долготу - PullRequest
4 голосов
/ 03 июля 2011

у меня есть стол hotspots

id  name  date
1   foo   2011-06-15 15:10:34
2   bar   2011-07-02 16:45:18

и стол locations

hotspotid  zipcode  latitude  longitude
1          90001    xxxxx     xxxxx
2          45802    xxxxx     xxxxx

Как я могу перечислить точки доступа рядом с определенной широтой и долготой с ограничением миль, используя SQL-запрос?

P.S. Мне бы хотелось решение на чистом SQL, но с php все в порядке, если оно необходимо.

Спасибо

Ответы [ 6 ]

5 голосов
/ 03 июля 2011

Для начала вам нужно географическое местоположение для каждой точки доступа, в идеале с использованием широты и долготы. Вы можете использовать Google Geocoding API для просмотра каждой записи и сохранения широты / долготы.

Тогда вы можете сопоставить ближайшие точки доступа с этим запросом SQL и упорядочить по расстоянию.

Надеюсь, это поможет.

0 голосов
/ 17 декабря 2014

Пожалуйста, попробуйте это для ближайшего местоположения

SELECT ((ACOS(SIN($lat * PI() / 180) * SIN(lat * PI() / 180)  + COS($lat * PI() / 180) * COS(lat * PI() / 180) * COS(($lon – lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS `distance` 
FROM `members` 
HAVING `distance`<=’10’ 
ORDER BY `distance` ASC
0 голосов
/ 03 июля 2011

Если вы заботитесь только о вещах, находящихся на определенном расстоянии от точек, вы должны взглянуть на это:

http://janmatuschek.de/LatitudeLongitudeBoundingCoordinates

0 голосов
/ 03 июля 2011

то, что вы вычисляете, это «расстояние по большому кругу» между двумя парами значений lat и long.

это может быть сделано в SQL, особенно если вы хотите вытащить вычисление и сделать его впроцедура базы данных ... просто порядок по расстоянию при расчете

0 голосов
/ 03 июля 2011

Для решения на чистом SQL вы можете посмотреть базы данных как

http://www.zip -codes.com

Если вы ищете бесплатное решение,Я использовал базы данных IP-адресов maxminds раньше, но их точность почтового индекса очень низкая.Кроме того, база данных maxminds предназначена для поиска местоположения с IP-адреса.

Если вы хотите найти местоположение почтового индекса, вы можете зарегистрировать ключ API Карт Google и использовать их геолокациюслужба поиска.Это решение, скорее всего, потребует PHP или JavaScript для поиска.Но сервис хорошо документирован и очень эффективен по моему опыту.

http://code.google.com/apis/maps/documentation/javascript/basics.html#Geolocation

0 голосов
/ 03 июля 2011

Просто просматривая, я нашел эту ссылку , хотя я не уверен, что это именно то, что вы ищете.

Вот пост, который лучше описывает библиотеку. Это не основанный на SQl ответ, хотя вы можете взять латы / лонги, вывести их в базу данных и кодировать запрос расстояния.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...