铯如何'悬垂'地形表面上的多边形或线

时间:2015-04-28 06:16:26

标签: javascript cesium

所以,我使用铯,我想添加一个多边形或线来表示地形表面上的属性边界。

我的多边形在平面/椭圆体表面上工作正常,但不幸的是,当显示地形图层时,多边形不会自动覆盖在表面上。

很公平,我实际上没有z /身高值 - 所以我使用sampleTerrain.js promise方法根据地形插入高度值。这部分工作正常,我得到我的身高值。那么呢?

我尝试用我的高度位置创建一个多边形实体,但无济于事 - 它只是忽略高度值。 When I read the docs,我真的可以看到任何关于摄取高度值的参考 - 所有"位置"数组是二维的吗?

正在考虑的高度值的唯一参考是PolygonOutlineGeometry,它具有看起来很有前途的属性perPositionHeight

这基本上就是我想要的 - 我不想设置整个poly的高度,我想要使用每个点高度值。

这是我失败的尝试之一:

实体/多边形:

var entity = viewer.entities.add({
    polygon : {
        hierarchy : cartesianPositions, //array of positions with z values
        outline : true,
        outlineColor : Cesium.Color.RED,
        outlineWidth : 9,
        material : Cesium.Color.BLUE.withAlpha(0.0),
   }
});


底线:我只想要一个多边形或折线实体,它可以很好地放置在地形表面上。

修改

在接受的答案的评论中使用Orange Polygon example并结合sampleTerrain.js,我已经能够模拟'悬垂'一个多边形到地形上,有一个没有z值的位置列表,这里有一个粗略的例子:

var positions = []; // xy position array    

var cesiumTerrainProvider = new Cesium.CesiumTerrainProvider({
    url : '//assets.agi.com/stk-terrain/world'
});
viewer.terrainProvider = cesiumTerrainProvider;

// go off and sample the terrain layer to get interpolated z values for each position..
var promise = Cesium.sampleTerrain(cesiumTerrainProvider, 11, positions);
Cesium.when(promise, function(updatedPositions) {

    var cartesianPositions = Cesium.Ellipsoid.WGS84.cartographicArrayToCartesianArray(updatedPositions);

        var entity = viewer.entities.add({
            polygon : {
                  hierarchy : cartesianPositions,
                  outline : true,
                  outlineColor : Cesium.Color.RED,
                  outlineWidth : 9,
                  perPositionHeight: true,
                  material : Cesium.Color.BLUE.withAlpha(0.0),
            }
        });

    viewer.flyTo(entity);   

});

2 个答案:

答案 0 :(得分:8)

从版本1.13开始,cesium现在支持GroundPrimitives。他们将覆盖地形。

看起来像这样:http://cesiumjs.org/images/2015/09-01/groundPrimitives.gif

这个例子Cesium给出:

cust2

答案 1 :(得分:5)

Cesium还不支持地形上的矢量数据。它正在积极开展工作,大多数功能应该开始出现在6月1日的Cesium 1.10中。任何不能发布的内容都应该是7月1日的1.11。

对于多边形,您可以按照GitHub拉取请求进行操作:https://github.com/AnalyticalGraphicsInc/cesium/pull/2618

对于广告牌和标签,请查看:https://github.com/AnalyticalGraphicsInc/cesium/pull/2653

Polylines还没有开始,但只要上述两个完成就会。