AnyLogic
Развернуть
Размер шрифта

Программное создание сети ГИС

Иногда вам может понадобиться создать сеть ГИС с помощью программного кода.

Обратите внимание, что созданную программно сеть нельзя будет изменять динамически во время выполнения модели.

В этой статье мы рассмотрим код из следующей модели:

Мы создадим ГИС сеть, состоящую из двух ГИС точек, связанных ГИС маршрутом. ГИС маршрут состоит из двух сегментов. В этой демо модели поезд добавляется в ГИС сеть в одной ГИС точке и перемещается по ГИС маршруту в другую ГИС точку.

ГИС сеть создается программно с помощью Java кода в функции createRoute, которая вызывается из действия При запуске агента Main (в секции свойств Действия агента):

Пример кода

//Создание и инициализация ГИС точек
GISPoint gp1 = new GISPoint( map, 60.19, 24.94 );
GISPoint gp2 = new GISPoint( map, 59.92, 25 );
GISPoint gp3 = new GISPoint( map, 59.43, 24.95 );
gp1.initialize();
gp2.initialize();
gp3.initialize();

//Создание сегментов ГИС маршрута
GISMarkupSegmentLine segment1 =
new GISMarkupSegmentLine( gp1.getLatitude(), gp1.getLongitude(), gp2.getLatitude(), gp2.getLongitude() );
GISMarkupSegmentLine segment2 =
new GISMarkupSegmentLine( gp2.getLatitude(), gp2.getLongitude(), gp3.getLatitude(), gp3.getLongitude() );

//Создание и инициализация кривой
Curve curve = new Curve();
curve.addSegment( segment1 );
curve.addSegment( segment2 );
curve.initialize();

//Создание ГИС маршрута
GISRoute gr = new GISRoute( map, curve, gp1, gp3, true );
gr.initialize();

//Создание ГИС сети
GISNetwork n = new GISNetwork( map, "n", true, gp1, gp2, gp3, gr );

Объяснение кода

Создание ГИС точек

Вначале мы создаем три ГИС точки. У конструктора класса GISPoint три аргумента: имя ГИС карты, на которую мы добавляем ГИС точку (в нашей модели это map), а также широта и долгота данной ГИС точки.

GISPoint gp1 = new GISPoint( map, 60.19, 24.94 );
GISPoint gp2 = new GISPoint( map, 59.92, 25 );
GISPoint gp3 = new GISPoint( map, 59.43, 24.95 );

Затем мы инициализируем созданные элементы с помощью функции initialize().

gp1.initialize();
gp2.initialize();
gp3.initialize();

Создание ГИС маршрута

После этого мы создаем ГИС маршрут.

Для этого вначале создаются сегменты ГИС маршрута, затем создается кривая, в которую добавляются эти сегменты, и наконец создается сам ГИС маршрут, в конструктор которого передается эта кривая в качестве одного из аргументов.

Наш ГИС маршрут состоит из двух сегментов. Каждый сегмент маршрута создается с помощью конструктора класса GISMarkupSegmentLine. У этого конструктора четыре аргумента: широта и долгота начальной точки сегмента, а также широта и долгота его конечной точки.

GISMarkupSegmentLine segment1 = new GISMarkupSegmentLine( gp1.getLatitude(), gp1.getLongitude(), gp2.getLatitude(), gp2.getLongitude() );
GISMarkupSegmentLine segment2 = new GISMarkupSegmentLine( gp2.getLatitude(), gp2.getLongitude(), gp3.getLatitude(), gp3.getLongitude() );

Затем мы создаем кривую, добавляем в нее созданные сегменты маршрута в порядке их следования от начальной к конечной точке ГИС маршрута, и инициализируем эту кривую.

Curve curve = new Curve();
curve.addSegment( segment1 );
curve.addSegment( segment2 );
curve.initialize();

После этого мы создаем собственно ГИС маршрут и инициализируем его. У используемого нами конструктора класса GISRoute пять аргументов: ГИС карта, созданная нами кривая, начальная и конечная точки маршрута, а также аргумент типа boolean, определяющий, является ли маршрут двунаправленным (мы разрешаем движение по нему в обоих направлениях, передав этому аргументу значение true).

GISRoute gr = new GISRoute( map, curve, gp1, gp3, true );
gr.initialize();

Создание ГИС сети

Создав все элементы нашей сети, пришло время создать и саму ГИС сеть, добавив в нее эти элементы. В конструкторе класса GISNetwork мы указываем ссылку на ГИС карту, передаем имя сети, делаем сеть видимой, передав значение true аргументу visible, который идет следом, а затем перечисляем все элементы разметки пространства, из которых будет состоять данная ГИС сеть:

GISNetwork n = new GISNetwork(map, "n", true, gp1, gp2, gp3, gr);
Как мы можем улучшить эту статью?