Перейти к основному содержимому

Точки маршрута

Группа методов менеджера О2_Routing_МенеджерТочекМаршрута, обеспечивающих создание объектов-адресаторов ТочкаМаршрута — единицы обращения к конкретной позиции в маршруте. Менеджер доступен через О2.Модели().МодельМаршрутизации().СоздатьМодель().ТочкиМаршрута().

Зачем нужна ТочкаМаршрута

В модели маршрутизации узел (О2_Routing_Узел) — это элемент графа, а точка маршрута — это позиция в конкретном маршруте транспортного средства. Разница принципиальна в сценарии shared depot: один физический узел-депо является стартовой и конечной точкой сразу для нескольких транспортных средств. Внутренний решатель хранит отдельный Start и End для каждого ТС, поэтому обратиться к «старту ТС1 из общего депо» через один лишь узел невозможно — нужна пара (узел, ТС).

ТочкаМаршрута — иммутабельная ФиксированнаяСтруктура одного из трёх типов:

ТипЗначение ТипОписание
Позиция старта ТС"ТочкаМаршрутаСтарт"Начало маршрута конкретного ТС
Позиция финиша ТС"ТочкаМаршрутаФиниш"Конец маршрута конкретного ТС
Регулярный узел"ТочкаМаршрута"Клиентский (не-депо) узел графа

Поля структуры:

  • Тип — строка-маркер (см. таблицу выше).
  • Дискриминатор — битовый набор (служебное, для проверки принадлежности к группе типов).
  • Индекс — 0-based индекс точки в реестре модели.
  • УзелФиксированнаяСтруктура узла, на базе которого создана точка (для всех трёх типов).
  • ТранспортноеСредствоФиксированнаяСтруктура ТС (только для типов Старт и Финиш).

Методы

МетодОписание
ПолучитьСтартПозиция старта конкретного транспортного средства
ПолучитьФинишПозиция финиша конкретного транспортного средства
ПолучитьПоУзлуПозиция клиентского узла (не-депо)
ПолучитьПолучить точку маршрута по 0-based индексу
КоличествоОбщее число точек маршрута в модели

Пример

Построитель = О2
.Модели()
.МодельМаршрутизации()
.СоздатьПостроительПараметровМодели();

Депо = Построитель.ДобавитьУзел("Депо");
Клиент1 = Построитель.ДобавитьУзел("Клиент1");
Построитель.ДобавитьТранспортноеСредство(Депо, Депо, "ТС1");

Модель = Построитель.СоздатьМодель();

ТС1 = Модель.ТранспортныеСредства().Получить("ТС1");
Клиент1 = Модель.Узлы().Получить("Клиент1");

// Получаем точки маршрута
СтартТС1 = Модель.ТочкиМаршрута().ПолучитьСтарт(ТС1);
ФинишТС1 = Модель.ТочкиМаршрута().ПолучитьФиниш(ТС1);
ТочкаКлиента = Модель.ТочкиМаршрута().ПолучитьПоУзлу(Клиент1);

См. также