cesium入门学习三
这期主要学习一下鼠标点击事件以及鼠标滚轮事件。
学习目录总结:
cesium入门学习一-CSDN博客
cesium入门学习二-CSDN博客
1.鼠标事件
1.1 点击鼠标左键显示经度、纬度、高度
效果:
js代码:
var viewer = new Cesium.Viewer('cesiumContainer');// 添加鼠标点击事件
viewer.screenSpaceEventHandler.setInputAction(function (event) {// 获取鼠标点击的位置var clickPosition = viewer.scene.pickPosition(event.position);// 检查是否点击到有效的三维位置if (Cesium.defined(clickPosition)) {// 将笛卡尔坐标转换为经纬度var cartographic = Cesium.Cartographic.fromCartesian(clickPosition);var longitude = Cesium.Math.toDegrees(cartographic.longitude).toFixed(6); // 转换为度并保留小数var latitude = Cesium.Math.toDegrees(cartographic.latitude).toFixed(6);var height = cartographic.height.toFixed(2); // 高度保留两位小数// 在点击点绘制一个红色标记viewer.entities.add({position: clickPosition,point: {pixelSize: 10,color: Cesium.Color.RED,outlineColor: Cesium.Color.BLACK,outlineWidth: 2,},label: {text: `Lon: ${longitude}\nLat: ${latitude}\nAlt: ${height}`,font: '14px sans-serif',style: Cesium.LabelStyle.FILL_AND_OUTLINE,outlineWidth: 2,outlineColor: Cesium.Color.BLACK,verticalOrigin: Cesium.VerticalOrigin.BOTTOM, // 标签位置位于点上方pixelOffset: new Cesium.Cartesian2(0, -20) // 标签偏移量}});}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
1.2 鼠标左键点击连成轨迹线
效果:
代码:
// 初始化 Cesium Viewer
var viewer = new Cesium.Viewer('cesiumContainer');// 存储轨迹点
var trackPoints = [];// 创建轨迹线实体
var trackLine = viewer.entities.add({polyline: {positions: trackPoints,width: 2,material: Cesium.Color.BLUE}
});// 添加鼠标点击事件
viewer.screenSpaceEventHandler.setInputAction(function (event) {// 获取鼠标点击的位置var clickPosition = viewer.scene.pickPosition(event.position);// 检查是否点击到有效的三维位置if (Cesium.defined(clickPosition)) {// 将笛卡尔坐标转换为经纬度var cartographic = Cesium.Cartographic.fromCartesian(clickPosition);var longitude = Cesium.Math.toDegrees(cartographic.longitude).toFixed(6); // 转换为度并保留小数var latitude = Cesium.Math.toDegrees(cartographic.latitude).toFixed(6);var height = cartographic.height.toFixed(2); // 高度保留两位小数// 在点击点绘制一个红色标记viewer.entities.add({position: clickPosition,point: {pixelSize: 10,color: Cesium.Color.RED,outlineColor: Cesium.Color.BLACK,outlineWidth: 2,},label: {text: `Lon: ${longitude}\nLat: ${latitude}\nAlt: ${height}`,font: '14px sans-serif',style: Cesium.LabelStyle.FILL_AND_OUTLINE,outlineWidth: 2,outlineColor: Cesium.Color.BLACK,verticalOrigin: Cesium.VerticalOrigin.BOTTOM, // 标签位置位于点上方pixelOffset: new Cesium.Cartesian2(0, -20) // 标签偏移量}});// 添加点到轨迹数组trackPoints.push(clickPosition);// 更新轨迹线的路径trackLine.polyline.positions = trackPoints;}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
1.3 鼠标点击两个点以曲线的方式连接显示
效果:
js代码:
//第13个程序 点击两个点以曲线的方式连接
// 初始化 Cesium Viewer
var viewer = new Cesium.Viewer('cesiumContainer');// 存储点击点的坐标
var points = [];// 添加鼠标点击事件
viewer.screenSpaceEventHandler.setInputAction(function (event) {// 获取鼠标点击的位置var clickPosition = viewer.scene.pickPosition(event.position);// 检查是否点击到有效的三维位置if (Cesium.defined(clickPosition)) {// 在点击点绘制一个红色标记viewer.entities.add({position: clickPosition,point: {pixelSize: 10,color: Cesium.Color.RED,outlineColor: Cesium.Color.BLACK,outlineWidth: 2,}});// 添加点击点到数组points.push(clickPosition);// 如果已有两个点,绘制曲线if (points.length === 2) {drawCurve(points[0], points[1]);points = []; // 清空点列表以准备下一组连接}}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);// 绘制曲线函数
function drawCurve(start, end) {// 插值点数量var numPoints = 50;// 将起点和终点转为 Cartographicvar startCartographic = Cesium.Cartographic.fromCartesian(start);var endCartographic = Cesium.Cartographic.fromCartesian(end);// 插值生成曲线点var curvePoints = [];for (var i = 0; i <= numPoints; i++) {var t = i / numPoints; // 插值参数 [0, 1]var lon = Cesium.Math.lerp(startCartographic.longitude,endCartographic.longitude,t);var lat = Cesium.Math.lerp(startCartographic.latitude,endCartographic.latitude,t);// 使用简单的二次曲线高度效果var height =(1 - t) * startCartographic.height +t * endCartographic.height +Math.sin(Math.PI * t) * 1000; // 高度增加一个波形curvePoints.push(Cesium.Cartesian3.fromRadians(lon, lat, height));}// 添加曲线实体viewer.entities.add({polyline: {positions: curvePoints,width: 2,material: Cesium.Color.YELLOW}});
}
1.4 鼠标点击生成范围圆圈
效果:
代码:
var viewer = new Cesium.Viewer('cesiumContainer');// 添加鼠标点击事件
viewer.screenSpaceEventHandler.setInputAction(function (event) {// 获取鼠标点击的位置var clickPosition = viewer.scene.pickPosition(event.position);// 检查是否点击到有效的三维位置if (Cesium.defined(clickPosition)) {// 在点击点绘制一个红色标记viewer.entities.add({position: clickPosition,point: {pixelSize: 10,color: Cesium.Color.RED,outlineColor: Cesium.Color.BLACK,outlineWidth: 2,}});// 在点击点生成圆形范围createCircle(clickPosition, 1000); // 半径 1000 米}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);// 创建圆形范围函数
function createCircle(center, radius) {// 将中心点转为 Cartographicvar centerCartographic = Cesium.Cartographic.fromCartesian(center);var centerLon = centerCartographic.longitude;var centerLat = centerCartographic.latitude;// 生成圆形的边界点var numPoints = 100; // 圆形边界点数量var positions = [];for (var i = 0; i < numPoints; i++) {var angle = (i / numPoints) * 2 * Math.PI;var offsetLon = centerLon + (radius / 6378137) * Math.cos(angle); // 地球半径近似值 6378137 米var offsetLat = centerLat + (radius / 6378137) * Math.sin(angle);positions.push(Cesium.Cartesian3.fromRadians(offsetLon, offsetLat, centerCartographic.height));}// 添加圆形实体viewer.entities.add({polygon: {hierarchy: positions,material: Cesium.Color.BLUE.withAlpha(0.5),outline: true,outlineColor: Cesium.Color.WHITE,}});
}
相关文章:

cesium入门学习三
这期主要学习一下鼠标点击事件以及鼠标滚轮事件。 学习目录总结: cesium入门学习一-CSDN博客 cesium入门学习二-CSDN博客 1.鼠标事件 1.1 点击鼠标左键显示经度、纬度、高度 效果: js代码: var viewer new Cesium.Viewer(cesiumConta…...
swagger,showdoc,apifox,Mock 服务,dubbo,ZooKeeper和dubbo的关系
Swagger、ShowDoc 和 Apifox 之间的区别与优势 Swagger、ShowDoc 和 Apifox 都是用于 API 文档管理和测试的工具,但它们各有特色和适用场景。以下是详细的比较,并附上每个工具的具体用法示例。 1. Swagger 特点与优势: 广泛采用: Swagger…...

【自信息、信息熵、联合熵、条件熵、互信息】
文章目录 一、自信息 I(X)二、信息熵:衡量系统的混乱程度信息熵 H(X)联合熵 H(X,Y) 三、条件熵H(Y|X) 联合熵H(X,Y) - 信息熵H(X)四、互信息 I(X,Y)五、总结References 一、自信息 I(X) 自信息(Self-information) 是由香农提出的,用来衡量单一事件发生…...
免费资源网站
记录一下 音效 爱给网制片帮素材...

C++--------继承
一、继承的基本概念 继承是 C 中的一个重要特性,它允许一个类(派生类或子类)继承另一个类(基类或父类)的属性和方法。这样可以实现代码的重用和建立类之间的层次关系。 #include <iostream>// 基类 class Base…...

Python PyMupdf 去除PDF文档中Watermark标识水印
通过PDF阅读或编辑工具,可在PDF中加入Watermark标识的PDF水印,如下图: 该类水印特点 这类型的水印,会在文件的字节流中出现/Watermark、EMC等标识,那么,我们可以通过改变文件字节内容,清理掉…...
改进爬山算法之四:概率爬山法(Probabilistic Hill Climbing,PHC)
概率爬山法(Probabilistic Hill Climbing,PHC)是一种局部搜索算法,它结合了随机性和贪婪搜索的特点,是对爬山算法(Hill Climbing Algorithm)的一种变体或扩展。与传统的爬山法不同,PHC不是总是选择最优的邻居作为下一步的移动,而是以一定的概率选择最优邻居,同时以一…...

解读DeepseekV3
本年度还剩几天,Deepseek就发布了这么值得惊喜的产品,我觉得是真正做AI,也喜欢AI同学,对这个魔幻的2024年12月,一定是未来多少年想起都能回忆起这波澜壮阔的岁月。 我见过的最省的GPT4o,Claude,…...
【网络安全 | 漏洞挖掘】如何通过竞态条件发现账户接管漏洞
未经许可,不得转载。 文章目录 背景正文设置竞态条件实现漏洞背景 目标应用允许用户创建项目。这些项目中包含多个用户角色,每个角色权限不同(如所有者、管理员、成员管理者等)。用户可通过接受邀请来加入项目,而只有项目所有者才能通过输入邮箱将项目所有权转移给其他用…...

串口通信标准RS232、RS422、RS485有什么区别和不同
目录 第一个区别:硬件管脚接口定义不同: 第二个区别、工作方式不同 第三个区别、通信方式不同 第四个区别,逻辑特性不同 第五个区别、抗干扰性、传输距离和传输速率也不同 RS-232与RS-485对比 RS-422与RS-485对比 今天给大家分享的是&…...

win版ffmpeg的安装和操作
一、ffmpeg软件安装: ffmpeg是一个通过命令行将视频转化为图片的软件。 在浏览器搜索ffmpeg在官网里找到软件并下载(不过官网很慢),建议用这个下载。 下载的文件是一个zip压缩包,将压缩包解压,有如下文件…...
力扣56. 合并区间
此题在技巧上需要掌握Lambda表达式,在 C 的 Lambda 表达式 中,[] 是 捕获列表(capture list),用于指定 Lambda 表达式如何访问其外部作用域的变量。 [捕获列表](参数列表) -> 返回类型 {函数体 };• 捕获列表&…...

2024基于大模型的智能运维(附实践资料合集)
基于大模型的智能运维是指利用人工智能技术,特别是大模型技术,来提升IT运维的效率和质量。以下是一些关键点和实践案例: AIOps的发展:AIOps(人工智能在IT运维领域的应用)通过大数据分析和机器学习技术&…...
Android Java 版本的 MSAA OpenGL ES 多重采样
最近多次被小伙伴问到 OpenGL 多重采样,其实前面文章里多次讲过了,就是构建2个缓冲区,多重采样缓冲区和目标解析缓冲区。 代码流程 // Framebuffer IDs private int msaaFBO; private int msaaColorBuffer; private int msaaDepthBuffer;pr…...

YOLO11改进-注意力-引入自调制特征聚合模块SMFA
本篇文章将介绍一个新的改进机制——SMFA(自调制特征聚合模块),并阐述如何将其应用于YOLOv11中,显著提升模型性能。随着深度学习在计算机视觉中的不断进展,目标检测任务也在快速发展。YOLO系列模型(You Onl…...

VMware虚拟机安装银河麒麟操作系统KylinOS教程(超详细)
目录 引言1. 下载2. 安装 VMware2. 安装银河麒麟操作系统2.1 新建虚拟机2.2 安装操作系统2.3 网络配置 3. 安装VMTools 创作不易,禁止转载抄袭!!!违者必究!!! 创作不易,禁止转载抄袭…...
Elasticsearch-索引的批量操作
索引的批量操作 批量查询和批量增删改 批量查询 #批量查询 GET product/_search GET /_mget {"docs": [{"_index": "product","_id": 2},{"_index": "product","_id": 3}] }GET product/_mget {"…...
【Android】application@label 属性属性冲突报错
错误记录 What went wrong: Execution failed for task :app:processDebugMainManifest. > Manifest merger failed : Attribute applicationlabel value(string/app_name) from AndroidManifest.xml:8:9-41is also present at [:abslibrary] AndroidManifest.xml:25:9-47 v…...

手机发烫怎么解决?
在当今这个智能手机不离手的时代,手机发烫成了不少人头疼的问题。手机发烫不仅影响使用手感,长期过热还可能损害手机硬件、缩短电池寿命,甚至引发安全隐患。不过别担心,下面这些方法能帮你有效给手机 “降温”。 一、使用习惯方面…...

【Artificial Intelligence篇】AI 携手人类:共铸未来创作新纪元
引言: 随着科技的飞速发展,人工智能已逐渐渗透到各个领域,尤其是在创作领域,其与人类的合作展现出了前所未有的可能性和潜力。从艺术作品的生成到文学作品的创作,从复杂软件的开发到创新设计的构思,AI 正在…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001
qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类,直接把源文件拖进VS的项目里,然后VS卡住十秒,然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分,导致编译的时候找不到了。因…...

【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space
问题:IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案:将编译的堆内存增加一点 位置:设置setting-》构建菜单build-》编译器Complier...
C/Python/Go示例 | Socket Programing与RPC
Socket Programming介绍 Computer networking这个领域围绕着两台电脑或者同一台电脑内的不同进程之间的数据传输和信息交流,会涉及到许多有意思的话题,诸如怎么确保对方能收到信息,怎么应对数据丢失、被污染或者顺序混乱,怎么提高…...
宠物车载安全座椅市场报告:解读行业趋势与投资前景
一、什么是宠物车载安全座椅? 宠物车载安全座椅是一种专为宠物设计的车内固定装置,旨在保障宠物在乘车过程中的安全性与舒适性。它通常由高强度材料制成,具备良好的缓冲性能,并可通过安全带或ISOFIX接口固定于车内。 近年来&…...
SE(Secure Element)加密芯片与MCU协同工作的典型流程
以下是SE(Secure Element)加密芯片与MCU协同工作的典型流程,综合安全认证、数据保护及防篡改机制: 一、基础认证流程(参数保护方案) 密钥预置 SE芯片与MCU分别预置相同的3DES密钥(Key1、Key2…...
数据库优化实战指南:提升性能的黄金法则
在现代软件系统中,数据库性能直接影响应用的响应速度和用户体验。面对数据量激增、访问压力增大,数据库性能瓶颈经常成为项目痛点。如何科学有效地优化数据库,提升查询效率和系统稳定性,是每位开发与运维人员必备的技能。 本文结…...