首页 / 浏览问题 / WebGIS / 问题详情
cesium 批量获取iserver发布的地形的高程为undefined
7EXP 2023年05月09日

我使用iserver发布了dem高程数据,地图中可以看到加载了高程数据,,,但是我调用sampleTerrain获取的高度却为空,这是什么原因呢,能获取到该点地形的高度吗?代码如下:

 var a = new Cesium.CesiumTerrainProvider({
        url: "http://192.168.80.253:8090/iserver/services/3D-dem/rest/realspace/datas/ASTGTM2_N27E118_dem%40dem",
        isSct: true, //地形服务源自SuperMap iServer发布时需设置isSct为true
        invisibility: true,
    });
    viewer.terrainProvider = a; 

let terrainProvider = viewer.terrainProvider;

            var positions = [

                Cesium.Cartographic.fromDegrees(86.925145, 27.988257),

                Cesium.Cartographic.fromDegrees(87.0, 28.0)

            ];

            var promise = Cesium.sampleTerrain(terrainProvider, 11, positions);

            Cesium.when(promise, function(updatedPositions) {
               debugger

            });

结果如下:

1个回答

您好, sampleTerrain 是Cesium原生的接口,该接口不是通过数据本身来获取的高度,而是通过屏幕gpu渲染来获取的高度。

所以该接口使用通常是在可见视口内,近距离(能看到地形起伏)的位置,使用鼠标点击获取电话,然后使用该接口来获取高程,

此时因为近距离可见,gpu有渲染此处地形的数据,因此可以转换出来,而其他情况就获取不到了。

因此,建议您使用iserver的空间分析服务来对数据本身进行高程提取,就准确无误并且稳定了。

可以参考:

https://blog.csdn.net/supermapsupport/article/details/120038374

希望可以帮助到您。

9,153EXP 2023年05月09日
谢谢,还有点疑问,就是接口需要场景名和图层名来自哪儿呢?
这个服务是用工作空间发的,这个工作空间的场景名和场景里的图层名。
...