だから、私はセシウムを使用しており、ポリゴンまたはラインを追加して、地形面のプロパティ境界を表現したいと考えています。
私のポリゴンは平らな/楕円体の表面で正常に動作しますが、残念ながら、地形レイヤーが表示されている場合、ポリゴンは自動的に表面にドレープしません。
当然のことながら、実際には 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);
});