本文共 1447 字,大约阅读时间需要 4 分钟。
1、地形高度的获取
方法a: 通过事件获取到像素坐标,然后转为世界坐标,再求地形高度
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
handler.setInputAction(function(evt) {
var ray=viewer.camera.getPickRay(evt.position);
var cartesian=viewer.scene.globe.pick(ray,viewer.scene);
var cartographic=Cesium.Cartographic.fromCartesian(cartesian);
var height = cartographic.height的值为地形高度。
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
方法b: 先转为经纬度,通过viewer.scene.globe.getHeight(cartographic) 直接求地形高度,cartographic.height可以为0
方法c: Cesium.sampleTerrain 获取简单地形高度;(异步)
方法d: Cesium.sampleTerrainMostDetailed 获取精确地形高度 ;(异步)
地形高度获取小结:如果你是在事件里获取可用a方法,如果你要是想实时获取可用b,其它情形可用c
2、模型表面高度的获取
方法a(通过鼠标点击获取):
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
handler.setInputAction(function(evt) {
var scene = viewer.scene;
if (scene.mode !== Cesium.SceneMode.MORPHING) {
var pickedObject = scene.pick(evt.position);
if (scene.pickPositionSupported && Cesium.defined(pickedObject) && pickedObject.node) {
var cartesian = viewer.scene.pickPosition(evt.position);
if (Cesium.defined(cartesian)) {
var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
var lng = Cesium.Math.toDegrees(cartographic.longitude);
var lat = Cesium.Math.toDegrees(cartographic.latitude);
var height = cartographic.height;//模型高度
mapPosition={x:lng,y:lat,z:height}
}
}
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
方法b(已知经纬度坐标获取、已知世界坐标同理):
在scene里,提供了两个方法,一个是同步,一个是异步;
其中sampleheight也可以获取地形的高度也可以获取模型的高度。
转载地址:https://blog.csdn.net/weixin_33800724/article/details/113560136 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!