Получение гео-координат с Yandex карт
Краткое описание
Макрос для Excel (VBA) для быстрого и удобного получения гео-координат из Yandex. В качестве исходных данных на листе указывается список адресов. Результат (широта и долгота) будет выведен в соседние ячейки.
Подробное описание
Обратите внимание! Данный макрос функционален, но имеет ряд существенных ограничений, описанных ниже в комментариях. Наверное многие из знают, что такое карты Yandex и Google. Может быть у вас даже были (или есть) задачи, когда по списку адресов нужно получить координаты точек на карте (широту и долготу)? Специально для данной цели нами был написан макрос в экселе для получения координат с Yandex карт. Работать с макросом очень просто: При желании, макрос несложно доработать на обратный порядок, то есть по списку координат получать адреса. Также обратите внимание, что одни и те же адреса могут выдавать немного разные координаты в Yandex и Google. Отличие не большое, но оно есть и, возможно, его стоит учесть. Поэтому, если этот момент вам принципиально важен, обязательно вручную проверьте результат в разных поисковых системах.
На текущий момент на сайте опубликована новая версия данного макроса, существенно доработанная и улучшенная: ссылка на страницу
Подлечил ваш калькулятор
User defined type not defined?
Как подлечить?
Надо подключить библиотеку Microsoft XML v3.0 вместо Microsoft XML v6.0, которая включена по умолчанию на Office.
Для этого в редакторе MS VBA выберите Tools > References и найдите в списке Microsoft XML v3.0.
Скорее всего, зависит от версии вашего офиса. У меня на Excel 2007 и Excel 2013 код из файла работает без каких-либо модификаций. Но подключаемые по умолчанию библиотеки, конечно, могут отличаться у разных пользователей.
Еще, как вариант, можно
заменить на
Тогда в MS VBA «Tools > References» вообще можно ничего не подключать.
На днях выложу обновленную версию макроса, без привязки к References + с возможностью выбора режима работы: Yandex или Google сервис использовать для анализа.
Выдает ошибку Run-Time error 13.
Я в этом деле совсем 0.
Подскажите как это работает?
Сначала макрос выдавал ошибку User defined type not defined. После замены Microsoft XML v6.0 на Microsoft XML v3.0, как описано выше, появилась ошибка Run-Time error 13 и жёлтым выделяется строка GlobalArray(i, 2) = tmpArray(2).
Скажите, утилит полностью бесплатен? Может быть есть какой то срок работы или иное ограничение?
Можно ли получить бан от Yandex?
Подскажите пожалуйста, что в макросе необходимо доработать, чтобы произвести обратную операцию — получение адреса по введенным координатам?
Заранее благодарен!
Первое, это изменить строку запроса (вместо адреса передавать координаты):
И немного доработать функцию ParserXML(), чтобы она корректно извлекала полученные значения адресов.
Можно все-таки немного про то как и что поменять в функции ParserXML(), чтобы она корректно извлекала полученные значения адресов???
Я не программист, а очень нужна эта обратная функция
Заранее благодарен!
Я же, в свою очередь, в ближайшее время (на этой недели) таки найду время и доработаю макрос.
Пишет run-time error '13' type mismatch
Выделяет жёлтым строку: GlobalArray(i, 2) = tmpArray(2) 'адрес по версии яндекса
Можете помочь?
виндоус 10, 32 разрядная опер.система процессор x64, Офис 2007
ПОЖАЛУЙСТА!
То же самое: месяц назад всё работало, сегодня нет.
виндоус ХР, 32, офис 07
Спасибо
: tech.yandex.ru/maps/keys/
Ключик необходимо вставлять в строку — замените набор символов на свой ключ и всё заработает!
Кто скачал файл впервые
заменить на
Владимир, а вы код здесь не выложите, посмотреть, может у меня чё не так.
Бывают адреса, которые не читаются и на таких действительно остаются пустые строчки. Но такое очень редко
Помогите разобраться…
Ввод валидного API ключа действительно помог. Заметил в файле «GeoYandex, v.2.xlsb» ошибку: столбец C — должен быть «долготой», столбец D — «широтой».
run-time error '13' type mismatch
run-time error '13' type mismatch
Помогите пофиксить
Но это совсем в другой стороне… КАК БЫТЬ?
Как решить эту неточность?
И 1000 строк геокодер просматривает 10-15 минут. Можно ли ускорить работу геокодера регулируя количество запросов по 1 адресу?
Помогите пж.
Чтобы одномоментно делать много запросов, нужно другое решение (не vba).
Ключ поменял,Dim XMLDoc As New MSXML2.DOMDocument, nodeList As MSXML2.IXMLDOMNodeList заменил на
Dim XMLDoc As Object, nodeList As Object
Set XMLDoc = CreateObject(«MSXML2.DOMDocument»)
Все равно желтым посвечивает:
GlobalArray(i, 2) = tmpArray(2) 'адрес по версии яндекса
Если всё-равно не работает, уточните адрес, который пытаетесь геокодировать.
Подскажите в чем дело.
Версия существенно доработана и улучшена. Все комментарии в данном посте постарался максимально учесть.
Ссылка на страницу: excelstore.pro/examples-of-work/internet/get-the-address-and-coordinates-of-yandex-and-google.html
Скачал последнюю версию файла: ошибка уже не возникает, но в результате выдаётся «нет данных».
Как это можно поправить?
Спасибо.
Актуальная версия макроса здесь: excelstore.pro/examples-of-work/internet/get-the-address-and-coordinates-of-yandex-and-google.html
Об этом сказано и в последнем комментарии на данной странице и в тексте самого описания.
Я про версию 3.
(Этот вариант не выдает данных)
Если макрос пригодился, буду признателен, если поделитесь ссылкой на наш сайт или на указанную страницу с программой (в соц. сетях, на форумах и тд.)
ОЧЕНЬ ВЫРУЧИЛИ!
Попробуйте более новый макрос в соседнем посте: excelstore.pro/examples-of-work/internet/get-the-address-and-coordinates-of-yandex-and-google.html
? apikey= & origins=<lat1,lon1|lat2,lon2|...>
& destinations=<lat1,lon1|lat2,lon2|...>
& [mode=]
& [departure_time=]
Как реализовать это в эксель помогите пожалуйста
Но самое сложное в другом. API Яндекс.Маршрутизации платный. Если у вас таковой доступ есть, то все решается просто (как и указал выше). В ином случае сделать быстро и удобно через этот API — никак.
Тогда, как вариант, делать отрисовку в браузере и потом из браузера выдергивать полученный результат. Но это довольно-таки сложно. Проще найти альтернативный сервис, который отдает результат сразу в подходящем нам формате (json/xml). Таких сервисов не много, но они есть. Если, конечно, у вас нет привязки конкретно к яндексу.
Если километраж нужен по прямой, то расчет можно сделать и исключительно математически, предварительно получив координаты двух точек макросом из этой темы.
Если же маршрут нужен с учетом автодорог, то тогда одной математики мало и уже надо подключать какой-либо API.
так не работает
В данном случае можно не регуляркой, а простым поиском. Например, через функции Instr и Mid.
Утром ещё работал. Может апиха у яндекса изменилась?
Способ решения 2 — Если не помогло, вернитесь к варианту #1 еще раз.
В описании сказано — «На текущий момент на сайте опубликована новая версия данного макроса, существенно доработанная и улучшенная». И ссылка там же приведена.
А даже если бы дело было в API ключе, вы всегда его можете заменить на свой.
У меня сработала только альтернативная 4-тая версия, где необходимо вставить ключ Яндекс API
yadi.sk/d/XH8ZoGu8eijqHA
Но главное, что сработала =)
В ближайшие дни скорректирую описание в данной теме, чтобы не люди не путали версии макроса.
Но мне кажется что макрос работает как то не так, после нажатия на кнопку получить координаты, практически сразу все колонки заполняются «нет данных» и выскакивает сообщение «данные успешно загружены». Что то здесь не так?
Пишет нет данных
PS. 4 версия работает, у кого не работает — проверьте ключ.
Не знаю, причем тут локатор. Макрос совсем для другого предназначен.
Используйте ключ от «JavaScript API и HTTP Геокодер» и все работает.
Хотя в принципе, это скорее исключительная ситуация. Разве что вы не пытаетесь распарсить более 32000 адресов (лимит переменной Integer).
Почему не работает именно у вас — надо смотреть возникающие при работе макроса ошибки (отключить в коде макроса обработку ошибок и смотреть, на какой строке будет ошибка и ее текст).
Под Mac макрос изначально не был заточен. Там совершенно другая архитектура кода должна быть. Под google docs тем более — надо полностью переписывать код на JS.
Познакомился с Вашим макросом. Очень полезная вещь!
Однако для решения задачи, в которой мог бы его применить лично я, необходимы помимо координат ещё и данные о районе города и округе города. Можете ли подкорректировать Ваш макрос для решения этой задачи?
Воспользовался вашим файлом и столкнулся с небольшой проблемой. Не малую часть адресов яндекс либо не воспринимает — выдает пустые ячейки в столбцах, либо выдает неверный адрес -иную страну или другой конец нашей необъятной, после проверки вручную на яндекс картах, он распознает корректно эти адреса.
Это как то можно исправить?
Пустые обычно выдает, когда по вашему ключу превышен лимит либо адрес не очевиден для распознавания.
Как вариант, попробуйте для точности определения, перед адресом указывать страну. Как пример: Россия, г. Москва, ул. Кудрявцева, д…
Если все-равно будет криво определять, но при этом вручную нормально, пришлите мне пару таких примеров.
Ошибка
User-defined type not defined
В tools, как описано выше, захожу, а там references не подсвечиваются, не могу нажать, кнопка неактивна*(((
Как исправить?
Давно уже не публиковал что-то новое на сайте, как-то все времени нет. Но рад, что ранее сделанные работы полезны и востребованы.