Skip to content
Cesium中的高度采集方法

简介

在Cesium中,要采集多个点的高度,有两个常用的方法:sampleTerrainMostDetailedclampToHeightMostDetailed。本文将介绍这两种方法的区别、使用案例以及在何种情况下选择使用哪种方法。(若采集单个点则使用sampleTerrainclampToHeight方法类似,此处不再赘述)

sampleTerrainMostDetailed方法

区别:

  • 参数类型:sampleTerrainMostDetailed方法接受的是地形提供者(TerrainProvider)和地理坐标(Cartographic)数组作为输入。
  • 数据加载:该方法将在最大可用瓦片级别上异步查询地形数据集的高度,并返回一个Promise对象。
  • 返回值:该方法返回一个Promise对象,当查询完成后解析为更新后的地理坐标数组。

使用案例:

javascript
const positions = [
Cesium.Cartographic.fromDegrees(86.925145, 27.988257),
Cesium.Cartographic.fromDegrees(87.0, 28.0)
];

const updatedPositions = await Cesium.sampleTerrainMostDetailed(terrainProvider, positions);

在上述示例中,我们首先获取地形提供者对象,然后定义要获取高度的地理坐标位置数组。最后,使用sampleTerrainMostDetailed方法发起异步请求,并等待Promise对象解析后,获取更新后的地理坐标数组。

clampToHeightMostDetailed方法

区别:

  • 参数类型:clampToHeightMostDetailed方法接受的是地形提供者(TerrainProvider)和笛卡尔坐标(Cartesian3)数组作为输入。
  • 数据加载:该方法将在实时渲染场景时使用已加载的地形数据进行高度约束。
  • 返回值:该方法返回一个Promise对象,当查询完成后解析为更新后的笛卡尔坐标数组。

使用案例:

javascript
const cartesianPositions = [
    Cesium.Cartesian3.fromDegrees(86.925145, 27.988257),
    Cesium.Cartesian3.fromDegrees(87.0, 28.0)
];

const updatedCartesianPositions = await viewer.scene.clampToHeightMostDetailed(cartesianPositions);

在上述示例中,我们定义了要获取高度的笛卡尔坐标位置数组。然后,使用clampToHeightMostDetailed方法发起异步请求,并等待Promise对象解析后,获取更新后的笛卡尔坐标数组。

选择使用哪种方法?

  • 如果您已经有地理坐标(Cartographic)位置,可以使用sampleTerrainMostDetailed方法。该方法会异步查询地形数据集的高度,并返回更新后的地理坐标数组。
  • 如果您已经有笛卡尔坐标(Cartesian3)位置,可以使用clampToHeightMostDetailed方法。该方法会使用已加载的地形数据,在实时渲染场景时进行高度约束,并返回更新后的笛卡尔坐标数组。

结论

Cesium中的sampleTerrainMostDetailedclampToHeightMostDetailed方法都可以用于采集当前点的高度。sampleTerrainMostDetailed适用于地理坐标输入,异步查询高度;clampToHeightMostDetailed适用于笛卡尔坐标输入,使用已加载的地形数据进行实时高度约束。根据数据类型和需求选择合适的方法。

Updated at: