@NemuiSaburau

Как организовать поиск по карте мира в БД?

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

Пример: фирма есть в Гатчине, Лен. область, Россия. Соответственно, если я в поиске ищу все фирмы в лен.области, то эта должна показываться. Границы лен.области берутся с какой-нибудь карты.

Причем к одной фирме обязательно должно прикручиваться несколько таких мест, а не только одно!

И еще: одновременно с этим должен быть поиск в радиусе от точки на карте.
Пример: ищу все фирмы в России, точка на карте - Санкт-Петербург, радиус - 700 км. Показываются все фирмы, которые в этом радиусе на территории России, но не показываются те, которые в Финляндии или Эстонии.

Как лучше такое выполнить? Поиск значений в определенном радиусе - видел статью на Хабре, но как прикрутить еще и поиск по карте?
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ответы на вопрос 3
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
Если без дополнительных расширений на MySql, то я бы перед поиском по координатам области, определял бы окружность поиска. Делал запрос с условиями для окружности, и после выборки производил бы дополнительную фильтрацию результата. Тут уже задача определения попадания точки в полигон. Думаю в инете найдёте.

Вместо окружности можно использовать прямоугольник или любой другой примитив.
Ответ написан
Комментировать
@Vitsliputsli
Посчитать расстояние между 2 точками - простейшая арифметика (чтобы ускорить выборку можно задействовать индексы, сперва выбирать по квадрату, а затем уточнять расчетом для окружности). А принадлежность к административным единицам определять по ФИАС для России. Какие страны ещё задействованы?
Ответ написан
@2vtlk
В mongodb из коробки есть возможности сделать все что вы перечислили. Можно взять прям json полигон из яндекс карт - скормить mongo и она выдаст все организации внутри полигона. И т.д.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы