16

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

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

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

我尝试使用我的高度负载位置创建一个多边形实体,但无济于事 - 它只是忽略了高度值。当我阅读文档时,我真的可以看到任何对高度值的引用 - 所有“位置”数组都是二维的?

正在考虑的对高度值的唯一引用是在PolygonOutlineGeometry中,它有一个看起来很有前途的属性,称为perPositionHeight.

这基本上就是我想要的 - 我不想设置整个多边形的高度,我希望使用每个点的高度值..

这是我不成功的尝试之一:

实体/多边形:

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 示例结合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);   

});
4

2 回答 2

8

从 1.13 版开始,铯现在支持GroundPrimitives。它们将覆盖地形。

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

这是铯给出的例子:

var rectangleInstance = new Cesium.GeometryInstance({
  geometry : new Cesium.RectangleGeometry({
    rectangle : Cesium.Rectangle.fromDegrees(-140.0, 30.0, -100.0, 40.0)
  }),
  id : 'rectangle',
  attributes : {
    color : new Cesium.ColorGeometryInstanceAttribute(0.0, 1.0, 1.0, 0.5)
  }
});
scene.primitives.add(new Cesium.GroundPrimitive({
  geometryInstance : rectangleInstance
}));
于 2015-09-02T21:02:50.580 回答
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

折线尚未开始,但将在上述两条完成后立即开始。

于 2015-04-28T17:29:27.537 回答