Топологический объект, отображаемый на географической схеме линией, возможно ломаной.
Полное описание, параметры и ограничения
ПолилинейныйОбъектГеографическойСхемы (GeographicalSchemaObjectPolyline)
ПолилинейныйОбъектГеографическойСхемы (GeographicalSchemaObjectPolyline)
Доступен, начиная с версии 8.1.
Свойства:
Видимость (Visible)
Значение (Value)
Линия (Line)
ОграничивающийПрямоугольник (BoundaryBox)
ОтображатьДанные (ShowData)
Подсказка (ToolTip)
Расшифровка (Details)
Сегменты (Segments)
Слой (Layer)
Цвет (Color)
Описание:
Топологический объект, отображаемый на географической схеме линией, возможно ломаной.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Добавить учебную линию и замкнутую зону
Маршрут составлен из одного сегмента с двумя координатами; зона из одного замкнутого контура. Временные геометрии удаляются только из новой схемы.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Собственная учебная база 8.5.1.1343, толстый клиент Windows. ГеографическаяСхема из этого урока недоступна в тонком/веб-клиенте: не вставляйте код в тонкий клиент.
Создайте отдельную внешнюю обработку с управляемой формой, командой Выполнить и кнопкой этой команды. Вставьте весь код одного урока в модуль формы; назначьте команде обработчик Выполнить.
Каждый запуск создаёт новую схему в локальной переменной. Реквизиты карты и макеты не нужны; готовые карты, SHP, GPS и сервисы карт не загружаются.
Точки и зоны вымышленные учебные объекты. Координаты заданы в градусах, высота в метрах; это не местоположение пользователей или реальных заказов.
На схеме нет подложки с границами стран/дорогами. Это собственная геометрия, а не полноценный навигатор. Показать открывает отдельное окно схемы.
Запускайте уроки по одному. Статические проверки сверяют API установленной справки, но отрисовка и геометрические операции в 1С пока не проверены запуском.
&НаКлиенте
Процедура Выполнить(Команда)
Схема = Новый ГеографическаяСхема;
Схема.Обновление = Ложь;
Схема.Проекция = ТипПроекцииГеографическойСхемы.ЦилиндрическаяРавноудаленнаяПроекция;
Схема.СмещениеШироты = 0;
Схема.СмещениеДолготы = 0;
Пункты = Схема.Слои.Добавить("УчебныеПункты", Тип("ТочечныйОбъектГеографическойСхемы"));
Пункты.Текст = "Учебные пункты";
Пункты.Видимость = Истина;
Пункты.РазрешитьВыбор = Истина;
ПунктА = Пункты.Объекты.Добавить();
ПунктА.Значение = "guide-point-A";
ПунктА.Координаты = Новый ГеографическиеКоординаты(55, 37, 100);
ПунктА.Видимость = Истина;
ПунктА.ТипОтрисовки = ТипОтображенияТочечногоОбъектаГеографическойСхемы.Маркер;
ПунктА.Маркер = ТипМаркераГеографическойСхемы.БольшойКруг;
ПунктА.Цвет = Новый Цвет(25, 95, 180);
ПунктА.ОтображатьДанные = Ложь;
ПунктА.Подсказка = "Вымышленный пункт А; только учебные данные";
ПунктА.Расшифровка = Новый Структура("УчебныйКод", "guide-point-A");
ПунктБ = Пункты.Объекты.Добавить();
ПунктБ.Значение = "guide-point-B";
ПунктБ.Координаты = Новый ГеографическиеКоординаты(55.1, 37.2, 110);
ПунктБ.Видимость = Истина;
ПунктБ.ТипОтрисовки = ТипОтображенияТочечногоОбъектаГеографическойСхемы.Маркер;
ПунктБ.Маркер = ТипМаркераГеографическойСхемы.БольшойТреугольник;
ПунктБ.Цвет = Новый Цвет(35, 145, 75);
Зоны = Схема.Слои.Добавить("УчебныеЗоны", Тип("ПолигональныйОбъектГеографическойСхемы"));
Зоны.Текст = "Учебная зона";
Зона = Зоны.Объекты.Добавить();
Зона.Значение = "guide-zone-001";
Зона.Видимость = Истина;
Зона.Цвет = Новый Цвет(225, 240, 255);
Зона.ЦветГраницы = Новый Цвет(90, 130, 175);
Зона.ОтображатьДанные = Ложь;
Зона.Подсказка = "Вымышленная прямоугольная зона";
Зона.Расшифровка = "guide-zone-001";
Контур = Зона.Контуры.Добавить();
Контур.Добавить(Новый ГеографическиеКоординаты(54.9, 36.9));
Контур.Добавить(Новый ГеографическиеКоординаты(54.9, 37.3));
Контур.Добавить(Новый ГеографическиеКоординаты(55.2, 37.3));
Контур.Добавить(Новый ГеографическиеКоординаты(55.2, 36.9));
Контур.Добавить(Новый ГеографическиеКоординаты(54.9, 36.9));
Маршруты = Схема.Слои.Добавить("УчебныеМаршруты", Тип("ПолилинейныйОбъектГеографическойСхемы"));
Маршруты.Текст = "Учебная линия";
Маршрут = Маршруты.Объекты.Добавить();
Маршрут.Значение = "guide-route-001";
Маршрут.Видимость = Истина;
Маршрут.Цвет = Новый Цвет(200, 95, 35);
Маршрут.ОтображатьДанные = Ложь;
Маршрут.Подсказка = "Учебная линия, не дорожный маршрут";
Маршрут.Расшифровка = "guide-route-001";
Сегмент = Маршрут.Сегменты.Добавить();
Сегмент.Добавить(ПунктА.Координаты);
Сегмент.Добавить(ПунктБ.Координаты);
Сообщить(Маршрут.Сегменты.Количество() = 1);
Сообщить(Маршрут.Сегменты.Получить(0) = Сегмент);
Сообщить(Сегмент.Количество() = 2);
Сообщить(Сегмент.Индекс(Сегмент.Получить(0)) = 0);
Сегмент.Сдвинуть(0, 1);
Сообщить(Сегмент.Получить(0).Широта = 55.1);
Сегмент.Сдвинуть(1, -1);
Сообщить(Сегмент.Получить(0).Широта = 55);
ВременнаяКоордината = Новый ГеографическиеКоординаты(55.05, 37.1);
Сегмент.Добавить(ВременнаяКоордината);
Сегмент.Удалить(Сегмент.Получить(2));
Сообщить(Сегмент.Количество() = 2);
ВременныйСегмент = Маршрут.Сегменты.Добавить();
ВременныйСегмент.Добавить(ВременнаяКоордината);
ВременныйСегмент.Очистить();
Маршрут.Сегменты.Удалить(ВременныйСегмент);
ВременнаяЛиния = Маршруты.Объекты.Добавить();
ВременнаяЛиния.Сегменты.Добавить().Добавить(ВременнаяКоордината);
ВременнаяЛиния.Сегменты.Очистить();
Маршруты.Объекты.Удалить(ВременнаяЛиния);
Сообщить(Маршрут.Слой = Маршруты);
Сообщить(ТипЗнч(Маршрут.Линия) = Тип("Линия"));
Сообщить(ТипЗнч(Маршрут.ОграничивающийПрямоугольник) = Тип("ПрямоугольникГеографическойСхемы"));
Сообщить(Зона.Контуры.Количество() = 1);
Сообщить(Зона.Контуры.Получить(0) = Контур);
Сообщить(Контур.Количество() = 5);
Сообщить(Контур.Получить(0).Широта = Контур.Получить(4).Широта);
Сообщить(Контур.Получить(0).Долгота = Контур.Получить(4).Долгота);
Сообщить(Контур.Индекс(Контур.Получить(0)) = 0);
ВременныйКонтур = Зона.Контуры.Добавить();
ВременныйКонтур.Добавить(ВременнаяКоордината);
ВременныйКонтур.Сдвинуть(0, 0);
ВременныйКонтур.Удалить(ВременныйКонтур.Получить(0));
ВременныйКонтур.Очистить();
Зона.Контуры.Удалить(ВременныйКонтур);
ВременнаяЗона = Зоны.Объекты.Добавить();
ВременнаяЗона.Контуры.Добавить().Добавить(ВременнаяКоордината);
ВременнаяЗона.Контуры.Очистить();
Зоны.Объекты.Удалить(ВременнаяЗона);
Сообщить(Зона.Слой = Зоны);
Сообщить(ТипЗнч(Зона.ОграничивающийПрямоугольник) = Тип("ПрямоугольникГеографическойСхемы"));
Сообщить(Схема.Слои.Количество() = 3);
Схема.Обновление = Истина;
Схема.Показать("Собственная учебная схема — guide-owned-geo");
КонецПроцедурыРазбор по шагам
Сегменты содержит набор линий, каждый Сегмент — последовательность координат. Не добавляем координату сразу в коллекцию Сегменты.
Контуры содержит контуры, каждый Контур — последовательность вершин. Прямоугольник явно замыкается повторением первой координаты в конце.
Сдвинуть принимает индекс и относительное смещение. Для реального маршрута меняем порядок туда и обратно, чтобы сохранить исходную линию.
Удалить координаты/сегмента/контура принимает объект, не индекс. Код получает соответствующий объект через Получить.
Очистить демонстрируется на временных собственных сегменте, линии и зоне. Основная геометрия остаётся для показа.
Полилиния — геометрия между точками, не расчёт пути по дорогам. Не вычисляем километры как простую разность градусов.
Как проверить результат
Девятнадцать проверок ожидаются Истина; в финале три слоя, одна линия с двумя вершинами и одна зона с пятью координатами замкнутого контура.
В схеме должны остаться два пункта, линия и зона; временные пустые объекты удалены только из локального нового документа.
Ожидаемый результат
Показаны настоящие вложенные коллекции маршрута и зоны с безопасными операциями на собственной геометрии.
На что обратить внимание
Не очищать рабочую карту, переданную из формы пользователя: пример всегда начинает с Новый ГеографическаяСхема.
Контур из одной точки — только временная учебная коллекция и удалён до отрисовки; это не корректная зона.
Порядок слоёв влияет на отрисовку; при необходимости перенесите слой пунктов поверх зоны в отдельном упражнении.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.