ГИС пространство позволяет размещать агентов в геопространственной среде, заданной с помощью карты ГИС. Поддержка ГИС пространства включает возможности помещения агента в новое место, получения информации о текущем местоположении, перемещения агента из текущего местоположения в новое с заданной скоростью, выполнения определенного действия по прибытии, отображения анимации агента (статической или движущейся), установления связей между агентами в зависимости от их расположения и многое другое. Чтобы иметь доступ к этой функциональности, Вы должны объявить Ваш активный объект агентом (см. Агент).
Чтобы сделать пространство геопространственным
Местоположение агента в ГИС пространстве определяется двумя координатами (широта, долгота) типа double.
Начальное расположение агентов задается в классе агента.
Чтобы задать начальное
расположение агентов
Класс Agent предоставляет богатый программный интерфейс для перемещения агентов в пространстве ГИС. Во-первых, есть методы для получения информации о текущем местоположении и расстоянии (эти методы применимы и во время движения агента):
double getY() - возвращает текущую Y-координату агента (широта текущего местоположения, вычисляемая в градусах (-90 ... (South) ... 0 ... (North) ... +90).
setXY(double
x, double y)-
задает координаты местоположения агента. Должен использоваться
только для начальной расстановки агентов. Подразумевает, что агент
не движется.
Параметры:
double distanceTo( Agent other ) - возвращает расстояние до указанного агента (в метрах)
Кроме того, есть набор методов, позволяющий производить перемещение агентов:
moveTo(
double x, double y )-
инициирует перемещение агента в место с заданными координатами.
Движение будет производиться по кратчайшему пути с заданной скоростью
(которая при необходимости может быть изменена динамически). По
прибытии будет выполнено Действие
при достижении места назначения
Параметры:
boolean isMoving() - проверяет, движется ли агент в данный момент времени
double getTargetX() - возвращает x-координату места назначения движения агента, если он движется, или его текущую x-координату, если нет (долгота, вычисляемая в градусах (-180 ... (West) ... 0 ... (East) ... +180)).
double getTargetY() - возвращает y-координату места назначения движения агента, если он движется, или его текущую y-координату, если нет (широта, вычисляемая в градусах (-90 ... (South) ... 0 ... (North) ... +90)).
double getVelocity() - возвращает скорость агента (в метрах в секунду, скорость является параметром агента, это та скорость, с которой он обычно передвигается, и ненулевая скорость еще не означает, что этот агент движется в данный момент времени)
double getGISHeading() - возвращает текущий угол поворота агента (в радианах, по часовой стрелке, нулевому углу соответствует положение часовой стрелки, показываюшей на двенадцать часов).
double timeToArrival() - если агент движется, то возвращает время (в единицах модельного времени), нужное ему для того, чтобы прибыть в место назначения, с учетом того, что скорость не изменится. Если агент не движется, возвращает 0
setVelocity( double newVelocity ) - задает скорость (в метрах в секунду), с которой агент будет передвигаться. Если на момент вызова метода агент движется, то он продолжит движение с новой скоростью. Если агент не движется, то он не начнет движение, пока Вы не вызовете метод moveTo()
setRotation(
double rotation )-
задает угол поворота анимации агента (в радианах, по часовой
стрелке). Этот угол поворота будет переопределен при следующем
вызове метода moveTo()
или, если агент движется, то прямо во время перемещения.. Если Вы не
планируете в дальнейшем изменять угол поворота анимации агента, то
используйте метод setRotation(double,
boolean), передав в качестве значения второго параметра
true.
rotation
- угол поворота анимации агента (в радианах)
setRotation(double
rotation, boolean freezeRotation)
- Задает угол поворота (в радианах) анимации агента. Этот угол
поворота будет переопределен при следующем вызове метода moveTo() или, если агент
движется, то прямо во время перемещения.
Параметры:
Чтобы задать начальную скорость и
угол поворота агента
Чтобы
задать действие, которое должно выполняться при достижении агентом
точки назначения (после того, как выполнится метод moveTo())