cesium 鼠标点击获取坐标

本文介绍了使用Cesium在不同场景下获取点击位置坐标的方法,包括椭球面坐标、场景坐标和地标坐标的获取方式,并详细解释了如何通过开启地形深度检测来提高坐标获取的准确性。

LEFT_CLICK
对于鼠标点击事件,传入的参数最好写为 event ,获取位置时调用event.position
MOUSE_MOVE
对于鼠标移动事件,参数最好写为movement,调用的时候分为movement.startPosition和movement.endPosition

handler.setInputAction(function (event) {
 //1.椭球面坐标:获取当前点击视线与椭球面相交处的坐标,在加载地形的场景上获取的坐标有误差
 //var earthPosition = viewer.camera.pickEllipsoid(event.position,viewer.scene.globe.ellipsoid);
 
//2.场景坐标:获取场景中任意点击处的对应的世界坐标,需要开启“地形深度检测”(在未开启“地形深度检测”的情况下只能在3DTile上准确获取空间坐标,开启“地形深度检测”后,viewer.scene.pickPosition 也能在非3DTile上准确获取坐标)
 viewer.scene.globe.depthTestAgainstTerrain = true;
 var earthPosition = viewer.scene.pickPosition(movement.position);
 // console.log(pickPosition, movement.position, pickedFeature);
 if (!Cesium.defined(pickedFeature)) {
     return;
 }
 var cartographic = Cesium.Cartographic.fromCartesian(earthPosition );
 var point = [
     Cesium.Math.toDegrees(cartographic.longitude).toFixed(4),
     Cesium.Math.toDegrees(cartographic.latitude).toFixed(4),
     cartographic.height.toFixed(4),
 ];
//3.地标坐标:获取点击处地球表面的世界坐标,不包括模型、倾斜摄影表面
// var ray = viewer.camera.getPickRay(event.position);
// var earthPosition = viewer.scene.globe.pick(ray, viewer.scene);
if (Cesium.defined(earthPosition)) {
 }
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值