Поиск объектов в определенном радиусе с помощью Google Maps





Допустим у меня есть перечень объектов (скажем продуктовые магазины), у меня есть Город, Улица, номер дома, latitude, langitude

я хочу с помощью Google Maps показать пользователю магазины в радиусе скажем 2х километров. Возможно ли такое и есть ли где нибудь готовые примеры где можно такое посмотреть?
  • 2 апреля 2009, 02:28
  • anserif

Ответы (5)

RSS
+
0
такой функции в Google Maps API нету
НО!

Если под "перечнем объектов" понимается база данных координат точек на карте Google Maps, то можно все сделать вручную.
А именно: достаточно сделать запрос который будет вычислять расстояние от центра этого "радиуса поиска" до объекта, и выбрать все точки расстояние до которых меньше чем 2 км.

Если вспомнить курс геометрии, то расстояние между 2мя точками с координатами (x1,y1) и (x2,y2) определяется по той же формуле, что и для определения гипотенузы прямоугольного треугольника (квадрат гипотенузы равен сумме квадратов катетов)
То есть квадрат расстояния между точками равен: (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) (т.к. квадрат изобразить сложно - написал с умножением). Соответственно, расстояние равно квадрату от результата.

Вот собственно и все. Может быть, возможен менее ресурсоемкий путь. По-крайней мере точно можно сказать, что для уменьшения времени вычисления нужно будет еще ограничить поиск координат некой прямоугольной зоной (клиент-то ведь не весь мир на карте рассматривать будет в поисках магазина, а какой-то участок в соответствующем масштабе) - и отбирать точки внутри этой зоны, и их уже проверять на близость к центру радиуса поиска.

Что до того, как именно организовать работу с БД и все такое прочее - смотрите в ссылке [1] (статья по русски)

Если же речь идет о том, чтобы делать поиск не в собственных ваших данных, а в БД Google Maps (то есть буквально делать поисковый запрос к Google Maps), то учтите, что возвращаемый результат, например по запросу "Магазины Москва" - вернет вам не только магазины, но и кучу всего - так что придется еще осуществлять фильтрацию полученных результатов.

Удачи!
avatar

plugatar

  • 30 июля 2009, 01:09
+
0
Вам действительно нужна база (магазинов) с координатами, как сказано в предыдущем ответе. Если координат нет, можно попробовать геокодинг по адресам, чтобы получить координаты для каждой точки. Геокодинг не обязательно гугловый использовать, как понимаете, но и его тоже можно. К сожалению работает нормально навероне только в Москве пока.

Получив координаты действуте как Babr предложил.

Хотя я наверное разбилы бы город на квадраты и сразу прописал для каждой точки в базе принадлежность к квадрату. А пользователю бы показывал инфу про прилегающим квадратам. Т.е. не вычислял бы расстояние каждый раз.
avatar

ugene-ace

  • 5 июня 2009, 05:51
+
0
С помощью гугла такое делать не имеет смысла, ему все равно магазин это или жилой дом
проще все это зделать самому: на карте города отметить магазины в любом графическом редакторе и выводить исходя из запроса пользователя нужный квадрат города. Скрипт не сложный в принципе, поищите на сайтах скриптов или можно заказать там же.
avatar

salrin1

  • 19 июня 2009, 13:07
+
0
to reservisor:
приятно, мы мыслим в унисон

to Boris: способ оптимизации предложенный reservisor нужно будет применить обязательно. Или же кешировать результаты. Иначе база будет падать регулярно
avatar

erensy

  • 20 июня 2009, 20:30
+
0
спасибо за ответы и идеи, буду применять :-)
avatar

orisov-leg

  • 29 июля 2009, 21:48

Только зарегистрированные и авторизованные пользователи могут отвечать.