У меня есть база данных, которая имеет 300 000 адресов, которые должны быть показаны на карте. Я знаю, если я геокодирую все адреса, это будет слишком дорого для меня. Поэтому мне было интересно, можно ли геокодировать адрес на лету / в реальном времени, когда пользователь выбирает адрес (адрес свойства), он выполняет поиск в базе данных, а затем геокодирует адрес и затем сопоставляет его с другие атрибуты.
Было бы очень хорошо, если бы вы могли поделиться кодом, концепцией или чем-то еще. Кстати мой бэкэнд на mysql поддерживается Joomla.
google-maps
geocoding
php
mysql
google-maps-api
user1089553
источник
источник
Ответы:
Мехул, я работал в индустрии верификации адресов с компанией SmartyStreets. Существует множество сервисов геокодирования, но лишь немногие будут поддерживать пакетную обработку с требуемым объемом. (Google и другие не разрешают массовое использование их API или сохранение / кэширование результатов.)
Если вы зайдете в базу данных MySQL и выполните экспорт таблицы, содержащей адреса, сохраните ее, например, в виде CSV-файла. Затем вы можете обработать его с помощью веб-инструмента SmartyList или инструмента командной строки . Как я уже сказал, есть несколько сервисов, но вы, я полагаю, захотите что-то, что также проверяет наличие адресов (отсюда и причина геокодирования) - если адрес неправильный или неполный, то же самое можно сказать и о результатах геокодирования. , Только несколько служб делают это.
LiveAddress - это сервис, сертифицированный CASS USPS. Есть некоторые из них, так что сделайте свое исследование, но вы хотите что-то "на лету" / быстро и недорого, поэтому я снова рекомендую LiveAddress. Он будет не только проверять адрес, но и делать то, что вам нужно, что дает информацию о широте и продолжительности, а также точность результатов геокодирования. Все это основано на веб-технологиях и будет обрабатывать десятки миллионов записей в кратчайшие сроки (см. Этот вопрос в качестве справочного материала ).
Если в дальнейшем вам необходимо геокодировать адреса при взаимодействии пользователей, LiveAddress также имеет версию API, которая может подключаться практически ко всему, а также поддерживает пакетную обработку на лету, но оплачивается как подписка, а не единовременно. оплата.
источник
Если вам нравится Python, вы можете использовать GeoPy API в сочетании с привязками GDAL Python или Fiona и создать очень простой скрипт, подобный этому, для преобразования адресов в точечный шейп-файл.
Это позволит определить местоположение файла с именем «address_to_geocode», создавая выходной шейп-файл с именем «my_output.shp» в папке my_output:
Файл должен содержать строку для одного адреса, например:
Здесь я использую Google API, но с GeoPy очень просто переключаться на разные API, такие как Yahoo !, GeoNames или MapPoint .
источник
Другой вариант решения вашей проблемы - импортировать ваш набор данных в таблицы слияния и установить поле адреса в качестве местоположения. Затем он будет геокодировать точки автоматически. После этого вы можете экспортировать данные в формате KML.
Или ... в качестве альтернативы, вы можете написать php-скрипт для использования геокодера Yahoo, который имеет ограничение в 50 000 записей, поэтому рано или поздно у вас будут все геокодированные точки в вашей базе данных.
Я надеюсь, что это помогло!
источник
безусловно, самый лучший и простой геокодер, который я использовал, - https://pypi.python.org/pypi/geocoder/1.8.0 карты bing, карты Google, OSM и т. д.
источник
Возможно, не самый лучший ответ на ваш вопрос, но вы можете попробовать BatchGeo. Бесплатная версия заставила бы вас сильно страдать, но все же была достаточно хороша для моей работы. Хотя мы купили про версию.
Хитрость для получения координат из файла KML состоит в том, чтобы импортировать его в ArcGIS позже.
источник
Я успешно использую Geopy, который использует веб-сервис геокодирования Google. Он отлично работает до 2 тыс. Баллов в сутки.
источник
Матей, это потому, что Google API позволяет тянуть до 2,5к в день.
Что касается решения Geo, пакет пока не поддерживается. Это связано с тем, что из моего обзора кода geo python кажется, что он открывает соединение каждый раз, когда запрашивает новый кординат, 300k, вероятно, зависнет навсегда (возможно, с ошибкой 400).
Игра с Полигонами должна помочь, но это зависит от того, какая у вас игровая площадка, если это 1 страна или n стран.
Для 1 страны полигоны должны работать довольно хорошо.
Для n стран решение не будет работать, так как сбор будет занимать больше времени, когда вы добавляете другую страну. Лучший способ сделать это - ленивая нагрузка.
=> начните с идеи многоугольника, каждая вещь в другой стране, создайте большую таблицу базы данных для хранения данных, в конечном итоге вы будете хранить те данные, которые вам нужны, я полагаю.
источник
Если вы хотите сделать это с PHP - MySQL, вот решение, которое сработало для меня:
источник
Попробуйте это геокодирование API . Это бесплатно для небольшого использования, но если вы хотите больше, они заставляют вас платить. Однако это дешево, и вы можете легко это обработать, я через них обрабатываю миллионы в месяц.
источник
Вы можете сохранить свои данные в виде текстового файла (одна запись на строку), а затем выполнить геокодирование пакета с помощью этого сервиса: http://geocode.xyz/batch (работает для большинства европейских стран)
или вы можете написать свой собственный код для доступа к API REST / JSON: http://geocode.xyz/api (это бесплатно для неограниченного поиска)
источник
Используйте инструменты картирования (наведение карты | инструмент пакетного геокодирования ( http://www.mappointing.com/ )). В этом инструменте вы можете обрабатывать данные с помощью бесплатного API-ключа карты Google. А также этот инструмент обеспечивает расчет расстояния и поиск места.
источник