Поиск объектов в определенном радиусе с помощью Google Maps
Допустим у меня есть перечень объектов (скажем продуктовые магазины), у меня есть Город, Улица, номер дома, latitude, langitude
я хочу с помощью Google Maps показать пользователю магазины в радиусе скажем 2х километров. Возможно ли такое и есть ли где нибудь готовые примеры где можно такое посмотреть?
Ответы (5)
RSSНО!
Если под "перечнем объектов" понимается база данных координат точек на карте Google Maps, то можно все сделать вручную.
А именно: достаточно сделать запрос который будет вычислять расстояние от центра этого "радиуса поиска" до объекта, и выбрать все точки расстояние до которых меньше чем 2 км.
Если вспомнить курс геометрии, то расстояние между 2мя точками с координатами (x1,y1) и (x2,y2) определяется по той же формуле, что и для определения гипотенузы прямоугольного треугольника (квадрат гипотенузы равен сумме квадратов катетов)
То есть квадрат расстояния между точками равен: (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) (т.к. квадрат изобразить сложно - написал с умножением). Соответственно, расстояние равно квадрату от результата.
Вот собственно и все. Может быть, возможен менее ресурсоемкий путь. По-крайней мере точно можно сказать, что для уменьшения времени вычисления нужно будет еще ограничить поиск координат некой прямоугольной зоной (клиент-то ведь не весь мир на карте рассматривать будет в поисках магазина, а какой-то участок в соответствующем масштабе) - и отбирать точки внутри этой зоны, и их уже проверять на близость к центру радиуса поиска.
Что до того, как именно организовать работу с БД и все такое прочее - смотрите в ссылке [1] (статья по русски)
Если же речь идет о том, чтобы делать поиск не в собственных ваших данных, а в БД Google Maps (то есть буквально делать поисковый запрос к Google Maps), то учтите, что возвращаемый результат, например по запросу "Магазины Москва" - вернет вам не только магазины, но и кучу всего - так что придется еще осуществлять фильтрацию полученных результатов.
Удачи!
plugatar
Получив координаты действуте как Babr предложил.
Хотя я наверное разбилы бы город на квадраты и сразу прописал для каждой точки в базе принадлежность к квадрату. А пользователю бы показывал инфу про прилегающим квадратам. Т.е. не вычислял бы расстояние каждый раз.
ugene-ace
проще все это зделать самому: на карте города отметить магазины в любом графическом редакторе и выводить исходя из запроса пользователя нужный квадрат города. Скрипт не сложный в принципе, поищите на сайтах скриптов или можно заказать там же.
salrin1
приятно, мы мыслим в унисон
to Boris: способ оптимизации предложенный reservisor нужно будет применить обязательно. Или же кешировать результаты. Иначе база будет падать регулярно
erensy
orisov-leg
Только зарегистрированные и авторизованные пользователи могут отвечать.