gifts2017

Внедрение карты Google Maps в проекты 1С

Опубликовал Илья Галицков (galich) в раздел Программирование - Практика программирования

Данная разработка позволяет быстро получить в базе 1С функционал работы с картой Google.

Для работы с картой вставляем в общий модуль (сервер, вызов сервера) конфигурации текст, хранящийся в файле "NSI_РаботаСКартой.txt", а в общие макеты - текстовый документ, содержащийся в "NSI_МакетКартыGoogle.txt".

Карта возвращается в виде HTML-кода готового для вставки в строковый реквизит формы, выведенный на форму в виде HTML-поля.

Заполняется данный реквизит следующим образом:

Карта = NSI_РаботаСКартой.ПолучитьКартуGoogle(ТаблицаТочек, ОтображатьИнфоокноПриНаведении); 

Параметры функции:

Таблица выводимых точек - таблица, созданная методом: ТаблицаТочек = NSI_РаботаСКартой.СоздатьТаблицуДляПередачиКоординат();

Таблица содержит следующие поля:

Широта - число, в поле должна быть передана широта в координатах Google

Долгота - число, в поле должна быть передана долгота в координатах Google

Цвет - строка, указание маркера, используемого для обозначения точки. Здесь может быть либо ссылка на маркер, начинающаяся с "http", либо название одного из цветов - gray, green, orange, purple, red, white, yellow, black, blue, brown. В первом случае выводится маркер, указанный по ссылке, во втором случае - маленькая капелька требуемого цвета с тенью.

Текст - строка. HTML-текст всплывающей подсказки.

НавигационнаяСсылка - строка. Навигационная ссылка на объект, открываемый при нажатии на маркер в случае, если карта сформирована на появление всплывающего окна по наведению мыши.

При обработке щелчков мыши можно использовать следующие данные, получаемые конструкцией - Элементы.Карта.Документ.getElementByID(ИмяПараметра).value 

Используются следующие параметры:

ref - Навигационная ссылка, переданная нажатым маркером (для случая, когда информационное окно всплывает автоматически при наведении). В случае щелчка по маркеру в таком режиме элементу в 1С передается нажатие на элемент с id = "ref".

CenterLat, CenterLong, Zoom - соответственно широта, долгота точки центра и величина зума окна карты

HelpText - если функция отображения информационного окна при наведении отключена, то при щелчке по маркеру (если инфополе не открыто) система обрабатывает клик по элементу с id="HelpText", а потом забирает из Элементы.Карта.Документ.getElementByID("HelpText").value сформированный текст инфоокна. Если инфополе уже открыто, то щелчок по маркеру его закрывает.

Показывать информационное окно при наведении - булево. Если Истина, то при наведении на маркер открывается инфоокно с текстом, переданном в поле Текст соответствующей точки таблицы, если Ложь, то отрабатывает механизм, описанный выше (для поля HelpText).

 

Немного путано, но основной функционал показан в файле "Пример работы с картой". Перед запуском обработки вставьте первые два файла в модуль и макет соответственно.

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

Наименование Файл Версия Размер Кол. Скачив.
ПримерРаботыСКартой.epf
.epf 6,40Kb
04.02.16
134
.epf 6,40Kb 134 Скачать
ОбщийМодуль.NSI_РаботаСКартой.Модуль.txt
.txt 7,02Kb
04.02.16
66
.txt 7,02Kb 66 Скачать
ОбщийМакет.NSI_МакетКартыGoogle.Макет.txt
.txt 4,51Kb
04.02.16
66
.txt 4,51Kb 66 Скачать

См. также

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

Комментарии

1. Данила Елистратов (CagoBHuK) 22.08.12 09:52
2. Илья Галицков (galich) 22.08.12 11:38
(1) CagoBHuK, указанная публикация - платная. В данном случае - упор был сделан на минимальное время внедрения в конфигурацию.
3. Максим Волков (maxlenium) 22.08.12 15:19
Действительно публикаций было много, в т.ч. бесплатных. Без геокодирования обработка выглядит какой-то неполной.
4. Илья Галицков (galich) 22.08.12 15:39
Вначале было все сделано через геокодинг, но у гугла стоит ограничение на количество геокодируемой информации (максимум 10 запросов в секунду) + ограничение на количество операций геокодирования в день, в итоге на карту не выводилось более 10 точек. Было решено выполнять геокодинг при записи адреса, для чего отдельный веб-сервис написали. Данный механизм был опробован на выводе более 5000 точек, все отработало корректно.
Не претендую на первую публикацию по этой теме. Никого ведь не удивляет наличие десятка статей по консолям запросов. Что-то лучше в их статьях, что-то в моей, дело пользователя прочитать и выбрать, что ему нужно.
5. Максим Волков (maxlenium) 22.08.12 15:51
(4) galich, Понятно. Как упрошенная обработка - действительно стоящее решение. Геокод - это отдельная песня со своими премудростями.
6. Вадим Никонов (V.Nikonov) 29.08.12 15:47
Кстати, геокодирование отвратно в маленких городах и для сельской местности!

