Перед нами была поставлена задача вывода на карту объектов, которые попадают в выделенный пользователем полигон на карте. В качестве сервиса карт был выбран Yandex. В
данном посте я приведу описание подхода к решению задачи с демонстрационной обработкой.
Первым делом нам надо дать пользователю возможность выбрать полигон, который его интересует. Для этого во время инициализации карты мы сразу создаем объект с типом «Polygon» и вызываем startDrawing(). В результате после появления карты пользователь сразу редактирует полигон.
После окончания редактирования полигона нам надо получить его координаты. Координаты полигона мы получаем с помощью метода getCoordinates(), после чего преобразовываем их в строку для последующего обработки в 1с. Метод PrepearpolygonCoordinates(), который вы найдете в текстовом макете обработки, пишет в скрытый элемент «CoordPoly» текстовое представление координат полигона. Подготовку координат мы вызываем используя метод поля html-документа eval. Имя элемента поля html-документа — Эксплорер. Вызов подготовки координат из 1с выглядит вот так:
Эксплорер.Документ.parentWindow.eval("PrepearpolygonCoordinates();")
После того как координаты подготовлены нам надо «забрать» строку в 1с для дальнейшей обработки, для этого используем обращение к элементу поля html-документа
Эксплорер.document.getElementById("CoordPoly").value;
После получения координат полигона мы должны проверить вхождение наших точек в полигон. Для этого мы воспользовались алгоритмом из этой публикации. В обработке есть метод ПолучитьТаблицуЭлементов(), который генерирует 500 текстовых точек для демонстрации работы алгоритма.
После получения точек, которые входят в полигон, мы вывозим их на карту используя метод createPlacemark(). В метод передаются координаты, текстовое представление метки, номер метки и её цвет.
Выглядит работа с полигоном так:
Скачать обработку можно тут:
yandex_polygon.epf (9,8 KiB, 1 334 скачиваний)
Похожие записи: