cesium 鼠标点击事件获取各种坐标

cesium点击事件

new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas)
.setInputAction((movement)=>{
		console.log(movement)
}, Cesium.ScreenSpaceEventType.LEFT_CLICK)

屏幕坐标

屏幕坐标,就是点击后,获取的点距离你的浏览器左边和上边的距离

new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas)
.setInputAction((movement)=>{
		console.log("屏幕坐标:",movement);
}, Cesium.ScreenSpaceEventType.LEFT_CLICK)

在这里插入图片描述

世界坐标(也叫笛卡尔坐标Cartesian3)

我们先来看下,官方文档api

pickEllipsoid(windowPosition, ellipsoid, result) → Cartesian3
windowPostion → 二维坐标(屏幕坐标)
ellipsoid     → 椭球体
result        → 返回结果
文档注释:
	如果选中了椭球面或映射,则返回椭球面或映射在世界坐标下的表面上的点。如果没有选中椭球面或映射,
	则返回undefined

在这里插入图片描述这里是通过二维屏幕坐标转换的,下面,我们来看看三维模式下的操作:

getPickRay(windowPosition, result) → Ray
windowPosition → 屏幕二维坐标
result		   → 返回结果
文档注释:
	在世界坐标中,从摄像机位置通过窗口位置的像素创建一条光线,返回射线
	的笛卡尔坐标位置和方向

在这里插入图片描述
然后,我们发现,返回的结果略微有些差异;然后查阅资料,发现有人把ray这种类型的坐标,也叫地标坐标,就是点击处地球表面的世界坐标,不包括模型、倾斜摄影表面。

场景坐标

pickPosition(windowPosition, result) → Cartesian3
文档注释:
	返回从深度缓冲区和窗口位置重建的笛卡尔坐标位置。从深度缓冲区在二维重建的
	位置可能略有不同,那些重建的三维和哥伦布视图。这是由于透视和正投影深度值分布的差异造成的。
	设置场景#pickTranslucentDepth为true,以包含半透明原语的深度;否则,
	这本质上就是挑选半透明的原语。

上面翻译的比较机械,但是可以简单的理解,这个坐标的获取,是受深度缓冲区影像的,那么我们去看看什么是pickTranslucentDepth

容器的所有三维图形对象和状态在一个铯虚拟场景。一般来说,场景不是直接创建的;相反,它是由CesiumWidget隐式创建的。
contextOptions参数细节:
默认值是:{webgl:{α:假的,深度:真的,模板:假的,平滑:真的,powerPreference:“高性能”,premultipliedAlpha:真的,preserveDrawingBuffer:假的,failIfMajorPerformanceCaveat:假},allowTextureFilterAnisotropic:真正的}
webgl属性对应于用于创建webgl上下文的WebGLContextAttributes对象。
webgl。alpha默认值为false,与标准WebGL默认值true相比,这可以提高性能。如果应用程序需要使用alpha混合将铯合成到其他HTML元素之上,请设置webgl。α为true。
其他webgl属性与WebGLContextAttributes的webgl默认值相匹配。
允许texturefilter蛤异性默认值为true,在支持WebGL扩展时支持蛤异性纹理过滤。将此设置为false将提高性能,但会损害视觉质量,特别是对于水平视图。

也是直接百度翻译的,大概意思就是对视觉的一种影响设置;由于这个坐标需要有模型支持才能显示,所以这里我就不一一展示了.

问题列表:

如何解决坐标偏移?
因为上述坐标都是在没有加高程的情况下,我们知道,作为GIS应用,不可能不加高程的;但是加了高程之后,坐标就存在偏移情况,那么如何解决呢?
首先,我们把已经掌握的知识情报总结一下:

名称作用
屏幕坐标就是点击获取的坐标值,是距离浏览器左上角的距离,含x和y,是像素值
世界坐标-椭球面坐标-pickEllipsoid获取球体上的笛卡尔坐标,受高程影响
世界坐标-场景坐标-pickPosition获取世界坐标,但是最新版本的好像作用变了,是获取模型上的坐标在沙盒里
世界坐标-地标坐标-getPickRay可以获取点击处地球表面的世界坐标,不包括模型、倾斜摄影表面
drillPick1.7版本新加的,选择多个对象用的
scene.pick选择模型用的,与现在的pickPosition合起来用

总结完后,我发现,其实,我们只需要辨别清楚pickEllipsoid和getPickRay在高程时的精度区别即可
首先啊,我们要弄清楚个问题,就是为什么要区分高程对其影响,因为我们在画点,线面时,很多时候,是期望点,线,面是贴地的
在这里插入图片描述
可以看到,当开启高程后,我们画的模型会被高程遮挡;这时,我们需要关闭深度检测,然后还要贴地,当我们都设置好后,看看效果
在这里插入图片描述
明显看到了鼠标点击位置和实际位置的偏移,这个时候,我们换成ray,来试试
在这里插入图片描述然后,问题就解决了…

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李卓书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值