Относительная высота в цезии

РЕДАКТИРОВАТЬ: только что понял, что я передаю одну координату, а он ожидает массив. Проверим и обновим.

Нужно разместить модель на земле (воде).

Как я понял, относительные высоты (как relativeToGround в KML) еще не реализованы. Итак, на данный момент лучшее решение — запросить у поставщика ландшафта высоту ландшафта в определенном месте и соответствующим образом отрегулировать высоту модели [1] (и чем-то обрабатывать изменение уровня детализации).

Вот простой пример для Sandcastle. Я просто пытаюсь получить высоту для местоположения. Я ожидаю, что Cesium.sampleTerrain вернет promise, который затем разрешается с помощью Cartographic, height измененного на высоту местности в этом месте. Но он просто сразу (синхронно?) разрешается с немодифицированным вводом (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. Есть ли альтернативный подход?

Спасибо.


person sas18    schedule 21.01.2015    source источник
comment
Похоже, вы сами ответили на свой вопрос. Добавление квадратных скобок вокруг третьего параметра в Cesium.sampleTerrain() действительно исправляет вывод этого кода.   -  person emackey    schedule 22.01.2015


Ответы (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);
person Darsoit    schedule 09.02.2015