Яндекс-карта (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 не будет опубликован. Обязательные поля помечены *