cesium获取鼠标位置的几种api

cesium 写鼠标点击事件时,想获取鼠标点击位置,发现不同场景对坐标需求不一致,获取出来的坐标也不一致。比如以下情形:

  1. 获取点击处屏幕坐标
  2. 获取鼠标点的对应椭球面位置 获取加载地形后对应的经纬度和高程
  3. 获取加载地形后对应的经纬度和高程
  4. 获取倾斜摄影或模型点击处的坐标

1、屏幕坐标

通过 movement.position 获取,鼠标点击位置距离canvas左上角的像素值。

let viewer = new Cesium.Viewer('cesiumContainer');
let handler= new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function (movement) {
     console.log('屏幕坐标', movement.position);
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);

2、世界坐标(Cartesian3)

通过 viewer.scene.camera.pickEllipsoid(movement.position, ellipsoid) 获取,可以获取当前点击位置与椭球面相交处的坐标。其中 ellipsoid 是当前地球使用的椭球对象:viewer.scene.globe.ellipsoid
在这里插入图片描述

let viewer = new Cesium.Viewer('cesiumContainer');
let handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function (movement) {
     console.log('世界坐标', 
     viewer.scene.camera.pickEllipsoid(movement.position, viewer.scene.globe.ellipsoid));
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);

3、场景坐标

通过 viewer.scene.pickPosition(movement.position) 获取,返回根据 场景的深度缓冲区 和 窗口位置坐标 重构的 笛卡尔位置

模型上使用这个坐标比较准确。
在这里插入图片描述

let viewer = new Cesium.Viewer('cesiumContainer');
let handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function (movement) {
     console.log('场景坐标', viewer.scene.pickPosition(movement.position));
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);

4、地表坐标

通过 viewer.scene.globe.pick(ray, scene) 获取,可以获取射线与渲染的地球表面之间的交点。其中 ray = viewer.camera.getPickRay(movement.position)
在这里插入图片描述

let viewer = new Cesium.Viewer('cesiumContainer');
let handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function (movement) {
     let ray = viewer.camera.getPickRay(movement.position);
     let position = viewer.scene.globe.pick(ray, viewer.scene);
     console.log('地表坐标', position);
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);

同一个位置使用不同api,获取的坐标不一样:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值