企业定制网站建设公司企业网站优化方案
文章目录
- 问题
- 分析
问题
今天在开发中,甲方提出一个这样的问题,你的高度是怎么算出来的,对此,我只知道使用并不知道怎么来的,因此特意查了一番资料,希望帮助到大家
分析
-
在 Cesium 中,我们可以使用 Cesium 中提供的方法获取地形高度值。使用 viewer.scene.pickPosition 方法来获取指定屏幕位置的地理坐标和高度信息。该方法接受一个屏幕坐标作为参数,并返回一个 Promise 对象,该对象将解析为包含地理坐标和高度信息的 Cartesian3 对象。
-
以下是一个示例代码,演示如何使用 pickPosition 方法获取屏幕位置的高度值:
var viewer = new Cesium.Viewer('cesiumContainer');// 创建一个 ScreenSpaceEventHandler 对象来处理屏幕空间事件
var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);// 注册鼠标左击事件的处理函数
handler.setInputAction(function(movement) {// 获取鼠标点击位置的地理坐标和高度var pickedObject = viewer.scene.pickPosition(movement.position);// 判断是否拾取到了地理位置if (Cesium.defined(pickedObject)) {// 获取地理坐标和高度信息var position = pickedObject.position;var cartographicPosition = Cesium.Cartographic.fromCartesian(position);var height = cartographicPosition.height;console.log('点击位置的高度值为:', height);}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
-
在上述代码中,我们首先创建了一个 Viewer 对象并创建了一个 ScreenSpaceEventHandler 对象来处理屏幕空间事件。
-
然后,我们注册了鼠标左击事件的处理函数。在处理函数中,我们使用 viewer.scene.pickPosition 方法来获取鼠标点击位置的地理坐标和高度信息。
-
如果成功拾取到地理位置,我们将获取到的 Cartesian3 对象转换为 Cartographic 对象,并从中提取出高度值。
-
最后,我们将高度值输出到控制台。
-
请注意,使用 pickPosition 方法获取高度值需要进行地形数据的加载。如果未加载地形数据,将无法获得准确的高度值。你可以根据实际情况进行相应的地形数据加载配置。
那么,Cesium 中提供的方法获取地形高度值是怎么来的,相对于什么参考得出的值
-
在 Cesium 中,获取地形高度值是通过地形数据进行计算得出的。Cesium使用了魔方(Cube)地形数据格式来表示地形。这个格式将地球表面划分为许多小的方块,每个方块包含一个高程值。当需要获取某个位置的高度值时,Cesium会根据该位置所在的方块以及邻近的方块,进行插值计算来估算高度值。
-
具体来说,Cesium使用了地形切片(Terrain Tile)的概念。地形切片是一种预先生成的地形数据块,每个切片都包含了一定区域的地形高程数据。这些地形切片按照一定的层次结构组织起来,构成了整个地球的地形数据。
-
当你使用 viewer.scene.pickPosition 方法获取地理位置的高度时,Cesium内部会找到包含该位置的最适合的地形切片,并从该切片中提取出相应的高度值。
-
高度值是相对于基准椭球体(reference ellipsoid)计算得出的。椭球体是一个与地球形状相似的数学模型,它在地球表面处处与地球相切。Cesium使用国际椭球体(WGS84)作为基准椭球体。高度值表示的是地表相对于基准椭球体表面的垂直距离。
-
需要注意的是,地形数据的精度和分辨率对高度的计算精度有影响。较高的地形数据分辨率可以提供更精确的高度值,但同时也需要更多的计算资源和加载时间。