首页 / 浏览问题 / 三维GIS / 问题详情
Iserver 10i 中如提高场景中获取高度的速度?
142EXP 2020年01月21日

IServer 10i,windows10

现在我需要大批量的获取到 对应的高程 ,通过 scene.getHeight 该接口可以获取到对应的高程

但是存在的存在一个 如果 点数超过10以上 就开始效率变低,100就要10S左右,请问如何对其优化

2 个回答

您好,请问您进行大量高度查询的业务需求是?

getHeight是前端渲染层面的高度获取,除了提升硬件没有太好的办法提高速度。但是除了这个还有一些其他的获取高度的方法(比如通过iserver进行栅格查询等),您可以说一下您的业务需求,看看可不可以走其他的获取思路。
5,560EXP 2020年02月03日
剖面分析,想通过绘制段线条,然后插值100个点得到该线条上的100个 经纬度,再利用其getHeight得到场景(建筑以及地形)中段Z。之后组合数据  与echarts结合。但是通过getHeight得到对应的Z 太慢了, 请问 通过iserver进行栅格查询? 如何实现?因为我现在绘制段上一条线段

栅格查询的只能针对DEM。你的数据会经常变动吗?如果是不变的数据,可以考虑先生成dem(桌面 - 三维分析 - 生成DSM),然后做栅格查询。栅格查询相关示例:

https://iclient.supermap.io/examples/classic/editor.html#query_gridInfosQuery

兄弟,最近我也碰到这种需求。通过循环scene.getHeight获取高程,速度是非常慢的。

后来我发现超图官网坐标拾取那个示例可以获取高程,从而得到启发。

解决思路:

将经纬度坐标转为屏幕坐标,然后参考坐标拾取示例的方法,就能获取这个点的高程。
72EXP 2020年06月02日

我还没考虑到那一块呢,感谢老哥的指教laugh

兄弟,上午我说的那个方法坐标转换可能比较复杂。

我找到了另一种方法sampleHeight(),通过循环调用发现性能不会受到影响。

传入经纬度坐标就可以了,高度可以设为0.

var cartographic = Cesium.Cartographic.fromDegrees(longitude,latitude, 0);
var height = viewer.scene.sampleHeight(cartographic);
console.log(height)

参考文章:

https://blog.csdn.net/caozl1132/article/details/90247208

...