当前位置: 首页 > article >正文

Cesium快速入门到精通系列教程二十三:综合

一、viewer.cesiumWidget.container.appendChild()把你自定义的 HTML 元素(弹窗、按钮、图标等)添加到 Cesium 画布的容器里,让它显示在 3D 地球场景上。// 1. 创建一个自定义弹窗 div const infoDiv = document.createElement('div'); infoDiv.style.position = 'absolute'; infoDiv.style.top = '100px'; infoDiv.style.left = '100px'; infoDiv.style.background = 'white'; infoDiv.style.padding = '10px'; infoDiv.innerHTML = '我是显示在地球上的自定义弹窗!'; // 2. 关键:把 div 添加到 Cesium 根容器 viewer.cesiumWidget.container.appendChild(infoDiv);如何删除?方法 1:直接从父容器移除(最简单)// 直接删除你创建的 infoDiv infoDiv.remove();这行代码就能把弹窗从页面上彻底删掉。方法 2:安全判断式删除(推荐)防止元素已经被删了导致报错:if (infoDiv infoDiv.parentNode) { infoDiv.parentNode.removeChild(infoDiv); }如果要多次开关弹窗建议把弹窗存成全局变量,方便开关:// 全局保存 window.infoDiv = infoDiv; // 删除 window.infoDiv?.remove();二、viewer..entities.values作用viewer.entities.values 是一个数组,里面包含了你在 Cesium 中添加的所有实体(点、线、面、标注、模型等),可以用来遍历、查询、修改、删除全部实体。核心作用(最常用)1、遍历所有实体(最常用)批量修改、隐藏、删除所有实体:// 遍历场景中所有实体 viewer.entities.values.forEach(entity = { // 示例1:隐藏所有实体 entity.show = false; // 示例2:修改所有点的颜色 if (entity.point) { entity.point.color = Cesium.Color.RED; } });2、获取实体总数const count = viewer.entities.values.length; console.log('场景中共有实体:', count);3、清空所有实体(替代 removeAll())// 清空所有实体 viewer.entities.removeAll(); // 等价于遍历删除(不推荐,仅理解用) viewer.entities.values.forEach(entity = { viewer.entities.remove(entity); });4、查找符合条件的实体// 查找所有名称为 "测试点" 的实体 const targetEntities = viewer.entities.values.filter(e = e.name === '测试点');三、viewer.scene.canvas.heightviewer.scene.canvas.height 用来获取 / 设置 Cesium 3D 地球画布的高度(像素值),直接控制地球显示区域的高度大小。viewer.scene.canvas→ Cesium 真正渲染 3D 地球的画布元素(就是一个 canvas HTML 标签).height→ 这个 canvas 元素的高度属性(单位:像素 px)核心作用① 获取当前地球画布的真实高度(只读常用)// 获取当前 Cesium 画布高度(像素) const canvasHeight = viewer.scene.canvas.height; console.log('地球高度:', canvasHeight);② 动态修改地球高度(很少直接用)// 强制把地球高度改成 500px viewer.scene.canvas.height = 500;正确获取显示高度:用 offsetHeight如果你想知道页面上实际显示的地球高度,要用:viewer.scene.canvas.offsetHeight // 真实显示高度(推荐)因为:canvas.height = 绘图分辨率高度(内部渲染尺寸)canvas.offsetHeight = 页面显示高度(肉眼看到的尺寸)两者不一定相等!四、viewer.scene.cartesianToCanvasCoordinates()这是 Cesium 中核心坐标转换 API,专门用来把3D 世界坐标(Cartesian3) 转换成浏览器 2D 屏幕坐标(Canvas 坐标),是实现自定义 DOM 弹窗、标签、跟随鼠标元素的关键方法。一句话总结:将 Cesium 三维场景中的点,转换成浏览器画布上的像素坐标(x, y)让你知道:3D 世界里的某个点,在屏幕上显示在哪个位置。// 1. 定义一个3D世界坐标(比如北京) const position = Cesium.Cartesian3.fromDegrees(116.4, 39.9, 100); // 2. 创建你的自定义DOM弹窗 const infoDiv = document.createElement('div'); infoDiv.style.position = 'absolute'; infoDiv.style.background = 'white'; infoDiv.innerHTML = '我是绑定在3D点上的弹窗'; viewer.cesiumWidget.container.appendChild(infoDiv); // 3. 实时更新弹窗屏幕位置(关键!) viewer.scene.postRender.addEventListener(() = { // 核心:3D坐标 → 屏幕坐标 const canvasPosition = viewer.scene.cartesianToCanvasCoordinates(position); if (Cesium.defined(canvasPosition)) { // 把屏幕坐标赋值给DOM infoDiv.style.left = canvasPosition.x + 'px'; infoDiv.style.top = canvasPosition.y + 'px'; } });输入:Cartesian3 坐标:Cesium 3D 场景中的点(经纬度转的世界坐标、实体位置、模型位置等)输出:Cartesian2 坐标:包含 x、y 属性,单位是像素x:距离浏览器画布左侧的像素距离y:距离浏览器画布顶部的像素距离关键特性 注意事项:必须在渲染循环中调用地球转动、缩放时,屏幕坐标会实时变化,所以要放在 postRender 事件里更新。坐标原点转换后的 x/y 是相对于 Cesium Canvas 画布,不是整个浏览器窗口。五、viewer.scene.postRender.addEventListener()在 Cesium 地球每完成一帧渲染之后 **,自动执行你指定的代码,用来做实时更新、动画、跟随、动态效果等。1. 它到底是什么?viewer.scene.postRender→ 渲染完成事件(每一帧渲染完都会触发一次)addEventListener()→ 给这个事件绑定一个监听函数简单理解:Cesium 地球每秒会刷新 60 次(60 帧)每刷新完一帧画面,就立刻执行一次你写的函数相当于一个无限循环的实时更新器2. 核心作用(最常用场景)它专门用来做必须实时更新的功能:让弹窗 / 标签 跟随 3D 点位移动(最常用!)动态修改实体属性(位置、颜色、大小)自定义动画效果实时计算相机位置实时更新 UI 数据3. 最典型使用示例(点位跟随弹窗)// 1. 创建一个自定义 HTML 弹窗 const div = document.createElement('div'); div.style.position = 'absolute'; div.style.color = 'white'; div.innerHTML = '我会跟着点位动'; viewer.cesiumWidget.container.appendChild(div); // 2. 重点:每帧渲染后都更新弹窗位置 viewer.scene.postRender.addEventListener(() = { // 实时把 3D 坐标 → 屏幕坐标 const canvasPosition = viewer.scene.cartesianToCanvasCoordinates(你的3D坐标); if (canvasPosition) { // 让弹窗跟着点位走 div.style.left = canvasPosition.x + 'px'; div.style.top = canvasPosition.y + 'px'; } });!DOCTYPE html html lang="en" head meta charset="UTF-8" / meta content="width=device-width, initial-scale=1.0" / title实体实时流畅移动/title !-- 引入Cesium库 -- link / script/script style * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: "Arial", sans-serif; background-color: #000; color: #e0e0e0; overflow: hidden; height: 100vh; } #cesiumContainer { width: 100%; height: 100%; position: absolute; } /style /head body !-- Cesium容器 -- div/div script // 设置Cesium访问令牌(实际使用中需要替换为自己的token) Cesium.Ion.defaultAccessToken = "accessToken"; // 初始化地球视图 const viewer = new Cesium.Viewer("cesiumContainer", { sceneMode: Cesium.SceneMode.SCENE3D, animation: false, timeline: false, fullscreenButton: false, homeButton: false, geocoder: fal

相关文章:

Cesium快速入门到精通系列教程二十三:综合

一、viewer.cesiumWidget.container.appendChild() 把你自定义的 HTML 元素(弹窗、按钮、图标等)添加到 Cesium 画布的容器里,让它显示在 3D 地球场景上。 // 1. 创建一个自定义弹窗 div const infoDiv = document.createElement(div); infoDiv.style.position = absolute…...

JAVA数据结构 DAY8-堆

本系列可作为JAVA学习系列的笔记,文中提到的一些练习的代码,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 点赞关注不迷路!您的点赞、关注和收藏是对小编最大的支持和鼓励! 系列文章目录…...

2026-03-17 每日作战任务:RAG 语料高效切分(Text Chunking)与处理

2026-03-17 每日作战任务:RAG 语料高效切分(Text Chunking)与处理每日学习代码关联仓库地址:https://gitee.com/lqx_learn/java-ai.git一、 业务场景 昨天我们运用 JDK 17 的 FileChannel 与 MappedByteBuffer,实现了大…...

Android Studio 安装教程(Windows 超详细图文版)

本教程将从 准备工作→ 下载 → Android Studio安装 → SDK配置 → 创建第一个项目 全流程讲解,适合 AndroidAndroid开发零基础入门。 一、Android Studio简介 Android Studio 是 Google 官方推出的 Android应用开发IDE,用于开发 Android APP。它基于 I…...

SPI子系统源码剖析--(2)Spi_Master驱动框架

1. spi_masterspi_master对应spi控制器,是对引脚的管理,同时可以通过cs引脚选择从设备发送消息2. SPI传输概述1.1 数据组织方式使用SPI传输时,最小的传输单位是"spi_transfer",对于一个设备,可以发起多个spi…...

速看!!安全员ABC证靠谱的查询方式有哪几种?分别是怎么查询呢?

很多人报考安全员都会有疑虑,担心自己考的安全员不是正规的,考出来没有用,不能在正规网站查询到,今天星禾智慧老师告诉您安全员ABC靠谱的查询方式,保证你拿到的证书不再有假🍎🧤一、湖北安全员A…...

软件综合项目-mqtt

依赖的第三方库https:CURL库SQLite:SQLite库MQTT库:Paho库MQTT属于应用层协议,支持其实现的传输协议为TCPHTTPS适用于传输的数据量比较大情况,传输方式为字符单向传输MQTT传输数量比较小,二进制传输&#x…...

2026人事系统排行榜:一体化+AI,11家企业谁是TOP选手?

2026年一体化AI人事系统TOP11深度评测:谁领跑AI原生时代?2026年,HR SaaS行业已全面迈入AI原生架构全链路一体化的竞争新阶段。企业对人系统的核心诉求,从“功能叠加AI”进化为“从底层架构融入AI”,要求AI能贯穿招聘、…...

ssm+java2026年毕设社区疫情管理系统【源码+论文】

本系统(程序源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于社区公共卫生应急管理问题的研究,现有研究主要以宏观层面的城市公共卫生体系构建、重大疫情应急响应机制为主&…...

【亲测好用】数据权限管理能力演示

导言: 作为一名企业管理者或业务人员,您是否曾遇到过这样的烦恼:(1)销售人员看到了不该看的财务数据?(2)合作伙伴访问了超出约定范围的信息?(3)不…...

Paperzz AI 毕业论文写作:从选题到成文,本科论文高效交付的智能解决方案

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿paperzz - 毕业论文-AIGC论文检测-AI智能降重-ai智能写作https://www.paperzz.cc/dissertation 在本科毕业论文的创作路上,从确定选题到完成初稿,从文献梳理到格式规范,每…...

Paperzz AI 初稿引擎:重构本科毕业论文写作,从选题到终稿一站式高效通关

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿paperzz - 毕业论文-AIGC论文检测-AI智能降重-ai智能写作https://www.paperzz.cc/dissertation 引言 本科毕业论文的创作,是大学生学业生涯的收官之战,也是对专业知识与学术能力的综…...

泰思特电子分享_EMC测试电流探头选型差异性及影响因素探讨

本文主要进行EMC测试电流探头选型差异性及影响因素探讨,围绕电流探头核心技术指标进行介绍,根据EMC测试不同标准、不同测试项目对电流探头的需求差异,分析了电流探头选型的关键影响因素以及国内外主流厂家不同型号产品的对比,为EM…...

基于能量分配的光伏混合储能系统仿真模型 ①光伏:采用mppt控制实现最大功率跟踪 ②蓄电池与超...

基于能量分配的光伏混合储能系统仿真模型 ①光伏:采用mppt控制实现最大功率跟踪 ②蓄电池与超级电容:构成混合储能系统,电池实现连续功率供应,超级电容提供瞬态功率供应 ③拓扑:光伏DC/DC采用boost变换器,混…...

APM使用LUA脚本发送实现遥控器PWM信号输出CAN协议信号

需求:由于舵机是CAN总线舵机,需实现APM开源飞控遥控器输入PWM通道到CAN的发送。 方法1:修改APM固件源码,编译,运行,测试。实现复杂。 方法2:使用lua脚本。实现简单 目前采用方法2,使…...

LangGraph 核心概念

LangGraph是LangChain 生态的 “进阶编排框架”,是 AgentExecutor升级版,基于图结构解决复杂工作流 / 多智能体问题,兼容 LangChain 所有组件。AgentExecutor 是「单智能体固定循环执行器」,适合简单线性任务;LangGrap…...

零基础搭建免费IP代理池:从原理到实战的保姆级指南

在数据驱动型业务中,很多企业都会接触到“IP代理池”这一概念。尤其是在进行公开数据整合、市场信息监测等场景时,单一IP往往难以支撑持续稳定的请求需求,这时代理池就成为重要基础设施。但对于初学者来说,“搭建代理池”听起来复…...

努力学习了一辈子,突然发现学习没什么用了

从小,我是众人眼中的 “学习标兵”。到现在,每天一节法语,一篇英语阅读,依然雷打不动:但最近几个月,随着老杨的“眨眼猫会务智能体”中对报名、签到、查座、AI会务助理的全面 “AI化改造”,老杨…...

大模型的那点事儿

大模型参数调优完全指南:从模型选择到参数配置 作者:虾兵一号 发布时间:2026-03-17 关键词:大模型参数、模型选择、Temperature、Top P、推理参数、LLM调优 一、前言 在使用大模型 API 时,两个问题最让人头疼&#xf…...

python-web自动化-selenium(1)

目录 资源 驱动器下载流程 设置、创建启动浏览器 设置浏览器Options() 创建启动浏览器webdriver.Chrome() 完整代码 打开网页,关闭标签页,关闭浏览器 打开网址get() 关闭当前标签页close() 完整代码 最大化最小化 最大化maximize_window() 最…...

AI智能水库图像识别数据集 水面漂浮物识别 水面分割识别 河道护栏分割数据集 YOLO格式数据集第10573期

数据集文档数据集概览 本数据集为实例分割场景专用数据集,聚焦于水处理场景下的关键目标识别与分割任务,为工业视觉算法提供高质量标注数据支撑。项目内容类别数量及中文名称4类:水面、粗格栅1、粗格栅2、悬浮物数据总量100张数据集格式YOLO核…...

关于密码破解的方式

当重启虚拟机或者开启虚拟机时,当界面跳出时,快速将鼠标点进虚拟机中,按向下或者向上箭头防止界面跳转,并按如下步骤进行:1 在界面中选择第二个选项2 按e键进入如下界面,按向下向上键将光标移动到quiet单词后面&#x…...

SAP 系统配置、落地即用的《SAP 成本分摊循环配置清单》,包含事务码、主数据、循环结构、分配 / 分摊规则、计算公式、案例数据

SAP 系统配置、落地即用的《SAP 成本分摊循环配置清单》,包含事务码、主数据、循环结构、分配 / 分摊规则、计算公式、案例数据一、通用主数据(所有案例共用,先建好)1. 成本中心(标准示例)成本中心名称类型…...

基于MATLAB_SIMULINK_SIMSCAPE建模的用于组件尺寸的电动和混合动力飞机模型

基于MATLAB/SIMULINK/SIMSCAPE建模的用于组件尺寸的电动和混合动力飞机模型第一步:主脚本 (AircraftSizingMain.m) 在 MATLAB 中运行此脚本,它将定义参数并启动仿真。 matlab 编辑 1%% Aircraft Component Sizing Simulation Script 2% 适用于电动 (AE) …...

C 语言03:结构体——自定义数据类型的万能基石

结构体(struct)是 C 语言的核心自定义数据类型,用于将不同类型的数据(如姓名、年龄、日期)打包成一个整体,极大简化了复杂数据的管理。本文从定义到使用,极简解析结构体的核心用法。一、结构体类…...

SAP 成本分摊逻辑与案例(含具体数据)

SAP 成本分摊核心是通过 ** 分配(Allocation)与分摊(Assessment)** 两种循环,将间接成本中心归集的费用,按预设规则(统计指标、比例、作业量等)结转至直接成本中心、生产订单、内部订…...

C语言当中的字符函数

字符分类函数可以很好的帮助我们进行字符的分类其中头文件为<ctype.h>现在举个列子&#xff0c;进行大小写转换islower运用函数的代码int i0&#xff1b;char str【】“CBASJDHsfjaf”&#xff1b;char c;while(str[i]){cstr[i];if(islower(c))c-32;putchar(c)i;}远高于平…...

思特威SC1220IOT——为AI眼镜量身打造的超低功耗影像之心

导读: 随着AI大模型向端侧迁移,AI智能眼镜被视为继智能手机之后最具潜力的下一代个人计算平台。然而,要在极其有限的轻量化镜架中塞进高性能的“眼睛”,同时保证全天候续航与即时响应,对核心的CMOS图像传感器提出了严苛挑战。近日,国内技术先进的CMOS图像传感器供应商思特…...

算法设计与分析-习题8.3

目录 1.完成本节构造最优二叉查找树的例题中余下的计算。 2. a.算法OptimalBST的时间效率为什么是立方级的? b.算法 OptimalBST 的空间效率为什么是平方级的? 3.写一个线性时间算法的伪代码&#xff0c;来从根表中生成最优二叉查找树。 4.请设计一种在常量时间(每个求和…...

把数据交给松鼠,把安全留给自己(二):异地同步——把第二份数据放在灾害够不到的地方

2021年郑州暴雨&#xff0c;某科技公司办公室进水&#xff0c;服务器和放在同一房间的备份硬盘一起泡水&#xff0c;十年积累的研发数据全部损毁。 这不是孤例&#xff0c;而是无数中小企业灾备盲区的真实写照。 火灾、水灾、盗窃、雷击……这些“小概率”事件&#xff0c;一旦…...