Работа с картами 1С 3 в 1: Яндекс, Google , 2ГИС

0. Головаченко Дима (Smaylukk) 524 28.12.12 00:14 Сейчас в теме
С каждым годом становится все очевидно, что использование онлайн-сервисов намного упрощает жизнь. К сожалению по картографическим сервисам условия пока жестковаты. Но, ориентируясь на будущее, я решил показать возможности API выше указанных сервисов:
Инициализация карты
Поиск адреса на карте с текстовым представлением
Геокодинг
Обратная поиск адреса по ее координатами
Взаимодействие с картами - прием координат установленного на карте метки
Построение маршрутов по указанным точками
Кластеризация меток на карте при увеличении масштаба
Теперь также поддержка тонкого и веб-клиента

Перейти к публикации

Комментарии
202. Евгений Мадонов (madonov) 147 28.09.16 08:50 Сейчас в теме
(199) Дмитрий_кдс,
МакетЯндекс

<met a http-equiv="X-UA-Compatible" content="IE=8">
заменить на
<met a http-equiv="X-UA-Compatible" content="IE=9">

<sc ript src="https://api-maps.yandex.ru/2.1.42/?lang=ru-RU" type="text/javascript"></sc ript>
...Показать Скрыть


Модуль Формы "Форма"

По сути дела все конструкции "ЭлементыФормы.Эксплорер.Документ.parentWindow.eval(%Какой-то код%);" нужно заменить на
ЭлементыФормы.Эксплорер.document.getElementById("WebClientOperation";).value = "%Какой-то код%";
ЭлементыФормы.Эксплорер.document.getElementById("WebClient";).click();

Процедура ОчиститьКарту()
ДополнительнаяИнформация = "";
//ЭлементыФормы.Эксплорер.Документ.parentWindow.eval("Reset()";);
ЭлементыФормы.Эксплорер.document.getElementById("WebClientOperation";).value = "Reset()";
ЭлементыФормы.Эксплорер.document.getElementById("WebClient";).click();	
КонецПроцедуры

Процедура ПоискАдреса(Адрес)
//ЭлементыФормы.Эксплорер.Документ.parentWindow.eval("FindAdres(""" + Адрес + """;);";);
ЭлементыФормы.Эксплорер.document.getElementById("WebClientOperation";).value = "FindAdres(""" + Адрес + """;);";
ЭлементыФормы.Эксплорер.document.getElementById("WebClient";).click();
КонецПроцедуры

Процедура ОбратнПоискАдреса(Широта, Долгота, Адрес)
//ЭлементыФормы.Эксплорер.Документ.parentWindow.eval("ReverseSearchAdres(" + Широта + "," + Долгота + ", """ + Адрес + """;);";);
ЭлементыФормы.Эксплорер.document.getElementById("WebClientOperation";).value = "ReverseSearchAdres(" + Широта + "," + Долгота + ", """ + Адрес + """;);";
ЭлементыФормы.Эксплорер.document.getElementById("WebClient";).click();
КонецПроцедуры

Процедура ПостроитьМаршрут_Яндекс()
ПараметрыМаршрута = ПолучитьПараметрыМаршрутаЯндекс();

ОчиститьКарту();
//ЭлементыФормы.Эксплорер.Документ.parentWindow.eval("calcRoute(" + ПараметрыМаршрута + ";)";);
ЭлементыФормы.Эксплорер.document.getElementById("WebClientOperation";).value = "calcRoute(" + ПараметрыМаршрута + ";)";
ЭлементыФормы.Эксплорер.document.getElementById("WebClient";).click();
КонецПроцедуры


ПостроитьКластера()
//Данная процедура у меня сильно переписана
//Приведу свой пример - нужно сделать по аналогии

//ЭлементыФормы.Эксплорер.Документ.parentWindow.eval("addToPointArray("
//+ Широта + ","
//+ Долгота + ", """
//+ Кластер + """, """
//+ СодержимоеТочки + """, """
//+ ЗаголовокТочки + """, """ 
//+ ЗаголовокСодержимогоТочки	+ """, """ 
//+ ПодвалТочки + """, """
//+ Иконка+""";);";);

