Присваивания локаций через границы городов, поселков, адм районов

веб-проект (php, mysql), локаций 200к +

Нужно четко определять местонахождение пользователя на сайт и присваивать ему нужный город. Для более четкого присваивания локаций хотим использовать пределы городов. Сейчас используем просто GeoIP lite от MaxMind. Запрос присваивания GeoPy использовать не хотим, потому что есть проблемы с полями которые передаются:

  1. Перевод городов, и поля в которых они передаются очень разные обычно
  2. искать по Осм ид не имеет смысла, потому что получать будем точные координаты, даже если не точны, GeoPy все равно допишет за нас.
    https://nominatim.openstreetmap.org/reverse?format=json&osm_type=N&accept-language=ru&lat=-6.165&lon=106.847
    https://nominatim.openstreetmap.org/reverse?format=json&osm_type=N&accept-language=ru&lat=50.42&lon=30.35

Поэтому присваивать локацию будем на стороне сервера.

И тут возникает вопрос.
Где взять БД полигонов локаций или возможно где-то возможно делать запросы в ОпенСтритМап, чтобы получить координаты для своей БД (MySQL),

На примере Киева
http://polygons.openstreetmap.fr/get_geojson.py?id=421866&params=0

Возможно есть какие-то другие идеи, буду рад почитать.

Привет!

Для определения локации по координатам нужно спросить у Клиента геоданные (помимо IP).

Для выкачивания данных из Osm есть osm2pgsql, пример https://vitalyzhakov.github.io/post/osm2pgsql/

Привет!

Мы уже определяем координаты клиента по IP. Как отдельную функцию хотим ввести функцию HTML5 GetCurrentLocation.

Проблема останется с определением его города. Кейс когда человек находится на окраине и ему нужно присвоить город того где он находится административно.

Спасибо за тутуориал. Не знаете, можно ли такое в MySQL делать или у него функция определения полигна не заложена?

Привет!

Судя по мануалу https://dev.mysql.com/doc/refman/8.0/en/spatial-types.html возможность работы с пространственным типами данных есть.

Соответственно вам нужно либо конвертер данных postgres → mysql, либо стартануть postgres.

На мой взгляд стартануть postgres проще, драйвера в php для postgres официальные есть.