0

编辑:刚刚意识到我传递了一个坐标,而它需要一个数组。将检查和更新。

需要将模型放置在地面(水)上。

据我了解,相对高度(如relativeToGround在 KML 中)尚未实现。因此,目前最好的解决方案是向地形提供者询问某个位置的地形高度,并相应地调整模型的高度 [ 1 ](然后以某种方式处理细节级别的变化)。

这是Sandcastle的简单示例。我只是试图获得一个位置的高度。我希望Cesium.sampleTerrain返回一个promise比将Cartographicheight修改为该位置的地形高度来解决的问题。但它只是立即(同步?)解决未修改的输入(height == 100)。

var viewer = new Cesium.Viewer('cesiumContainer');

viewer.terrainProvider = 
    new Cesium.CesiumTerrainProvider({ url : '//cesiumjs.org/stk-terrain/tilesets/world/tiles' })
//    new Cesium.CesiumTerrainProvider({ url : '//cesiumjs.org/tilesets/terrain/smallterrain' })
//    new Cesium.VRTheWorldTerrainProvider({ url : '//www.vr-theworld.com/vr-theworld/tiles1.0.0/73/' })
//    new Cesium.EllipsoidTerrainProvider()
;

viewer.camera.flyTo({ 
    destination: Cesium.Cartesian3.fromRadians(2.5269731598108605, -0.669099684580548, 100)
  , duration: 0 
});

Cesium.sampleTerrain(viewer.terrainProvider, 11, viewer.camera.positionCartographic.clone())
.then(function(x) { console.log(x) })
;
  1. 代码有什么问题?
  2. 有没有替代方法?

谢谢你。

4

1 回答 1

1

您可以使用下面的 javascript 来填充具有高度的位置数组:

var cartographicPositions = Cesium.Ellipsoid.WGS84.cartesianArrayToCartographicArray(points);
// points are an array of positions(x,y,0)
                var HeightCheck=setInterval(function(){
                        if (cesiumTerrainProviderHeightmaps.ready)
                        {
                            clearInterval(HeightCheck);
                            $("#info2a").html("ok wait :)" );
                            var promise = Cesium.sampleTerrain(cesiumTerrainProviderHeightmaps, 11, cartographicPositions);
                            Cesium.when(promise, function(cartographicPositions) {
                                    $("#info2a").html("ok got the altitudes" );

                                });
                        } else {
                            $("#info2a").html("Waiting for height data of terrain...." );
                        }
                    },1000);
于 2015-02-09T11:30:24.273 回答