Всем привет! Столкнулся с такой проблемой (скорее всего простой).
Мне нужно, чтобы пользователь мог указать страну, область и город, где он проживает, а так же я мог сам определить (например по IP) примерное расположение.
Я взялся искать БД стран и городов и нашел с 2млн городов (кто-то парсил из вконтакте).
Но тут проблема, города есть, но определить местоположение невозможно... И даже если я буду использовать сторонние сервисы типа GeoIP, то все равно не не смогу связать найденый город с таким же как у меня в базе. У них же для этого должен быть по крайней мере одинаковый ID или еще что-то...
Я взглянул на БД GeoIP, которая, стоит 300$, но я не уверен поможет ли она мне. Ведь это стороння база, поэтому мне придется, по сути, спарсить её в MySql, чтобы можно было вывести например город пользователя с помощью JOIN. Но я понимаю что это бред. Опять же... если придется указать город на карте google, то как указать именно этот город, ведь в google свои идентификаторы, а у GeoIP свои.
В общем кромешная тьма у меня...
Опишите пожалуйста логику работы с такими данными? Откуда брать названия городов, как их унифицировать, где хранить и как привязать к сущностям на сайте, в приложении и при этом имметь возможность интегрировать с такими сервисами как google карты или яндекс карты? Ведь, если в будущем мне придется поменять карту, то мне нужно будет как-то определить что это за город и какой у него идентификатор именно в yandex картах.
Начни с GeoLite2 и API отсюда GeoIP2-PHP, там прямо есть пример с названием "City Example", в котором в том числе есть latitude/longitude (долгота/широта) с помощью которых можно координаты перенести на любую карту.
Спасибо за отклик!
Т.е. логика должна быть такая?:
Пользователь в ходит на сайт, определяем по IP города, берем данные о городе области и стране из GeoIP, сохраняем их таблицы countries, regions, cities в MySQL. У нас получится уникальный идентификатор каждой страны, региона и города. Привязываем их к пользователю и при необходимости вывода JOIN-им к основному запросу.
Но тут опять же - проблема. Если предложить пользователю выбрать город из списка самостоятельно, то придется использовать, какой-то другой сервис, т.к. GeoIP не отдает список городов определенной страны или области. Поэтому получив автоматически по IP город и сохранив его в базу, а потом позволив выбрать город из другой базы (сервиса) - мы сохраним второй такой же город в базе MySQL. А чтобы проверить его существование в моей БД MySQL - нужно его как-то унифицировать. Координаты? Может быть... Но ведь нет гарантии что координаты города в GeoIP точ в точ такие же как координаты этого же города, например в Goole Geocoding