我正在处理世界风,有一个表面椭圆,但我想设置这个椭圆的高度。
我尝试使用方法moveTo
,或者直接在构造函数中实例化elevation
,但没有任何效果,我的形状仍然在地球上固定。
这是我如何塑造我的形状:
final SurfaceEllipse shape = new SurfaceEllipse();
shape.setRadii(100000, 100000);
shape.moveTo(Position.fromDegrees(50.0, 0.0, 50*20000)); // just a test
layer.addRenderable(shape);
答案 0 :(得分:2)
Position确实需要elevation,这只是double
,与altitude的意思相同(至少根据Position
&# 39; s getters)。
但是,SurfaceEllipse实现了SurfaceObject接口,该接口记录为:
在Globe的表面地形上绘制的可渲染物的通用界面,例如SurfaceShape。 SurfaceObject实现了Renderable和PreRenderable接口,因此可以在任何层或某些任意渲染代码中聚合表面对象。
需要注意的关键词是,"在Globe的表面地形上绘制"。您无法设置高程。它必须是该位置的地球表面的高度。所以你可以阅读它,但不能设置它。
我建议使用另一个类来塑造你的形状。围绕类继承结构反弹,你可以找到你想要的东西。
AbstractGeneralShape将其modelPosition记录为:
这个形状的地理位置。高度与此形状高度模式有关。
因此AbstractGeneralShape
下的任何一个班级都有高度模式的概念。
AbstractShape也有altitudeMode
,其下面是path,这是一个最终记录高度模式的课程。
Path将高度模式记录为:
根据路径的高度模式解释路径位置内的海拔高度。如果高度模式为WorldWind.ABSOLUTE,则高度被视为椭球上方的高度。如果高度模式为WorldWind.RELATIVE_TO_GROUND,则将高度添加到该位置的地形高程。如果高度模式为WorldWind.CLAMP_TO_GROUND,则忽略高度。
为了做你想做的事,你需要确保你不在WorldWind.CLAMP_TO_GROUND
高度模式。
考虑到这一点,请查看Ellipsoid。
由中心位置和三个椭球轴半径定义的一般椭球体积。如果A是南北方向的半径,b是东西方向的半径,c是垂直方向的半径(增加高度),那么A == B == C定义一个球体, A == B&gt; C定义垂直扁平的球状体(盘状),A == B <1。 C定义了一个垂直拉伸的椭球体。
这是一个冗长的方式,说它的构造如下:
使C足够小并且很好地近似二维椭圆。
然而,它实际上仍然是三维的。我发现altitudeMode
的大部分内容都是3D,但Path除外。 Path有一些有趣的地形属性。
您可能希望椭圆在内部打开。在三个维度中称为圆环。它们看起来像这样:
不幸的是,我无法在worldwind API中找到这种形状。但是,您可以从头开始拖拉并创建自己的形状。 http://goworldwind.org/developers-guide/how-to-build-a-custom-renderable/
我在API中最接近的是ExtrudedPolygon,它采用多边形并允许您添加高度。您可以自己定义多边形的形状。挤压形状如下所示:
他们总是让我想起玩耍:
希望它有所帮助。