Вот только интересно, кто сравнивал полноту баз адресов в различных источниках: Gugle, Yandex, и др.)
7. Илья Галицков (galich) 29.08.12 16:10
(6) V.Nikonov, по полноте не сравнивали. Знаю, что яндекс на данный момент ограничение на количество запросов геокодирования не установил, поэтому когда нужно было сопоставить 150 тыс. объектов за раз, пришлось воспользоваться сервисом яндекса.
Вопрос геокодирования для сельской местности решается сейчас только вручную :) Можно сделать отдельную обработку, которая по перемещению маркера на карте передает координаты выбранной точки и их записывать.
8. Вадим Никонов (V.Nikonov) 29.08.12 18:17
(7) galich, А хотя бы формат обращения к сервису для получения координат указываемой точки...?

P.S. Сельская местность частично разрешается за счет специализированных систем АСУМТП (Например, Оптимум-GIS от CDC, или Чикаго от "Системные технологии")... Там встроенная функция снятия координат с использованием КПК и недокументированные средства считывания координат из БД.
9. Илья Галицков (galich) 29.08.12 18:35
(8) V.Nikonov, https://developers.google.com/maps/documentation/javascript/geocoding
там есть примеры html-страниц с геокодингом.
http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/geocode.xml - это для яндекса.
Там же описаны форматы ответов.
10. Олег Осипов (plastilin) 22.11.12 22:05
(7) galich, у Яши ограничение на 25000 запросов в день... и только в некомерческих проектах
11. Алексей Шабанов (BTRVODKA) 15.09.13 04:37
Спасибо автору за разработку!
12. Дмитрий Балачий (dmbal) 02.11.13 18:12
Как в этой форме изменить вид маркера?
13. Илья Галицков (galich) 02.11.13 21:42
14. Илья Галицков (galich) 02.11.13 21:44
Вместо цвета в структуре передайте адрес значка маркера, который Вам нужен.
15. Дмитрий Балачий (dmbal) 02.11.13 22:18
Мне нужны маркеры как на других картах, покрупнее и с буквами A B C ... :) Как их получить??
16. Илья Галицков (galich) 02.11.13 23:53
(15) dmbal, попробуйте следующую строку:

http://chart.googleapis.com/chart?chst=d_map_spin&chld=1|0|FFFF42|12|b|F|S

Синтаксис (переводить лень было - думаю, тут английский вполне прозрачен)

chst=d_map_spin
chld=<scale_factor>|<rotation_deg>|<fill_color>|<font_size>|<font_style>|<text_line_1>|...|<text_line_n>

<scale_factor>
A scaling factor to specify the pin size. This is a positive floating point number where 0.5 is the size of unscaled pins. 0.25 would be half that size, 1 would be twice that size, and so on.

<rotation_deg>
The rotation of the pin, in degrees. Positive and negative values are allowed. Specify 0 for a vertical pin.

<fill_color>
The bubble fill color, as a six-digit HTML hexadecimal color.

<font_size>
The text font size, in pixels.

<font_style>
Either '_' (underscore) for normal text or 'b' for boldface text.

<text_line_1>...<text_line_n>
One or more lines of text, delimited by | characters.

Основные цвета
Red: FC6355 Teal: 55D7D7 Yellow: FCF356 Purple: 7D54FC Pink: E14E9D Orange: EF9D3F Black: 000000 Brown: 9E7151 Gray: A8A8A8 Dark blue: 0336D1 White: ffffff

В принципе, можно и любые другие из палитры RGB использовать.

Если хочется с другими видами баллонов поэксперементировать - читайте тут
17. Илья Галицков (galich) 02.11.13 23:56
Блин, все угловые скобки infostart выкинул из текста - полный текст ответа лучше прочитать в своем вопросе, щелкнув по Ответили: (16) :)
18. Дмитрий Балачий (dmbal) 03.11.13 12:55
В "читайте тут" то, что мне нужно называется Shadowed Icons, пример приведенный тоже прикольно, но очень крупно :( Хочется Shadowed Icons.
19. Илья Галицков (galich) 03.11.13 13:49
Так поставьте 0.75 вместо 1 в скейле и будет щасте ) а с shadowed icons все хорошо, кроме того, что они не масштабируются. А в целом по интернету таких наборов иконок много на любой вкус и цвет. Попробуйте в гугле набрать google maps marker, первые пятнадцать ссылок на разные реппозитории направят.
20. Дмитрий Балачий (dmbal) 03.11.13 13:57
УРА!!! получилось! спасибо за публикацию и помощь. Поставил бы еще один плюс, если б мог!
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа