Есть база данных фирм, каждая работает в различных странах, городах или поселках.
Необходимо сделать так, чтобы можно было на сайте искать эти фирмы по географическому положению.
Пример: фирма есть в Гатчине, Лен. область, Россия. Соответственно, если я в поиске ищу все фирмы в лен.области, то эта должна показываться. Границы лен.области берутся с какой-нибудь карты.
Причем к одной фирме обязательно должно прикручиваться несколько таких мест, а не только одно!
И еще: одновременно с этим должен быть поиск в радиусе от точки на карте.
Пример: ищу все фирмы в России, точка на карте - Санкт-Петербург, радиус - 700 км. Показываются все фирмы, которые в этом радиусе на территории России, но не показываются те, которые в Финляндии или Эстонии.
Как лучше такое выполнить? Поиск значений в определенном радиусе - видел статью на Хабре, но как прикрутить еще и поиск по карте?
Если без дополнительных расширений на MySql, то я бы перед поиском по координатам области, определял бы окружность поиска. Делал запрос с условиями для окружности, и после выборки производил бы дополнительную фильтрацию результата. Тут уже задача определения попадания точки в полигон. Думаю в инете найдёте.
Вместо окружности можно использовать прямоугольник или любой другой примитив.
Посчитать расстояние между 2 точками - простейшая арифметика (чтобы ускорить выборку можно задействовать индексы, сперва выбирать по квадрату, а затем уточнять расчетом для окружности). А принадлежность к административным единицам определять по ФИАС для России. Какие страны ещё задействованы?
В mongodb из коробки есть возможности сделать все что вы перечислили. Можно взять прям json полигон из яндекс карт - скормить mongo и она выдаст все организации внутри полигона. И т.д.