Трапеза Симфония 3D ГИС

Я использую Repast Simphony для проекта, который включает в себя воздушное пространство, и хотел бы, чтобы агенты перемещались в непрерывном трехмерном пространстве над проекцией ГИС, в которой есть статические наземные агенты. В настоящее время у меня есть отдельные проекции Geography и ContinuousSpace в одном контексте, и я перемещаю агентов одновременно в обеих проекциях, но отображение ГИС только 2D с точки зрения движения агента.

Я заметил, что объекты Geometry, используемые для установки позиции в Geography, имеют поля Coordinate.z, но установка значения z на любое другое значение, кроме NaN, ничего не делает. Я ничего не нашел в документации по этому поводу.

Я планирую реализовать интерфейс Projection и сделать свою собственную проекцию, поскольку я не могу реализовать Geography и ContinuousSpace в одном классе из-за конфликтующих сигнатур методов ('getAdder'). Это кажется довольно сложной задачей, поэтому я подумал, что стоит проверить, есть ли какие-то более эффективные способы решения этой проблемы?


person aliaksei    schedule 15.11.2019    source источник


Ответы (1)


Вы можете поднять точечные маркеры на экране 3D ГИС, переопределив метод repast.simphony.visualization.gis3D.style.MarkStyle ()

public double getElevation(T obj)

это поместит маркер точки на отметке, указанной в метрах на экране 3D ГИС. Объект JTS Coordinate может хранить указанное вами z-значение, но ни один из инструментов Geotools или JTS пространственной математики не использует это значение, поскольку все преобразования CRS основаны на 2D-топографии. Я считаю, что getElevation () в стиле определяет высоту относительно земли, а не уровня моря. Вы можете предоставить в своих агентах метод, который обеспечивает текущую высоту стиля, а затем просто вернуть стиль в agent.getElevation ().

person Eric Tatara    schedule 17.11.2019