Страницы: 1
RSS
Проблема с получением геоданных с карты yandex: вместо нормального адреса записываются "иероглифы
 
Доброго времени суток, знатаки!

Прошу помощи с кодом!

Буквально 3 недели назад программка работала как часы и проблем не было. На листе "Данные" пользователь задает адреса объектов недвижимости, жмет кнопку и появляется карта, на которой отмечены все объекты метками: объект оценки - красная метка на карте, объекты-аналоги - синие метки с номерами на карте. Так программа проработала более 2-х лет. Недели 3 назад программа стала работать нестабильно: все метки стали вешаться на один адрес (см. файл).
Начал разбираться с самим кодом и заметил, что на строке кода:
Код
 ActiveWorkbook.XmlMaps("ymaps_карта").Import URL:=Path
в ячейку А1 листа temp вместо нормального адреса записываются "иероглифы". Из-за этого все координаты становятся одинаковыми для всех объектов недвижимости из перечня заданных.
[img]file:///C:/Users/skapr/OneDrive/Рабочий%2520стол/рис1.jpg[/img]
Не могу понять с чем это связано. Правильно ли я выявил ошибку? Как можно устранить эту ошибку? На что обратить внимание?

Во вложении сама программка.
Изменено: samik - 24.09.2019 22:17:12
 
Здравствуйте.
Никто не отменял кодирование кириллицы в запросах.
 
Очень круто!! Работает!
Doober, поделитесь пожалуйста, как вы это сделали?
 
Найдите отличие в кодах файлов.
 
Нашел!
Код
Path = "https://geocode-maps.yandex.ru/1.x/?geocode=" & RussianStringToURLEncode(Sheets("data").Cells(CountAdressB, 3)) & "&ll=49.106324,55.801452&results=1"
Код
Function RussianStringToURLEncode(ByVal txt) As String
    For i = 1 To Len(txt)
        l = Mid(txt, i, 1)
        Select Case AscW(l)
        Case Is > 256: t = "%" & Hex(AscW(l) \ 64 + 192) & "%" & Hex(8 * 16 + AscW(l) Mod 64)
        Case 32: t = "+"
        Case Else: t = l
        End Select
        RussianStringToURLEncode = RussianStringToURLEncode & t
    Next
End Function
Спасибо за помощь!
 
Доброго времени суток!

Опять возникла проблема с тем же файлом (во вложении).
На строчке кода возникает ошибка (Ошибка разбора XML):
Код
ActiveWorkbook.XmlMaps("ymaps_карта").Import URL:=Path
Скрин ошибки поместил во вложение.
Скорее всего опять возникает какая-то проблема при формировании ссылки:
Код
Path = "https://geocode-maps.yandex.ru/1.x/?geocode=" & RussianStringToURLEncode(Sheets("data").Cells(CountAdressB, 3)) & "&ll=49.106324,55.801452&results=1"
До этого было понятно, что проблема с кодировкой, а сейчас совсем не могу понять с чем связана ошибка.

Прошу помочь разобраться с этой ошибкой.
Изменено: samik - 01.10.2019 21:00:12
 
К сожалению пока решения не нашел!  
 
Что получаете в ответ.
<error>
<statusCode>429</statusCode>
<error>Too Many Requests</error>
<message>You are making too many requests to Yandex Maps API Service. Check Terms of Service (see https://yandex.com/legal/maps_api)
</error>
Шара закончилась, нужен ключ  для апи карт яндекса
 
Doober,

Я через кабинет разработчик сделал ключ API (бесплатный с ограничениями (25 000 запросов в сутки)):
5d13d5bf-f35d-4534-800e-9a36a986e3ca
Или нужен платный ключ?

Почитав информацию по ссылке https://tech.yandex.ru/maps/geocoder/doc/desc/concepts/input_params-docpage/ пытался переделать свою ссылку, но, честно говоря, не понятно пока как этот ключ правильно использовать.

Я правильно понимаю, что надо изменить ссылку в коде?
Код
Path = "https://geocode-maps.yandex.ru/1.x/?geocode=" & RussianStringToURLEncode(Sheets("data").Cells(CountAdressB, 3)) & "&ll=49.106324,55.801452&results=1"
Или нет?

По ссылке выше предлагают такой вариант ссылки:
https://geocode-maps.yandex.ru/1.x/?apikey= <Ваш API-ключ>&geocode= "адрес"

Я попробовал изменить код:
Код
Path = "https://geocode-maps.yandex.ru/1.x/?apikey=<5d13d5bf-f35d-4534-800e-9a36a986e3ca>&geocode=" & RussianStringToURLEncode(Sheets("data").Cells(CountAdressB, 3)) & "&ll=49.106324,55.801452&results=1"
Но, пока ошибка вылетает.
Я двигаюсь в правильно направлении?

Еще вопрос по данной теме размещен тут: ссылка
Изменено: samik - 03.10.2019 22:28:18
 
Благодаря Doober получилось решить задачу!

Через кабинет разработчика Yandex я создал ключ (JavaScript API и HTTP Геокодер) (см. мое сообщение №9 выше).
Затем, я его вставил в ссылку в код (правильный вариант):
Код
Path = "https://geocode-maps.yandex.ru/1.x/?apikey=5d13d5bf-f35d-4534-800e-9a36a986e3ca&geocode=" & RussianStringToURLEncode(Sheets("data").Cells(CountAdressB, 3)) & "&ll=49.106324,55.801452&results=1"
Моя ошибка заключалась в том, что я вставил ключ с кавычками <5d13d5bf-f35d-4534-800e-9a36a986e3ca>, а надо было без: 5d13d5bf-f35d-4534-800e-9a36a986e3ca.

В настоящий момент все работает!
Спасибо, Doober!
 
Интересно, как долго Яндекс будет такую лазейку держать?
Учитывая:
3. Данные, полученные средствами API, должны быть показаны на карте Яндекса
4. Запрещается сохранять или изменять данные, полученные средствами API
Данные, полученные средствами API, нельзя сохранять. Например, нельзя один раз получить данные геокодера и затем сохранить их для дальнейшего использования.
Кто-нибудь это читает?
 
Цитата
Андрей VG написал:
Кто-нибудь это читает?
Привет Андрей.
Я читаю :) .Есть сайт на бесплатном хостинге, одна страница с картой.
У меня все по правилам. :D  
Страницы: 1
Наверх