Яндекс-карта (API 2) + геокодер Яндекс


Пример использования Яндекс-карт с возможностью поиска по строке или получением адреса по клику на карте

Идеей послужила публикация Яндекс-карты: примеры работы с API 2.0. Но «прикручивание» этого примера к тонкому клиенту вызвало огромное количество проблем. После долгих танцев с бубном, мной был написан небольшой  фреймворк, который практически без проблем позволяет использовать Яндекс-карту в тонком клиенте. В результате получилось следующее:

  1. Отключены сообщения об ошибках на стороне карты
  2. При открытии, карта центрируется по ip клиента.
  3. Есть возможность управлять типом карты и элементами управления на карте из 1С (последнее состояние запоминается).
  4. По строке поиска отбираются точные (и не только) объекты на карте, которые отображаются на карте и в списке.
  5. Все метки на карте перемещаемые. При перемещении метки, также изменяется соответствующий объект в списке.
  6. К стандартному набору кнопок добавлена «Информация об объекте». В этом режиме курсор мыши приобретает вид стрелки со знаком вопроса и по клику на карте отображается информация об объекте (идея из примера в API 1.x). Этот объект можно добавить в список выбранных.

 

Цвета в списке выбранных объектов:
— черный – адрес найден по строке поиска точно;
— серый – адрес найден по строке поиска не точно;
— коричневый – адрес выбран на карте или получен при перемещении маркера в указанное место.

Цвета маркеров:
— черный – объект найден по строке поиска;
— коричневый – адрес выбран на карте или получен при перемещении маркера в указанное место;
— красный – активный маркер (соответствует текущей строке с списке объектов).

 

Обработка использует функции из БСП (конфигурации: УНФ, БП 3, УТ 11; примеры использования БСП с диска ИТС).

Если карта не работает как надо (или вообще не реагирует ни на какие действия пользователя), то нужно очистить кеш 1С (запуск с ключом /ClearCache не всегда помогает — приходится удалять полностью папки с кешированными данными; почему — остается загадкой). Также, рекомендую очистить кеш, если вы уже использовали какие нибудь другие обработки с Яндекс-картой.

Тестировал на 1C 8.2.19.68 и 8.3.3.721. На web-клиенте и на linux-платформах не тестировал. Буду признателен, если пришлете отзывы.

Данная обработка представлена как пример для ознакомления с API Яндекс-карт (согласно Пользовательскому соглашению).

