16

だから、私はセシウムを使用しており、ポリゴンまたはラインを追加して、地形面のプロパティ境界を表現したいと考えています。

私のポリゴンは平らな/楕円体の表面で正常に動作しますが、残念ながら、地形レイヤーが表示されている場合、ポリゴンは自動的に表面にドレープしません。

当然のことながら、実際には z/height の値を持っていません。そのため、sampleTerrain.js promise メソッドを使用して、地形に基づいて高さの値を補間しています。この部分は正常に機能し、高さの値を取得します。しかし、その後は?

高さのある位置でポリゴン エンティティを作成しようとしましたが、役に立ちませんでした。高さの値を無視するだけです。docs を読むと、高さの値が取り込まれていることがわかります.すべての「位置」配列は2次元ですか?

考慮されている高さの値への唯一の参照は、PolygonOutlineGeometryにあり、これには と呼ばれる有望な外観のプロパティがありますperPositionHeight

これは本質的に私が望むものです-ポリゴン全体の高さを設定したくありません.すべてのポイントの高さの値を使用したい..

これが私の失敗した試みの1つです:

エンティティ/ポリゴン:

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

セシウムは、地形上のベクトル データをまだサポートしていません。積極的に取り組んでおり、ほとんどの機能は 6 月 1 日にリリースされる Cesium 1.10 で開始されるはずです。そのリリースに含まれないものは、7 月 1 日に 1.11 に含まれるはずです。

特にポリゴンについては、GitHub プル リクエストに従ってください: https://github.com/AnalyticalGraphicsInc/cesium/pull/2618

ビルボードとラベルについては、https ://github.com/AnalyticalGraphicsInc/cesium/pull/2653 をご覧ください。

ポリラインはまだ開始されていませんが、上記の 2 つが終了するとすぐに開始されます。

于 2015-04-28T17:29:27.537 に答える