ЭлементыФормы.Эксплорер.document.getElementById("WebClientOperation";).value = "addToPointArray("
+ Широта + ","
+ Долгота + ", """
+ Кластер + """, """
+ СодержимоеТочки + """, """
+ ЗаголовокТочки + """, """ 
+ ЗаголовокСодержимогоТочки	+ """, """ 
+ ПодвалТочки + """, """
+ Иконка+""";);";
ЭлементыФормы.Эксплорер.document.getElementById("WebClient";).click();


КонецПроцедуры
...Показать Скрыть
203. azat Токторов (a3a) 9 29.09.16 06:07 Сейчас в теме
(202) madonov, проверил
на 8.2 отрабатывает только 1 раз, при повторном вызову процедур вываливаеттся ошибка на строку

ЭлементыФормы.Эксплорер.document.getElementById("WebClient").click();

(и почему у тебя после слова ""WebClient" стоит знак ";")?

говорят что это ошибка окна експлорера, исправили в версии 8.3. так что увы, только обновляться.
204. Евгений Мадонов (madonov) 147 04.10.16 07:36 Сейчас в теме
(203) a3a,
Да, это ошибка самой платформы. Я поднимал этот вопрос в (177), ответ был в (178).
Я своим пользователям объяснил эту особенность, поэтому они просто не закрывают обработку, если она может понадобиться в рамках текущего сеанса.
Если пользователи закрывают её по привычке - можно спрятать кнопку закрытия, оставить только сворачивание (колхоз конечно).

А поп поводу ";" - да чёрт его знает, вроде делал по образцу управляемой формы этой же обработки, мне они в любом случае не мешают - все работает)).
205. Ivan (VanoZZZ) 01.11.16 15:31 Сейчас в теме
Подскажите пожалуйста, как в процедуру построения маршрута можно передать массив с комментариями к точкам маршрута?
Идея в том, чтобы при щелчке на промежуточную точку маршрута выводились не ее координаты, а нужный комментарий (у каждой точки свой, к примеру, адрес или название точки).
Спасибо
206. Головаченко Дима (Smaylukk) 524 02.11.16 10:39 Сейчас в теме
(205) VanoZZZ, эта обработка так не умеет. И нет простого способа это сделать.
Надо менять js-функцию построения маршрута.
Смотрите пример и пробуйте - https://tech.yandex.ru/maps/jsbox/2.1/multiroute_view_options
207. Allexey (alex_4x) 72 09.11.16 14:04 Сейчас в теме
Добрый день! Колоссально сделано всё. Но у меня по непонятной мне причине при геокодинге с карты яндекса выскакивает ошибка.
Ошибка при вызове метода контекста (Получить): Ошибка работы с Интернет: SSL connect error
Подскажите, как проверить и с чем это может быть связано. На файрволе вроде бы как всё открыто.

Я так понял сертификаты проверяются 1С по файлу cacert.pem, который лежит в каталоге bin (и для версии 8.2 и для 8.3)
Может у меня с этим файлом всё плохо? Я туда попробовал добавить сертификат яндекса (текстом, как написано на форумах) но ничего не помогло. Больше ни у кого такой проблемы не возникало? Версия 1С 8.2.19
208. Головаченко Дима (Smaylukk) 524 10.11.16 12:45 Сейчас в теме
(207) alex_4x, наверное платформа старенькая.
Если есть возможность - попробуйте на более новой (8.3).
209. Andrei A (wmonref1) 17.11.16 12:36 Сейчас в теме
На днях появилась ошибка метода "getContext" в картах Google....

Платформа 8.3.9.1818, УФ
Не подскажете как вылечить?
210. Andrei A (wmonref1) 18.11.16 09:27 Сейчас в теме
211. Головаченко Дима (Smaylukk) 524 23.11.16 12:48 Сейчас в теме
(209), (210) такой ошибки не встречал, так что помочь или подсказать не могу.
212. Мария Кукина (Vary) 18.05.17 13:56 Сейчас в теме
Подскажите, как получить расстояние между каждой парой точек в маршруте? Т.е. например А - В = 10км, В-С = 175 км,С-Д 15км и т.д....
213. Мария Кукина (Vary) 18.05.17 13:57 Сейчас в теме
214. azat Токторов (a3a) 9 19.05.17 05:29 Сейчас в теме
(212) Мария у вас Яндекс карты работают? )) у меня он перестал работать в конце прошлого года (вываливаются ошибка из за обновления API) и я забросил. А так можно для примера зайти в "Песочницу" Яндекс карт. Прям так и называется ресурс. там есть разнообразные примеры.
215. Евгений Мадонов (madonov) 147 19.05.17 05:47 Сейчас в теме
(214) в (202) Я подробно описал как исправить - ничего сложного.
216. Алексей Беспалов (FreeArcher) 52 19.05.17 07:08 Сейчас в теме
Приветствую.
Буду реализовывать обработку по расчету и визуализации доставки.
Подскажите какую карту лучше использовать изначально? (Наличие ограничений, сложности API, документация.)
Чтобы поменьше граблей встретить на пути.
217. Евгений Мадонов (madonov) 147 19.05.17 07:36 Сейчас в теме
(216)
Рамблер - мертв.

2ГИС - требует ключ API, но даже с ним не умеет прокладывать маршруты и кластеризировать метки.

Яндекс - формально использование внутри 1С является нарушением лицензионного соглашения Яндекс-карт (фактически работает без ограничений). Периодически меняется API и обработку требуется дорабатывать. Описание API полностью на русском языке, есть большое количество примеров работы.

Гугл - не могу сказать ничего плохого, тк не пользовался. Судя по описанию не уступает Яндексу по функционалу. Хотя если сравнивать по опыту использования на мобильных устройствах - Геокодинг и построение маршрутов у Яндекса более точное.
FreeArcher; +1 Ответить 1
218. Головаченко Дима (Smaylukk) 524 19.05.17 10:20 Сейчас в теме
(212) при построении маршрута - имеется ввиду js-код в макете обработки - у объекта router (https://tech.yandex.ru/maps/doc/jsapi/2.0/ref/reference/router.Route-docpage) можно получить массив путей или сегментов методом getPaths().
По идее он возвращает массив с объектами router.Path (https://tech.yandex.ru/maps/doc/jsapi/2.1-dev/ref/reference/router.Path-docpage/).
Ну а у этого объекта уже можно получить getHumanLength() и другие значение, смотрите в справке.
Но готового кода нет, к сожалению.
219. Головаченко Дима (Smaylukk) 524 19.05.17 10:27 Сейчас в теме
(216)(217)
Яндекс - более детально прорисован и актуализирован для СНГ. Это касается того, что дальше больших городов.
Чтобы официально и без проблем использовать Яндекс или Гугл - надо брать лицензии. Точных цифр нет, но дороговато.
Есть еще openstreenmap, но api там меня не очень впечатлило и я ее не встраивал в свою обработку.
220. Roy Jonson (jonson_r) 2 19.05.17 17:24 Сейчас в теме
Доброго времени суток, я так понял для google карт используется его JS API?

А каким образом решен вопрос с API_KEY?
221. Головаченко Дима (Smaylukk) 524 19.05.17 21:13 Сейчас в теме
(220) багато или фича, но работает пока и без него. Не знаю почему и не спрашивал, но могут потребовать обязательно со временем.
222. Мария Кукина (Vary) 20.05.17 06:00 Сейчас в теме
(218)спасибо, буду пробовать
223. Roy Jonson (jonson_r) 2 21.05.17 16:31 Сейчас в теме
(221) Спасибо, я поэтому и спросил что бы понимать на перспективу. А если все же затребуют, в существующий код html-страници его можно будет вставить, например как параметр какой-то, или все же нужно существенно переписывать?
224. Головаченко Дима (Smaylukk) 524 21.05.17 20:37 Сейчас в теме
(223)
Он там нужен только при инициализации карты, поэтому доделать не долго.
225. Алексей Беспалов (FreeArcher) 52 22.05.17 12:58 Сейчас в теме
А подскажите можно ли как-то получить расстояния между точкам?
Получить расстояние всего маршрута я научился, но если в маршруте 10 точек, мне бы обойти их в цикле и получить расстояние каждой точки.
Или с учетом того, что все завязано на кликах так невозможно сделать?
226. Roy Jonson (jonson_r) 2 22.05.17 15:29 Сейчас в теме
(224) Понял, благодарю за ответ.
227. Головаченко Дима (Smaylukk) 524 22.05.17 16:13 Сейчас в теме
(225)
Похожий ответ есть в (218)
Оставьте свое сообщение