3

我正在将 Repast Simphony 用于涉及空域的项目,并希望代理在具有静态地面代理的 GIS 投影上方的 3D 连续空间中移动。目前,我在同一上下文中有单独的投影GeographyContinuousSpace投影,并在两个投影中同时移动代理,但就代理运动而言,GIS 显示仅为 2D。

我注意到Geometry用于在 a 中设置位置的对象Geography有一个Coordinate.z字段,但是将z值设置为除此之外的任何其他值什么NaN都不做。我在文档中没有找到任何关于此的内容。

我计划实现接口并进行自己的投影,因为由于方法签名('getAdder')冲突Projection,我无法在同一个类中实现Geographyand 。ContinuousSpace这似乎是一项相当艰巨的任务,所以我认为值得检查是否有更好的方法来解决这个问题?

4

1 回答 1

3

您可以通过覆盖 repast.simpony.visualization.gis3D.style.MarkStyle() 方法来提升 3D GIS 显示中的点标记

public double getElevation(T obj)

这会将点标记放置在 3D GIS 显示中以米为单位指定的高程处。JTS Coordinate 对象可以存储您所指示的 z 值,但 Geotools 或 JTS 空间数学都没有使用此值,因为 CRS 变换都基于 2D 地形。我相信样式中的 getElevation() 指定了相对于地面而不是海平面的高度。您可以在您的代理中提供一个方法,为样式提供当前高度,然后让样式返回 agent.getElevation()。

于 2019-11-17T18:38:26.567 回答