Задать вопрос
inside22
@inside22

Как создать сервис Geocoding своими руками?

Здравствуйте Друзья!

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

  • Страна, Город, Район,
  • Страна, Район, Поселение
  • Страна, Город, Район, Поселение
  • Страна, Район, Город, Поселение


В Google Maps данные не всегда корректные, вбитые на разных языках, дерево практически всегда не корректное, а самое главное, за 1000 запросов они берут $1, а мне минимум 10 тысяч запросов в сутки делать надо.

OSM практически все знает, но ответы, имею ввиду именования объектов тоже не всегда корректные.

В связи с этим у меня возникла мысль, может быть мне собрать полигоны всех городов и районов нужных мне, и самому заниматься гео-кодингом?

Область которую мне нужно охватить, в принципе не большая.

  1. 66 районов республиканского подчинения
  2. 12 городов республиканского подчинения
  3. 7 районов и 1 город в подчинении автономной республики


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

Для создания этого функционала мне все равно надо по каждому городу сохранить координаты.
Вот тут я и подумал, что если и полигоны сохранять.

Вопрос тут в том в чем, на чем это все реализовать проще?
Где хранить данные? В MySQL и Elastic?

Задача, на сколько я понимаю сводится к следующему, найти все полигоны в которые входит гео-точка?

Буду очень признателен, если поделитесь своим опытом или подскажите решение.
  • Вопрос задан
  • 301 просмотр
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
Moskus
@Moskus
- Выгружайте полигоны из OSM (через Overpass API, например),
- Редактируйте их, чтобы они отражали нужную вам иерархию и названия (используя QGIS, например), а также, чтобы упростить геометрию (получить из мультиполигонов OSM обычные замкнутые кривые),
- Грузите получившееся в базу с поддержкой пространственных функций (SQLite/SpatiaLite, PostgreSQL/PostGIS) в виде геометрии,
- Получайте искомое, используя пространственные запросы по условию нахождения геометрии внутри геометрии и с сортировкой по результату вычисления расстояния.
Ответ написан
Комментировать
@pfg21
ex-турист
Nominatim - инструмент осм для прямого и обратного геокодинга. тебе нужен обратный.
статей как развернуть номинатим на своем сервере куча.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы