как перевести адрес в координаты
Перевести 12 тысяч адресов в координаты.
Стоит нетривиальная задача получить координаты 12 тысяч адресов по РФ.
Кто-нибудь может подсказать сервис или api, который отдаст мне нужное?
Желательно в формате, отличным от «мышкой клац-клац, педалькой паст-паст».
Нет, обычная, аля Москва, Ленинградское шоссе, д. 23 к. 2
ты только через tor делай, а то забанят
тот же яндекс не против 25000 запросов в сутки.
Так что израсходую всего 50% ресурса 😉
У 2gis есть api, в котором можно что-то такое сделать. Но это если оно поймёт твои адреса.
очевидно, что сгрузить базу себе на комп (и поставить nominatim) и запрашивать хоть по мульену труда не состваит
А проблема-то в чём? Ну делай http://maps.googleapis.com/maps/api/geocode/json?address=Москва Ленинградское. плюс фильтрация components по городу и чего там ещё у тебя есть.
Если всё только в рамках Москвы или крупных городов, то будет более-менее нормально. Правда, какой-то скрипт для проверки результатов будет нужен — местами будут получаться совсем левые адреса.
2500 запросов в день =(
В любом API у тебя будет серьезное ограничение количества запросов
Могу тыкая пальцем в небо посоветовать поставить себе какой-то OpenStreetMap локально, загрузить туда OSM нужных регионов и потом делать к нему REST Query
Разве? Вроде 25к в сутки и 100к при регистрации кредитки на аккаунт. Хотя, может это лимиты при использовании ключа из личного кабинета.
Геокодирование. Как привязать 250 тысяч адресов к координатам за 10 минут?
В этой статье я хотел бы поделиться опытом решения маленькой проблемы с большим количеством адресов. Если вы когда-либо работали с API геокодирования или пользовались онлайн инструментами, то думаю вы разделяете мою боль ожидания результата в течение нескольких часов, а то и больше.
Речь идет не о сложных алгоритмах оптимизации, а об использовании сервиса пакетного геокодирования, который принимает на вход список адресов и возвращает файл с результатами. Тем самым можно сократить время обработки с нескольких часов до минут.
Обо всем по порядку:
Предыстория
Пакетное геокодирование
Выбор провайдера пакетного геокодера
Гайд по работе с сервисом на Python
Полное описание класса Batch
Анализ результатов
Предыстория
Поступила задача – “Привязать к координатам 24 тысячи адресов”. В голову пришло только два варианта решения проблемы:
Следовательно нужно использовать REST API геокодера для написания собственного скрипта, с сохранением результатов (это не совсем легальный способ и нужно читать условия использования сервиса). Возникает новая проблема – одно дело когда мы используем адресный поиск в приложении и сразу получаем результат, но когда стоит задача обработать более десяти тысяч адресов с сохранением, работа скрипта сильно затягивается. Можно подождать час или два, но миллион адресов придется геокодировать “необъятное время”, поэтому нужно искать другое решение и оно есть!
Крупные провайдеры геолокационных сервисов, помимо обычного сервиса геокодирования, предлагают пакетный геокодер (Batch Geocoder), как раз для того чтобы за один запрос выполнить обработку большого количества адресов.
Пакетное геокодирование
Название сервиса говорит само за себя – у нас имеется пакет (например csv файл со списком адресов в виде таблицы), который мы загружаем на сервер, и он делает всю работу за нас.
Процесс пошагово выглядит так:
Следующий шаг – это выбор компании с наиболее лояльными условиями использования пакетного геокодера. Во-первых, далеко не у всех такой сервис есть, другие позволяют протестировать работу сервиса с серьезным ограничением. Также если у вас очень большие объемы, нужно обратить внимание на стоимость дополнительных транзакций, в случае превышения лимита бесплатного пакета.
Выбор провайдера сервиса пакетного геокодирования
На мировом рынке геолокационных сервисов лидирующие позиции занимают:
Я взял за основу следующие параметры для выбора провайдера:
Google Maps
Для того чтобы начать работу с геосервисами Google, первым делом требуется добавить в свой аккаунт информацию о банковской карте. Ежемесячный лимит 200 виртуальных долларов, далее идет оплата дополнительных транзакций с привязанной карты. В рамках этого лимита можно пользоваться различными сервисами, но транзакции у каждого считаются по-разному. Например одна тысяча запросов на геокодирование будет стоить 5$, но сервис построения маршрутов стоит в два раза дороже. Более детально можно ознакомиться на сайте, нас интересует лишь сервис геокодирования.
Если 200$ в месяц, то несложно посчитать бесплатное количество транзакций – 40 000 (сервис геокодирования). Пакетный геокодер среди сервисов отсутствует. Это значит, что придется писать собственный скрипт и результат будет примерно 1 адрес в секунду, а это шесть часов для 24 тысяч адресов. Чтобы ускорить процесс, можно попробовать запустить скрипт на платформе Google Cloud APIs, но я решил поискать альтернативные решения. Ограничений по количеству транзакций в день нет, поэтому все сорок тысяч можно потратить за один раз.
HERE Technologies
В прошлом Nokia Maps и в еще более глубоком прошлом Navteq, дает каждый месяц 250 тысяч транзакций бесплатно. Аналогично Google Maps это количество распространяется на все сервисы и каждый считается по-разному. При использовании бесплатного пакета, банковскую карту привязывать не надо. Если вы превысили лимит, то за каждую дополнительную тысячу транзакций необходимо заплатить 1$.
Важно наличие пакетного геокодера как отдельного сервиса, который входит в бесплатный план. Транзакции в нем учитываются по той же модели что и в обычном, то есть каждый адрес в файле, пакетный геокодер будет воспринимать за одну транзакцию.
По названию статьи понятно, что я использовал пакетный геокодер HERE, так как можно потратить все транзакции на геокодер и выполнить 250 000 операций геокодирования в месяц. Но это не единственная опция, поэтому смотрим, что есть у других компаний.
MapBox
При использовании геокодера MapBox, доступно 100 тысяч транзакций в месяц. Компания придерживается той же модели монетизации с оплатой дополнительных транзакций. Только есть интересная опция для “оптовиков” – чем больше у вас транзакций, тем меньше они стоят (конечно есть лимит снижения цены). Например от 100 тыс. до 500 тыс. дополнительная тысяча запросов будет стоить 0.75$, от 500 тыс. до 1 млн – 0.60$ и тд., подробнее можно ознакомиться на сайте. К сожалению пакетный геокодер доступен только в платном аккаунте.
TomTom
Платформа дает возможность выполнить 2500 транзакций в день, примерно 75 000 в месяц. При тестировании и разработке, ограничение по дням выглядит не очень привлекательно по сравнению с конкурентами, но оплата дополнительных транзакций наиболее гибкая. Имеется 8 вариантов оплаты дополнительной тысячи запросов и цена снижается с 0.5$ до 0.42$.
Среди сервисов есть пакетный геокодер с возможностью обработать до 10 тысяч адресов за один запрос (однако надо учитывать ограничение в день).
Yandex Technologies
Модель с ограничением транзакций по дням и у Yandex, но более лояльная 25 тысяч запросов. Если умножить это число на количество дней в месяце, то получиться внушительная цифра – 750 тысяч. На сайте представлены цены за дополнительную тысячу транзакций в рублях варьируются от 120 руб. до 11 руб.
Пакетный геокодер как сервис не представлен, поэтому добиться какой-то оптимизации не получится.
Очень заманчивый бесплатный план с 1 миллионом транзакций в месяц. Также компания начисляет каждому аккаунту 50 кредитов (примерный эквивалент 5$). Стоит отметить, что это самый лояльный план по использованию геолокационных сервисов. Также имеется сервис пакетного геокодирования, но воспользоваться им можно только при наличии корпоративного аккаунта на платформе ArcGIS Online.
Что в итоге выбрать?
Проще всего сделать выбор составив небольшую таблицу:
В итоге мой выбор пал на HERE так как для решения моей задачи это оптимальный вариант. Конечно, я сделал далеко не полный анализ, в идеале нужно прогнать свой датасет через все геокодеры для оценки качества. Плюс если у вас несколько миллионов адресов, стоит задуматься о платном пакете и тогда нужно брать во внимание стоимость доп. транзакций.
Цель статьи не сравнение компаний, а решение проблемы оптимизации геокодирования большого объема адресов. Я лишь показал ход своих мыслей при выборе провайдера сервиса.
Гайд по работе с сервисом на Python
Для начала необходимо создать аккаунт на портале для разработчиков и сгенерировать в разделе проектов REST API KEY.
Теперь можно работать с платформой. Я опишу лишь часть функционала, которым располагает пакетный геокодер HERE: загрузка данных, проверка статуса, сохранение результатов.
Итак, начнем с импорта необходимых библиотек:
Далее если не возникло ошибок, создаем класс:
То есть при инициализации классу необходимо передать собственный ключ для REST API.
Переменная SERVICE_URL – это базовый URL для работы с сервисом пакетного геокодирования.
И в jobId будет храниться идентификатор текущей работы геокодера.
Важный пункт – правильная структура данных при запросе. Файл должен содержать две обязательные колонки: recId и searchText. В противном случае сервис вернет ответ с информацией об ошибке при загрузке.
Вот пример датасета:
Функция для загрузки файла в облако:
Все достаточно просто, открываем на чтение файл со списоком адресов, формируем словарь параметров GET запроса. Некоторые параметры стоит объяснить:
Следующий шаг – проверка статуса работы. Запрос формируется аналогичным образом, только необходимо передать Id операции. Параметр action должен содержать значение “status”. Функция __stats выводит в консоль полную статистику для оценки времени завершения работы геокодера.
Одна из самых главных функций – сохранение результата. Для удобства работы лучше сразу разархивировать файл, который приходит с сервера. Запрос на сохранение файла идентичен проверке статуса просто в конце добавляем /result.
Финальная функция для парсинга ответа сервиса. Также ее задача состоит в том, чтобы сохранить идентификатор текущей задачи геокодирования:
Для тестирования работы достаточно запустить Python интерпретатор в папке со скриптом. Класс Batch находится в файле geocoder.py:
Отлично работа началась. Проверим статус:
Мы видим что обработка датасета завершена. Всего за семь минут удалось прогеокодировать 250 тысяч адресов (без учета ошибок — errorcount). Осталось сохранить результаты:
Полное описание класса Batch
Я думаю, что не помешает добавить скрипт полностью:
Анализ результатов
В итоге я прошел путь от медленно работающих онлайн приложений до сервисов пакетного геокодирования. Выбор провайдера геосервисов полностью зависит от задач, которые стоят перед вами. У меня регулярно появляются запросы на обработку большого количества адресов и подход описанный в статье помог существенно сократить время.
Надеюсь, что данная статья будет полезна и конечно я открыт к комментариям и дополнениям!
Получение координат по адресам, через сервис Google API
Программа позволяет загрузить координаты для списка адресов в таблице Excel
Исходными данными выступает столбец с адресами объектов (город, улица, номер дома)
Для уменьшения вероятности бана со сторону Google (из-за большого количества запросов),
можно задать паузу (интервал) между запросами (от 0 до 60 секунд)
К ячейкам с адресами объектов добавляются гиперссылки, позволяющие открыть найденную в Google информацию по объекту.
Есть также решение для ЯндексКарт, — если нужно, пишите на почту, прикрепив к письму файл с адресами, и указав, куда надо вставлять координаты
Комментарии
Добрый день, нажимаю начать загрузку, но в полях вместо координат нулевые значения.
работает на win10, но не работает на Win7, хотя excel с одного установщика. На mac os в Excel16 (2020) не работает, к сожалению. Пишет нет данных, как и в Win7/ Может ест у кого решение для google docs?
Есть база яндекса в эксель с гео координатами (долгота и широта) 5000 компаний, нужно найти индексы. Сколько стоит чтобы вы мне выслали такой файл уже с индексами?
Теперь без ключа из Гугла геоданные тянуть невозможно. R.I.P.
Приобрести файл без ограничений можно, оплатив мне 1000 руб удобным вам способом:
http://excelvba.ru/payments
А насчет координат Москвы, — это уж какие вы адреса пропишете, те координаты и получите после запуска макроса.
(или наоборот, адреса по координатам)
Нужен полнофункциональный файл с координатами Москвы. Как можно приобрести?
добрый день попробовал, версия еще рабочая? выдает координаты но немного не те
Мои макросы работают только в Excel под Windows
На Mac можно пользоваться под Parallels
Добрый день! На mac, версия excel 15.27 пишет: Ошибка компиляции в скрытом модуле: modMain. Как правило, эта ошибка возникает, если код несовместим с версией, платформой или архитектурой приложения. Выходит, файл несовместим с excel на mac? Или проблема в другом?
да
тот же макрос, но без ограничения по количеству строк
Если я покупаю эту программу то вы нам отправляете другой документ без ограничений?
Если покупаю, то номер адресов неограниченный? или все же есть ограничения, на пример вставить в документ 10000 адресов
Сколько стоит программа GoogleMapsAPI? работа в ексэль с адресами и координатами,
Отличная программа, вот только если вариант получения координат в системе координат Геотреста по Москве для последующего перевода в программу Автокада.
Скрипт не перетирает старые координаты в столбцах LON и LAT, из-за этого получилась подстава. Плохо. Недоработано.
Так и не получил от Вас информации по стоимости аналога с Яндексом.
Игорь, пожалуйста на пишите сколько будет стоить под заказ для Яндекса?
Нет, этот макрос только для Google
Для Яндекса по-другому делается (можем сделать под заказ). Но там может капча выскакивать (запрос текста с картинки)
Здравствуйте! Мне очень понравился Ваш макрос. Подскажите, с яндекс картами может ли работать данный макрос?
Макрос кажется частично решает мою задачу. Могу ли я с его помощью автоматически считать расстояние между двумя разными адресами по полученным координатам?
Есть набор функций и макросов Excel, определяющих по адресу координаты, полную адресную строку, а также ближайшие станции метро по яндекс картам. Пишите, если интересно.
Здравствуйте, Александр.
Нет, никакой поддержки не предоставляется
(и даже не могу гарантировать, что за денежку исправлю)
Скажите, если я куплю данный файл, могу ли я рассчитывать на бесплатную корректировку макроса в случае изменений в сервисе google?
Геокодирование адресов, легко и быстро
Геокодирование — это процесс превращения информации об адресе, городе, регионе или почтовом индексе в переносимые на карту координаты. Чтобы использовать практически любой онлайн-инструмент для картографирования, например, Google Карты, вам понадобятся данные о координатах (широте и долготе) для каждого из ваших местоположений, поэтому эта информация должна пройти процесс геокодирования.
Пакетное геокодирование с использованием нашего сервиса выглядит максимально просто — вам всего-то и нужно, что копировать и вставлять список местоположений. BatchGeo применяет в работе API Google Maps Geocoding, который обладает доступом к наиболее качественным данным. Другие сервисы требуют, чтобы вы писали код или выполняли геокодирование вручную, вводя каждый адрес отдельно, но наш сервис сам делает всё, что нужно и за несколько простых шагов. Создаваемыми на основе ваших данных картами можно делиться в закрытом режиме, публиковать их для общего доступа и даже вставлять на страницы вашего веб-сайта.
Что может быть геокодировано?
Самой типичной задачей по геокодированию является конвертирование одного или нескольких полных адресов, которые обычно содержат название города, а иногда административной единицы или страны. Тем не менее, многие системы геокодирования (в том числе и BatchGeo) способны работать с другими типами информации о местоположении. Вы можете вносить в систему названия городов (с указанием страны/региона или без него), почтовые индексы, а также названия регионов или стран. BatchGeo может распознавать названия известных достопримечательностей и наименования организаций и компаний. Большая часть запросов, которые мы вводим в Google Карты может быть использована в качестве информации о местоположении в сервисе BatchGeo.
Не считая прямого ввода непосредственных координат, наиболее точного результата можно добиться при помощи полного адреса. Геокодирование обширных географических объектов (например, целых стран) обычно приведёт к отображению точки в центре этого объекта. Как видите, даже при геокодировании адресов есть существенный разброс по точности. BatchGeo использует самые точные техники геокодирования.
Как работает адресное геокодирование?
Существуют различные типы геокодирования с разным уровнем точности. Прежде чем мы познакомимся с более точным методом, который применяется в BatchGeo, давайте рассмотрим популярные способы, которые используют многие другие сервисы геокодирования.
Геокодирование по объектам (интерполяционное)
Как следует из название этого способа, данный тип геокодирования интерполирует местонахождение адреса исходя из проверенных объектов, например, перекрёстков для улиц с координатной привязкой. Допустим, вы хотите превратить адрес ул. Зоологическая, 160 в вашем родном городе в географические координаты.
Как видите, интерполяция происходит в несколько этапов, во время которых геокодеру приходится делать определённые догадки. Догадки, основанные на информации, могут давать довольно неплохие результаты, но могут быть и такие, которые будут очень далеки от реальности. Именно по этой причине, стоит прибегать к более точным методам геокодирования.
Геокодирование по областям
В сравнении с другими методами, геокодирование по областям — метод намного проще, но для его применения требуется намного более подробная информация. Вместо интерполирования точки на основе других близлежащих объектов, геокодирование по областям требует наличия информации о границах каждой области. Другими словами, геокодер знает, где расположен каждый участок (область).
Чтобы определить расположение дома по ул. Зоологическая, 160 при помощи геокодирования по областям, геокодер будет искать данный адрес в базе данных областей. Конечно, адрес всё равно необходимо будет отделить от других улиц с таким же названием, но геокодеру не придётся интерполировать местонахождение объекта на основе данных на уровне блока. Геокодирование по областям использует данные на уровне области.
Географические координаты, получаемые в результате геокодирования по областям чаще всего являются центральной точкой области. Хотя этот метод оставляет место для неточностей, например, если дом находится рядом с границей большой области, на практике результаты данного метода геокодирования намного точнее, чем метод интерполяции.
Как работает геокодирование BatchGeo?
Наш геокодер использует наиболее точные данные для геокодирования, те же самые, что используют Google Карты. API Google Maps Geocoding применяет геокодирование по областям, обеспечивая более точные результаты. Путём быстрого обмена данными с сервисом компании Google, наша система быстро превращает ваши Excel-таблицы и другие списки адресов в интересные, простые в использовании и невероятно точные карты.
Excel Store
Получение гео-координат с Yandex карт
Краткое описание
Макрос для Excel (VBA) для быстрого и удобного получения гео-координат из Yandex. В качестве исходных данных на листе указывается список адресов. Результат (широта и долгота) будет выведен в соседние ячейки.
Подробное описание
Обратите внимание! Данный макрос функционален, но имеет ряд существенных ограничений, описанных ниже в комментариях.
На текущий момент на сайте опубликована новая версия данного макроса, существенно доработанная и улучшенная: ссылка на страницу
Наверное многие из знают, что такое карты Yandex и Google. Может быть у вас даже были (или есть) задачи, когда по списку адресов нужно получить координаты точек на карте (широту и долготу)?
Специально для данной цели нами был написан макрос в экселе для получения координат с Yandex карт.
Работать с макросом очень просто:
При желании, макрос несложно доработать на обратный порядок, то есть по списку координат получать адреса.
Также обратите внимание, что одни и те же адреса могут выдавать немного разные координаты в Yandex и Google. Отличие не большое, но оно есть и, возможно, его стоит учесть. Поэтому, если этот момент вам принципиально важен, обязательно вручную проверьте результат в разных поисковых системах.