44 Comments

  1. maxx

    Можете подсказать возможно ли по адресу контрагента (например, фактический адрес контрагента) отобразить его на карте? Умеет ли такое делать Yandex

    Reply
  2. pimenushka

    Если адрес указан корректно, т.е. область, город, улица, дом то проблем нет. По крайней мере для google. Не думаю, что в яндексе хуже.

    Reply
  3. maxx

    (2) pimenushka, а как понять что адрес указан правильно с точки зрения карт?

    Reply
  4. ilyav

    (3) maxx, http://maps.yandex.ru/ написать его тут

    Reply
  5. krosaf4eg

    на веб-клиенте карта отображается, но кнопки «Добавить», «Показать все», «Обновить» и т. д. не доступны. При переключении типа карты, или элементов управления, или при клике на карту выскакивает ошибка «Метод объекта не обнаружен (eval)»

    вылетает на строке

    ПоследняяКоманда = Элементы.ЯндексКарта.Документ.parentWindow.eval(«theMap?theMap.getLastEvent():null»);

    в процедуре ЯндексКартаПриНажатии(…)

    Reply
  6. krosaf4eg

    решил проблему с помощью трюка, описаного здесь и использованного здесь

    Reply
  7. pimenushka

    (3) maxx,названия географических объектов должны соответствовать названиям на яндекс-карте

    Reply
  8. nastyY

    всеже в гугл более точно роботает . я бы выбрал гугл

    Reply
  9. OrsoBear

    Нужная обработка. Забираю!

    Reply
  10. BenGunn

    (6) krosaf4eg, А можно глянуть на код?

    Reply
  11. krosaf4eg

    (10) BenGunn, ой, а уведомления-то не приходят на почту о новых комментариях. Некропостинг получается, но на всякий случай оставлю. Я встраивал эту обработку в конфу, поэтому код еще тот говнокод сильно почикан, но, надеюсь, суть уловите, тем более, что я закомментировал первоначальный код в модуле форму Оффтоп для всех 1Сников: пользуйтесь инструментом Сравнить по содержимому в файловом менеджере Total Цоммандер

    модуль формы, макет HTML

    Reply
  12. rsergio

    Хорошо сделано. Только не нашел возможности получения GPS координат.

    Reply
  13. AlexandrIII

    (12) rsergio, есть там в структуре «ОтветГеокодера».

    Reply
  14. BigB

    Валится по ошибке:

    {Форма.Форма.Форма(373)}: Поле объекта недоступно для записи (ЭтотОбъект)

    ЭтотОбъект = РеквизитФормыВЗначение(«Объект»);

    Платформа: 8.3.5.924

    Конфигурация: Библиотека стандартных подсистем», редакция 2.2 (2.2.3.14)

    Ошибку исправил так:

    &НаСервере
    Процедура ИнициализацияЯндексКарты()
    ДвоичныеДанныеКартинки = РеквизитФормыВЗначение(«Объект»).ПолучитьМакет(«ПоказатьВсе»);
    НавигационнаяСсылкаКартинки = ПоместитьВоВременноеХранилище(Новый Картинка(ДвоичныеДанныеКартинки));
    ЯндексМакет = РеквизитФормыВЗначение(«Объект»).ПолучитьМакет(«HTML»);
    ЯндексКарта = СтрЗаменить(ЯндексМакет.ПолучитьТекст(), «%КартинкаИнформация%», НавигационнаяСсылкаКартинки);
    КонецПроцедуры
    
    Reply
  15. BigB

    Протестировал в вебе.

    Результат — не работает.

    А жаль.

    Reply
  16. foralex2004

    На web-клиенте не работает.

    Reply
  17. foralex2004

    экран

    Reply
  18. k9260130000

    Перестала работать обработка, запускается но элементы управления (кнопки,масштабирование) не видны. Метки при поиске также проставляются. Причем неделю назад все работало на тех же конфигах. Почините пожалуйста, ибо обработка понравилась — хотел на ее базе формирование маршрутных листов для курьеров запилить.

    Reply
  19. draspopov

    Да, работало и перестало.

    Reply
  20. rabanik

    Добрый день, а может кто нибудь подсказать почему перестало работать? Спасибо, большое!

    Reply
  21. BenGunn

    Добрый день всем!

    Перестали работать все скрипты яндекс-карт 2.0 и 2.1. Причем, инициализация карт все же происходит. Причину объяснить не могу. Если кто-нибудь что-нибудь узнает, сообщите.

    Reply
  22. oldfornit

    (21) BenGunn, если не ошибаюсь, то это произошло из-за смены API

    Reply
  23. BenGunn

    Насколько я понял, то да, из-за смены API .

    Попытаюсь объяснить. В качестве ядра html-поля 1С для windows взят IE7. Он поддерживает не все инструкции html5. Видимо, одно изменение в API (как мне кажется в методе onclick) повлекло за собой полную неработоспособность яндекс-карт в 1С. Мнение сугубо личное и, возможно, ошибочное. Проверить мою догадку могут те, кто работает на линукс-платформе (ядро html-поля — mozila).

    Reply
  24. Rustavelli

    Добрый день! Тоже ищу решение проблемы, в один прекрасный день карта перестала работать, выходит вот такая ошибка:

    Reply
  25. cmax

    (23) BenGunn, а есть какие-нибудь варианты исправить это?

    Reply
  26. oldfornit

    (25) cmax,

    1. получить ключ для API

    2. заключить лицензионный договор с яндексом

    ну и помнить о том, что бесплатный API запрещен к использованию в 1с

    Reply
  27. BenGunn

    (26) oldfornit, спасибо за совет. Сам проверил? Работает?

    Но, на самом деле, от яндекса надо отходить. Я сейчас буду юзать OpenStreetMap

    Reply
  28. Strellson

    Можно просто загружать последний работоспособный вариант API — у меня вновь стало работать:

    <script src=»https://api-maps.yandex.ru/2.1.34/?lang=ru_RU» type=»text/javascript»></script>

    Reply
  29. oldfornit

    (27) BenGunn,нет, не проверял. Просто наткнулся случайно

    Reply
  30. cmax

    (28) Strellson, не помогает..

    Что именно нужно сделать?

    Попробовал заменить на предыдущую версию 2.0.41 — результат тот же.

    Попробовал ваш вариант с 2.1.34 — карта вообще не прорисовывается.

    Reply
  31. Strellson

    (30) Действительно… сейчас попробовал — карта не отрисовалась… Еще вчера все работало на ура

    Со второго раза отрисовалась — что-то ругнулась на сертификат и нарисовалась. Все работает

    Reply
  32. rabanik

    попробую, тоже карта перестала работать.

    Reply
  33. cmax

    (31) Strellson, у меня вместо карты — серое поле( так и не прорисовывается.. кроме «<script src=»https://api-maps.yandex.ru…» еще что-нибудь меняли?

    Reply
  34. Smaylukk

    (33) cmax, попробуйте прописать в макете яндекс-карты поддержку IE8, если не прописано. У меня работает и открывается.

    В области «HEAD», <meta http-equiv=»X-UA-Compatible» content=»IE=8″/>.

    Reply
  35. cmax

    (34) Smaylukk, да, отображаться стала! НО постоянно при работе вываливается ошибка (

    Reply
  36. cmax

    (34) Smaylukk, если такой ошибки нет как у меня — можете скинуть, пожалуйста, свой макет HTML для карты. возможно я где-то что-то наменял и теперь просто запутался.. моя почта max.max@bk.ru

    Reply
  37. Rustavelli

    (34) Smaylukk, мне тоже скиньте пожалуйста на 6981873@gmail.com

    Reply
  38. lextor

    Кто-нибудь решил проблему эту проблему?

    Reply
  39. janibeg

    скиньте пожалуйста рабочую версию на angel_link соба4ка mail.ru

    Reply
  40. tdkintel

    Здравствуйте. И можно мне тоже рабочую версию пожалуйста night.tdk соба4ка gmail.com

    Reply
  41. user1131763

    Обработка вообще не запускается, никак не реагирует. Кэш почистил. В чем может быть проблема ?1С:Предприятие 8.3 (8.3.13.1513)

    Reply
  42. BenGunn

    Предполагаю, что «кризис назрел». Дело в том, что api карт ориентирован исключительно для web приложений и сервисов. Яндекс периодически вносит какие-то изменения в api, которые делают его неработоспособным в десктопных приложениях. Такое уже было не раз. Раньше я следил за этим, но, в связи с тем, что я ушел из логистики, этот процесс перестал иметь место. Есть готовая карта на api 2.1. Но времени публиковать ее сейчас просто нет

    Reply
  43. vynt

    Win 8 и 10 политика безопасности блокирует доступ к доменам третьего уровня (кроме тех, которым MS доверяет). Нужно просто в IE добавить исключение для сайтов *.yandex.ru

    p.s.

    можно напрямую в реестре, но путь не помню

    Reply
  44. zharkin

    (43) Добавление исключения для сайтов *.yandex.ru помогло?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *