gifts2017

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

Опубликовал Олег Цыганков (BenGunn) в раздел Программирование - Работа с интерфейсом

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

Идеей послужила публикация Яндекс-карты: примеры работы с 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 Яндекс-карт (согласно Пользовательскому соглашению).

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Яндекс-Карта
.epf 23,02Kb
19.03.14
544
.epf 23,02Kb 544 Бесплатно

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Maxim Goncharov (maxx) 04.02.14 22:45
Можете подсказать возможно ли по адресу контрагента (например, фактический адрес контрагента) отобразить его на карте? Умеет ли такое делать Yandex
2. Igor Kitaev (pimenushka) 04.02.14 22:50
Если адрес указан корректно, т.е. область, город, улица, дом то проблем нет. По крайней мере для google. Не думаю, что в яндексе хуже.
3. Maxim Goncharov (maxx) 05.02.14 10:19
(2) pimenushka, а как понять что адрес указан правильно с точки зрения карт?
4. Илья Воробьев (ilyav) 05.02.14 16:13
5. krosaf4eg (krosaf4eg) 08.02.14 18:29
на веб-клиенте карта отображается, но кнопки "Добавить", "Показать все", "Обновить" и т. д. не доступны. При переключении типа карты, или элементов управления, или при клике на карту выскакивает ошибка "Метод объекта не обнаружен (eval)"

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

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

в процедуре ЯндексКартаПриНажатии(...)
6. krosaf4eg (krosaf4eg) 08.02.14 20:58
решил проблему с помощью трюка, описаного здесь и использованного здесь
7. Igor Kitaev (pimenushka) 10.02.14 22:47
(3) maxx,названия географических объектов должны соответствовать названиям на яндекс-карте
8. Анастасия Рябчук (nastyY) 11.02.14 00:09
всеже в гугл более точно роботает . я бы выбрал гугл
9. Alex Steiner (OrsoBear) 26.02.14 08:37
Нужная обработка. Забираю!
10. Олег Цыганков (BenGunn) 27.02.14 16:15
(6) krosaf4eg, А можно глянуть на код?
11. krosaf4eg (krosaf4eg) 24.03.14 04:13
(10) BenGunn, ой, а уведомления-то не приходят на почту о новых комментариях. Некропостинг получается, но на всякий случай оставлю. Я встраивал эту обработку в конфу, поэтому код еще тот говнокод сильно почикан, но, надеюсь, суть уловите, тем более, что я закомментировал первоначальный код в модуле форму Оффтоп для всех 1Сников: пользуйтесь инструментом Сравнить по содержимому в файловом менеджере Total Цоммандер

модуль формы, макет HTML
12. Сергей Рубанов (rsergio) 19.04.14 18:20
Хорошо сделано. Только не нашел возможности получения GPS координат.
13. Александр (AlexandrIII) 19.04.14 18:58
(12) rsergio, есть там в структуре "ОтветГеокодера".
14. BigB (BigB) 20.08.14 12:11
Валится по ошибке:
{Форма.Форма.Форма(373)}: Поле объекта недоступно для записи (ЭтотОбъект)
ЭтотОбъект = РеквизитФормыВЗначение("Объект");
Платформа: 8.3.5.924
Конфигурация: Библиотека стандартных подсистем", редакция 2.2 (2.2.3.14)

Ошибку исправил так:
&НаСервере
Процедура ИнициализацияЯндексКарты()
	ДвоичныеДанныеКартинки = РеквизитФормыВЗначение("Объект").ПолучитьМакет("ПоказатьВсе");
	НавигационнаяСсылкаКартинки = ПоместитьВоВременноеХранилище(Новый Картинка(ДвоичныеДанныеКартинки));
	ЯндексМакет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("HTML");
	ЯндексКарта = СтрЗаменить(ЯндексМакет.ПолучитьТекст(), "%КартинкаИнформация%", НавигационнаяСсылкаКартинки);
КонецПроцедуры
...Показать Скрыть
15. BigB (BigB) 20.08.14 14:29
Протестировал в вебе.
Результат - не работает.
А жаль.
Прикрепленные файлы:
16. александр Шелленберг (foralex2004) 12.01.16 16:21
На web-клиенте не работает.
17. александр Шелленберг (foralex2004) 12.01.16 16:28
экран
Прикрепленные файлы:
18. Кириков Павел (zeluslugi777) 23.02.16 12:53
Перестала работать обработка, запускается но элементы управления (кнопки,масштабирование) не видны. Метки при поиске также проставляются. Причем неделю назад все работало на тех же конфигах. Почините пожалуйста, ибо обработка понравилась - хотел на ее базе формирование маршрутных листов для курьеров запилить.
19. Денис Распопов (draspopov) 24.02.16 14:46
Да, работало и перестало.
20. гр534 (rabanik) 24.02.16 15:45
Добрый день, а может кто нибудь подсказать почему перестало работать? Спасибо, большое!
21. Олег Цыганков (BenGunn) 24.02.16 16:49
Добрый день всем!

Перестали работать все скрипты яндекс-карт 2.0 и 2.1. Причем, инициализация карт все же происходит. Причину объяснить не могу. Если кто-нибудь что-нибудь узнает, сообщите.
22. Михаил Петухов (oldfornit) 24.02.16 17:53
(21) BenGunn, если не ошибаюсь, то это произошло из-за смены API
23. Олег Цыганков (BenGunn) 25.02.16 15:49
Насколько я понял, то да, из-за смены API .

Попытаюсь объяснить. В качестве ядра html-поля 1С для windows взят IE7. Он поддерживает не все инструкции html5. Видимо, одно изменение в API (как мне кажется в методе onclick) повлекло за собой полную неработоспособность яндекс-карт в 1С. Мнение сугубо личное и, возможно, ошибочное. Проверить мою догадку могут те, кто работает на линукс-платформе (ядро html-поля - mozila).
24. Рустам Таиров (Rustavelli) 28.02.16 14:39
Добрый день! Тоже ищу решение проблемы, в один прекрасный день карта перестала работать, выходит вот такая ошибка:
25. Max Trx (cmax) 29.02.16 09:45
(23) BenGunn, а есть какие-нибудь варианты исправить это?
26. Михаил Петухов (oldfornit) 29.02.16 09:55
(25) cmax,
1. получить ключ для API
2. заключить лицензионный договор с яндексом

ну и помнить о том, что бесплатный API запрещен к использованию в 1с
27. Олег Цыганков (BenGunn) 29.02.16 10:34
(26) oldfornit, спасибо за совет. Сам проверил? Работает?

Но, на самом деле, от яндекса надо отходить. Я сейчас буду юзать OpenStreetMap
28. Александр Вольнов (Strellson) 29.02.16 11:06
Можно просто загружать последний работоспособный вариант API - у меня вновь стало работать:
<script src="https://api-maps.yandex.ru/2.1.34/?lang=ru_RU" type="text/javascript"></script>
29. Михаил Петухов (oldfornit) 29.02.16 11:32
(27) BenGunn,нет, не проверял. Просто наткнулся случайно
30. Max Trx (cmax) 29.02.16 12:45
(28) Strellson, не помогает..
Что именно нужно сделать?
Попробовал заменить на предыдущую версию 2.0.41 - результат тот же.
Попробовал ваш вариант с 2.1.34 - карта вообще не прорисовывается.
31. Александр Вольнов (Strellson) 29.02.16 16:18
(30) Действительно... сейчас попробовал - карта не отрисовалась... Еще вчера все работало на ура
Со второго раза отрисовалась - что-то ругнулась на сертификат и нарисовалась. Все работает
32. гр534 (rabanik) 29.02.16 18:38
попробую, тоже карта перестала работать.
33. Max Trx (cmax) 29.02.16 21:36
(31) Strellson, у меня вместо карты - серое поле( так и не прорисовывается.. кроме "<script src="https://api-maps.yandex.ru..." еще что-нибудь меняли?
34. Головаченко Дима (Smaylukk) 29.02.16 23:51
(33) cmax, попробуйте прописать в макете яндекс-карты поддержку IE8, если не прописано. У меня работает и открывается.
В области "HEAD", <meta http-equiv="X-UA-Compatible" content="IE=8"/>.
35. Max Trx (cmax) 01.03.16 00:35
(34) Smaylukk, да, отображаться стала! НО постоянно при работе вываливается ошибка (

36. Max Trx (cmax) 01.03.16 00:44
(34) Smaylukk, если такой ошибки нет как у меня - можете скинуть, пожалуйста, свой макет HTML для карты. возможно я где-то что-то наменял и теперь просто запутался.. моя почта max.max@bk.ru
37. Рустам Таиров (Rustavelli) 01.03.16 13:26
(34) Smaylukk, мне тоже скиньте пожалуйста на 6981873@gmail.com
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа