Cesium实战:如何优雅地禁用Entity默认点击事件(附完整代码)

从Entity到InfoBox:拆解Cesium点击交互的完整事件流(附Vue3+EventBus实战代码) 本文深入解析Cesium中从Entity点击到InfoBox显示的完整事件流,详细讲解实体系统与事件机制,并提供Vue3框架下通过EventBus实现组件间数据传递的实战代码。涵盖点位标记、弹窗定位等核心交互功能,帮助开发者高效构建三维地理信息系统。 阅读详情

Cesium实战:如何优雅地禁用Entity默认点击事件(附完整代码)

如果你刚开始用Cesium做三维可视化项目,大概率会遇到一个让人有点烦躁的交互问题:在地图上添加的图标、模型或者图形,每次点击都会自动出现一个绿色的高亮框。这个框不仅样式固定,而且会打断你精心设计的自定义交互逻辑。更让人头疼的是,双击某个实体后,整个地图的视角会被锁定,鼠标左键无法再旋转地图,用户体验瞬间大打折扣。

这些问题,本质上都是Cesium为了提供开箱即用的基础交互体验,而预设的默认行为。对于简单的演示项目,这些默认行为或许够用。但当我们构建一个需要深度定制交互、拥有复杂业务逻辑的地理信息应用时,这些“贴心”的默认设置就成了绊脚石。无论是智慧城市的管理后台、应急指挥的可视化大屏,还是数字孪生的交互界面,我们都需要从开发者手中夺回对交互事件的完全控制权。

这篇文章,就是为你解决这个痛点而写的。我不会只告诉你“关掉某个配置”这种表面方法,而是会带你深入Cesium的事件处理机制,从原理上理解默认行为是如何产生的,并对比多种禁用方案的优劣与适用场景。更重要的是,我会分享在实际项目中,如何将这些方案与自定义的点击、悬停、双击事件优雅地结合起来,构建出既强大又流畅的交互体验。所有讨论都将配有可直接运行的代码示例,你可以直接复制到项目中调试。

1. 理解Cesium的默认点击行为:不只是那个绿框

在动手禁用之前,我们得先搞清楚,当我们点击一个Entity时,Cesium在背后到底做了哪些事情。这不仅仅是隐藏一个绿色选框那么简单,它涉及到Cesium内置的几套交互系统。

1.1 核心交互组件:ScreenSpaceEventHandler与Picking

Cesium中所有屏幕空间(鼠标、触摸)的交互,都依赖于ScreenSpaceEventHandler这个类。你可以把它理解为一个全局的事件监听器管理器。在创建Viewer实例时,Cesium会自动初始化一个默认的ScreenSpaceEventHandler,并为其绑定了一系列默认的输入动作(Input Action)。

当我们点击画布时,事件流大致如下:

  1. 事件触发:鼠标在画布上点击。
  2. 坐标转换:ScreenSpaceEventHandler获取到鼠标点击的屏幕坐标(Cartesian2)。
  3. 场景拾取(Picking):这是关键一步。Cesium会使用viewer.scene.pick(position)方法,根据屏幕坐标去“拾取”这个位置最上层的图形对象。拾取的目标可以是Entity、Primitive或3D Tiles中的对象。
  4. 默认行为执行:如果拾取到一个Entity,Cesium的默认处理器就会执行两件事:
    • 显示选择指示器(SelectionIndicator):也就是那个绿色的高亮框,同时会尝试在InfoBox(信息框)中显示该Entity的description属性内容。
    • 记录选中实体:将该Entity设置为viewer.selectedEntity。

这个过程对于初学者理解场景与对象的交互很有帮助,但它的样式和逻辑是固定的。

1.2 双击视角锁定的原理

双击的默认行为更特殊一些。Cesium为LEFT_DOUBLE_CLICK事件预设了一个动作:将相机视角锁定并跟踪到被双击的实体上。这个功能在浏览单个模型时有用,但在需要自由探索的场景中,它会剥夺用户对相机的控制权,造成“卡住”的感觉。

// 这是一个概念性的伪代码,展示了Cesium内部可能存在的默认双击处理逻辑
viewer.defaultScreenSpaceEventHandler.setInputAction(function(movement) {
    const pickedObject = viewer.scene.pick(movement.position);
    if (Cesium.defined(pickedObject) && pickedObject.id) {
        // 锁定相机到该实体
        viewer.trackedEntity = pickedObject.id;
        // 此时,默认的鼠标左键拖拽旋转地图行为会被覆盖
    }
}, Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);

理解了这些默认行为,我们就可以有的放矢地禁用它。下面介绍两种最核心的禁用思路。

2. 方案一:初始化配置——最简洁的预防式禁用

如果你的项目从一开始就不需要任何默认的交互组件,那么在创建Viewer

Cesium Entity点击事件深度解析:从默认行为到自定义交互 本文深入解析Cesium中Entity点击事件的默认行为与自定义交互实现。详细介绍了如何禁用默认的单击高亮和双击追踪锁定,并通过ScreenSpaceEventHandler构建完整的自定义交互体系,包括实体拾取、自定义高亮与信息展示,帮助开发者实现灵活可控的3D地图应用交互。 阅读详情

相关推荐

Cesium实战:5步搞定飞机轨迹飞行与流光道路特效(附完整代码)

本文详细介绍了如何使用Cesium.js在5步内实现飞机轨迹飞行与流光道路特效。从环境搭建、航线生成到动态材质创建,逐步指导开发者完成沉浸式地理可视化项目,特别包含第一人称视角切换与性能优化技巧,附完整代码示例。

weixin_27011811的博客 215

cesium站立的圆面(cesium篇.36)

听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 (纯原生Cesium技术实现,可以自定义编辑样式)效果如下所示: 该示例运行需要下载“完整代码包” 下面献上完整代码,代码重要位置会做相应解释 <html lang="en"> <head> <meta charset="UTF-8"/> <script src="Build/CesiumUnminifie

地图之家 3081

Transformer模型在语义通信中的实战应用:从信源编码到端到端优化

本文深入探讨了Transformer模型在语义通信中的实战应用,从信源编码到端到端优化。文章分析了Transformer凭借其强大的全局依赖建模能力,如何成为实现高效语义提取与传输的理想架构,并提供了构建可端到端训练系统的具体实现思路与评估方法,旨在为下一代智能通信系统提供技术参考。

o9p0q1的博客 691

【CODESYS】-软件Bug与处理方法(20240710更)

【CODESYS】-软件Bug与处理方法(不定期更新)

qq_35316470的博客 5185

Adams软件安装与配置全攻略:从入门到机器人仿真

机械系统动力学仿真软件Adams是工业机器人开发的重要工具,其安装过程涉及许可证配置、环境变量设置等关键技术环节。专业仿真软件安装通常需要处理系统兼容性、组件依赖和授权验证等工程问题,特别是在机器人控制仿真等场景中,还需集成MATLAB/Simulink等第三方工具。本文以Windows平台为例,详解Adams安装的核心步骤,包括系统环境检查、许可证服务器配置、工业机器人专项模块安装等实践要点,并针对NVIDIA Quadro显卡优化、27500端口通信等常见问题提供解决方案,帮助用户快速搭建可靠的仿真环境

weixin_28523493的博客 199

Spring Cloud 整合(一) CRUD

Springcloud 整合之 CRUDSpringcloud介绍功能概述为什么要选用Springcloud Springcloud介绍 功能概述 实现微服务 Spring Cloud为开发人员提供了工具,以快速构建分布式系统中的某些常见模式(例如,配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式会话,群集状态)。分布式系统的协调导致样板式样,并且使用Spring Cloud开发人员可以快速站起来实现这些样板的服务和应用程序。 为什么要选用Springcloud

Kerwin-Lin的博客 1501

Unity集成阿里云语音AI:从麦克风录音到实时语音合成的全流程实现

本文详细介绍了在Unity中集成阿里云语音AI服务,实现从麦克风录音到实时语音合成的完整流程。通过调用阿里云的语音转文字和文字转语音接口,开发者可以快速为游戏或应用添加语音交互功能,提升用户体验。文章涵盖了环境配置、签名认证、音频处理及项目集成等核心步骤,并提供了实用的调试技巧。

weixin_29224589的博客 323

2025统计建模大赛完整论文

参赛队号:(参赛队无须填写,参赛队号由大赛官网自动生成)2025年(第十一届)全国大学生统计建模大赛参 赛 作 品参赛学校:XXXXXX大学论文题目:海洋叶绿素含量影响因素与预测——基于机器学习与大数据分析预测参赛队员:指导老师:国家知识产权局 统计分析成果 知识产权统计数据公开查询指引(2024版)随着全球气候变化的加剧,海洋碳汇的作用愈发受到重视,尤其是海洋生物通过光合作用吸收二氧化碳的过程,对于全球碳循环和温室气体减排具有重要意义。

2301_79579117的博客 9318

【音视频基础】一篇搞懂视频的各种封装格式

在现代多媒体处理中,视频封装格式扮演着至关重要的角色。不同的封装格式决定了视频文件的存储方式、兼容性以及功能特性。无论是观看高清视频、编辑电影剪辑,还是在互联网上流式传输内容,理解各种视频封装格式的基础知识都是必不可少的。在这篇文章中,我们将详细介绍常见的视频封装格式,探讨为什么需要这些格式,以及它们各自的功能和区别,帮助你在选择和使用视频格式时做出更明智的决定。WEBM理解各种视频封装格式的功能和区别对于选择合适的格式至关重要。

m0_62599305的博客 2480

Wi-Fi数据帧类别

QoS

1042484520@qq.com(邮箱) 3156

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: 昇腾CANN训练营实战:30分钟搞定你的第一个Ascend C算子(附完整代码)
下一篇: Omron G6K继电器避坑指南:3.3V吸合/1.6V释放的极性陷阱与PCB设计要点
python9snake
博客等级 码龄1天 0粉丝 1724原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值