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

Cesium轨迹漫游及视角切换

        飞行漫游,就是让Camera飞行。Camera有一些方法可以实现位置、视角的调整,比如flyTo,setView方法。但这些方法并不能沿着我们想要的路径调整,在通过插值的方法不停的调用setView,但这样会造成视图卡顿,而且计算起来也很麻烦。所以我们最好是借助entity,通过跟踪运动中的entity就可以实现Camera的飞行了。官网示例

        刚开始的时候,以为官方会有类似于 viewer.trackedEntity = entity; 的方法来实现第一人称视角,结果找半天并没有发现。后来,想的是通过 viewer.camera.setView 和 viewer.camera.lookAtTransform 之类的方式实现,结果尝试很多次并没有成功。viewer.camera.lookAtTransform 也可以实现固定视角,但是没找到如何改变仰角,效果不太好,因此放弃。最后改变思路,尝试实时监听飞行状态,通过 viewer.camera.lookAt 动态修改视角,实现第一人称视角飞行。

        完成第一视角跟随之后,还需要取消跟随,按照常规来说,有绑定就应该有解绑。通过 onTickEvent = viewer.clock.onTick.addEventListener 绑定,作者认为是 viewer.clock.onTick.removeEventListener,结果发现直接调用一次方法也可以,这样更省事:onTickEvent() 。至此,第一视角跟随功能已可以完全实现!

设置路径

我们将我们直接修改官网的CZML文件,把没用的东西统统删掉。替换成自己的路径。

注意时间(interval)和时间快进倍数(multiplier)的关系
cartographicDegrees中,每一行的参数分别是时间点、经度、纬度、高程。
我设置了18个点,选择三分钟除以10倍,也就是18秒跑完一圈

隐藏路径,把width设为0
隐藏飞机,把billboard删掉

[{"id": "document","name": "CZML Path","version": "1.0","clock": {"interval": "2020-08-04T10:00:00Z/2020-08-04T10:03:00Z","currentTime": "2020-08-04T10:00:00Z","multiplier": 10}},{"id": "path","name": "path with GPS flight data","path": {"width": 0,"leadTime": 10,"trailTime": 1000,"resolution": 5},"position": {"epoch": "2020-08-04T10:00:00Z","cartographicDegrees": [0, 120.184679, 30.250211, 176,10, 120.184507, 30.252099, 173,20, 120.185151, 30.253816, 172,30, 120.185795, 30.254631, 170,40, 120.187125, 30.255704, 170,50, 120.189099, 30.255704, 167,60, 120.19176, 30.255103, 171,70, 120.194249, 30.254331, 165,80, 120.195236, 30.252442, 170,90, 120.195365, 30.250211, 154,100, 120.19455, 30.247808, 132,110, 120.192575, 30.24579, 127,120, 120.189614, 30.244761, 117,130, 120.187297, 30.244803, 113,140, 120.185795, 30.24549, 103,150, 120.183864, 30.247035, 103,160, 120.183907, 30.248795, 107,170, 120.183679, 30.249211, 176,180, 120.184679, 30.250211, 176]}}
]

飞行漫游

我把上面的czml保存成了json格式(它就是json!)并加载。
这里用到了插值,作用是在你拐弯的时候一样如丝般润滑

  viewer.dataSources.add(Cesium.CzmlDataSource.load('./path.json')).then((ds) => {flyEntity = ds.entities.getById('path')flyEntity.position.setInterpolationOptions({interpolationDegree: 5,interpolationAlgorithm: Cesium.LagrangePolynomialApproximation})viewer.trackedEntity = flyEntity})

 

调整视角
调整视角,是在viewer.scene.preUpdate.addEventListener(function () {})中完成的。在这个函数中,调用viewer.camera.lookAt()方法改变视角。

lookAt的第二个参数,可以是坐标向量,也可是角度对象。我这里是用了向量(Cartesian3对象)作为第二个参数。你也可以使用角度对象(HeadingPitchRange,可以参考 这位博主的博客)

我这里是让Camera每时每刻对准某一点,你可以在其中实现更复杂的操作

const target = new Cesium.Cartesian3.fromDegrees(120.189, 30.254, 300)function setRoamView() {if (flyEntity) {const center = flyEntity.position.getValue(viewer.clock.currentTime)if (center) {const vector = new Cesium.Cartesian3(target.x - center.x, target.y - center.y, 300)viewer.camera.lookAt(center, vector)}}
}
viewer.scene.preUpdate.addEventListener(setRoamView)

补充

用户可能会想到停止漫游,两步:

  1. 取消Camera跟踪,即 viewer.trackedEntity = null
  2. 取消事件绑定, viewer.scene.preUpdate.removeEventListener(setRoamView)

文章借鉴:博客地址:大洪、非科班Java出身GISer

相关文章:

Cesium轨迹漫游及视角切换

飞行漫游,就是让Camera飞行。Camera有一些方法可以实现位置、视角的调整,比如flyTo,setView方法。但这些方法并不能沿着我们想要的路径调整,在通过插值的方法不停的调用setView,但这样会造成视图卡顿,而且计…...

构建去中心化微服务集群,满足高可用性和高并发需求的实践指南!

随着互联网技术的不断发展,微服务架构已经成为了开发和部署应用程序的一种主流方式。然而,当应用程序需要满足高可用性和高并发需求时,单一中心化的微服务架构可能无法满足性能和可靠性的要求。因此,构建一个去中心化的微服务集群…...

开集输出和开漏输出

​​​​​​ 首先指明一下以下8中GPIO输入输出模式: GPIO_Mode_AIN 模拟输入; GPIO_Mode_IN_FLOATING 浮空输入; GPIO_Mode_IPD 下拉输入; GPIO_Mode…...

解决内网GitLab 社区版 15.11.13项目拉取失败

问题描述 GitLab 社区版 发布不久,搭建在内网拉取项目报错,可能提示 unable to access https://github.comxxxxxxxxxxx: Failed to connect to xxxxxxxxxxxxxGit clone error - Invalid argument error:14077438:SSL routines:SSL23_GET_S 15.11.13ht…...

【MySQL--->表的约束】

文章目录 [TOC](文章目录) 一、表的约束概念二、空属性约束三、default约束四、zerofill约束五、主键约束六、auto_increment(自增长)约束七、唯一键约束八、外键约束 一、表的约束概念 表通过约束可以保证插入数据的合法性,本质是通过技术手段,保证插入数据收约束,保证数据的…...

github中Keyless Google Maps API在网页中显示地图和标记 无需api key

使用Google Maps API在网页中显示地图和标记的示例博客。以下是一个简单的示例: C:\pythoncode\blog\google-map-markers-gh-pages\google-map-markers-gh-pages\index.html 介绍: 在本篇博客中,我们将学习如何使用Google Maps API在网页中…...

ComPDFKit PDF SDK for Windows Crack

ComPDFKit PDF SDK for Windows Crack 添加了在创建文本框时调整默认属性的支持。 增加了对调整PDF大小时调整宽度的支持。 添加了对编辑文本时更多快捷方式的支持。 优化了文本输入,并将字体样式与原始文本相匹配。 在内容编辑器模式下复制和粘贴时优化了UI交互。 …...

React+Typescript 状态管理

好 本文 我们来说说状态管理 也就是我们的 state 我们直接顺便写一个组件 参考代码如下 import * as React from "react";interface IProps {title: string,age: number }interface IState {count:number }export default class hello extends React.Component<I…...

stable diffusion 运行时报错: returned non-zero exit status 1.

运行sh run.sh安装stable diffusion时报错&#xff1a;ImportError: cannot import name builder from google.protobuf.internal (stable-diffusion-webui/venv/lib/python3.8/site-packages/google/protobuf/internal/__init__.py) 原因&#xff1a;python版本过低&#xff0…...

el-popover弹窗修改三角样式或者位置

el-popover中设置类名 popper-class"filepopver"&#xff0c;我这位置是placement"top-start" <el-popover placement"top-start" popper-class"filepopver" class"filename" width"300" trigger"hover&q…...

Linux驱动开发之点亮三盏小灯

头文件 #ifndef __HEAD_H__ #define __HEAD_H__//LED1和LED3的硬件地址 #define PHY_LED1_MODER 0x50006000 #define PHY_LED1_ODR 0x50006014 #define PHY_LED1_RCC 0x50000A28 //LED2的硬件地址 #define PHY_LED2_MODER 0x50007000 #define PHY_LED2_ODR 0x50007014 #define…...

【SA8295P 源码分析】71 - QAM8295P 原理图参考设计 之 MIPI DSI 接口硬件原理分析

【SA8295P 源码分析】71 - QAM8295P 原理图参考设计 之 MIPI DSI 接口硬件原理分析 一、MIPI-DSI 接口介绍二、高通参考硬件原理图分析:ANX7625 桥接芯片方案2.1 高通参考设计:两路 4-Lane DSI 接口2.2 高通参考设计:DSI0 硬件原理图,将 4 Lane DSI数据通过 ANX7625 桥接芯…...

macOS(m1/m2)破解Sublime Text和Navicat16

破解Sublime Text 说明&#xff1a;全程使用的是终端操作 1. 下载Sublime Text&#xff0c;建议使用brew下载 2. 进入到下载的app的文件夹 cd "/Applications/Sublime Text.app/Contents/MacOS/"3. 执行以下操作以确认版本是否匹配 md5 -q sublime_text | grep -i…...

【排排站:探索数据结构中的队列奇象】

本章重点 队列的概念及结构 队列的实现方式 链表方式实现栈接口 队列面试题 一、队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 FIFO(First In First Out) 入队列&#x…...

Mac OS 中JDK 环境(jdk 1.8.0_831)安装配置、环境变量配置及卸载操作

前言&#xff1a; 摊牌了&#xff0c;本来就有点喜新厌旧的我&#xff0c;特意把系统和开发环境都拉到比较高&#xff0c;想试验一下兼容性和某些新特性&#xff0c;探索了一下新大陆&#xff0c;也见识了各种光怪陆离的妖魔鬼怪。 因为要着手云平台项目的重构改版和新系统的架…...

[JAVAee]Tomcat - Servlet

目录 Tomcat Servlet的工作 创建Servlet ①项目 ②依赖 ③目录 ④代码 ⑤打包 ⑥部署 ⑦验证 Servlet的运行原理 Servlet API HttpServlet 方法 处理Get/POST请求 HttpServletRequest 方法 获取请求中的信息 获取GET请求中的参数 获取POST请求中的参数…...

MAC钓鱼并Root权限上线CS并权限维持,以及所有的坑如何解决

本文转载于&#xff1a;https://www.freebuf.com/articles/web/350592.html 作者&#xff1a;文鸯涂鸦智能安全实验室 制作MAC 一、下载工具 首先从github上下载CrossC2。链接&#xff1a;https://github.com/gloxec/CrossC2/releases/tag/v3.1.0。 根据你CS客户端的操作系统选…...

浅谈OCR中的David Shepard

在OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;中&#xff0c;David Shepard是一种早期的OCR技术&#xff0c;也被称为Shepards Method。 David Shepard是该OCR方法的原始作者。这种方法基于边界追踪算法&#xff0c;用于识别印刷体文本…...

draw.io导出矢量图到word报错text is not svg - cannot display

先参考https://blog.csdn.net/a625750076/article/details/126384831 如果不行&#xff0c;可能是转存的问题 解决方法&#xff1a;直接在draw.io上操作 第一步 第二步 然后再word中粘贴&#xff0c;依旧是矢量图哦&#xff01;...

JVM加强

目录 JVM运行时的数据区&#xff08;内存结构&#xff09;&#xff1a; 线程独享&#xff1a; 线程共享&#xff1a; 什么时候会内存溢出 JVM有哪些垃圾回收算法 GC如何判断对象可以被回收 典型的垃圾回收器 CMS&#xff1a; G1&#xff1a; 类加载器和双亲委派机制&a…...

Apache Weex内存泄漏终极解决方案:7个技巧让应用性能飙升

Apache Weex内存泄漏终极解决方案&#xff1a;7个技巧让应用性能飙升 【免费下载链接】incubator-weex Apache Weex (Incubating) 项目地址: https://gitcode.com/gh_mirrors/in/incubator-weex Apache Weex作为一款高性能的跨平台移动开发框架&#xff0c;在带来便捷开…...

ComfyUI全面掌握-知识点详解——自定义节点安装与首次 AI 绘图(实操+排错)

本文为系列第 6 篇&#xff08;第一章第 5 个知识点&#xff09;&#xff0c;讲解自定义节点的作用与安装方式&#xff0c;手把手教读者加载默认工作流、完成首次 AI 绘图&#xff0c;解读核心参数并排查常见问题。 目录 一、引言&#xff1a;自定义节点是什么&#xff1f;为什…...

口碑好的芯片老化座哪家专业

在芯片制造与测试领域&#xff0c;芯片老化座是一个至关重要的设备。它能够模拟芯片在长期使用中的各种环境条件&#xff0c;提前发现潜在问题&#xff0c;确保芯片在实际应用中的稳定性和可靠性。那么&#xff0c;口碑好的芯片老化座哪家专业呢&#xff1f;今天我们就来详细探…...

基于Godot与Roslyn构建现代化.NET IDE:SharpIDE架构解析与实践

1. 项目概述&#xff1a;一个为.NET开发者打造的现代IDE如果你是一个.NET开发者&#xff0c;尤其是长期使用C#进行开发&#xff0c;那么你肯定对Visual Studio和Visual Studio Code这两款工具又爱又恨。Visual Studio功能强大但略显笨重&#xff0c;VS Code轻快但针对.NET的原生…...

【东亚美学AI化里程碑】:全球首份Midjourney Sumi-e风格Prompt工程白皮书(附东京艺术大学合作验证的17组对比测试数据)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;东亚美学AI化的范式跃迁 东亚美学传统强调“留白”“气韵”“物哀”与“间”&#xff08;ma&#xff09;等非显性结构&#xff0c;其核心并非形式完备性&#xff0c;而在于感知张力与意义生成的临界状态…...

BioClaw:基于自然语言对话的生物信息学智能分析平台

1. 项目概述&#xff1a;BioClaw&#xff0c;一个能聊天的生物信息学工具箱 如果你是一名生物医学领域的研究者&#xff0c;我猜你对下面这个场景一定不陌生&#xff1a;你刚拿到一批测序数据&#xff0c;需要先跑个FastQC看看质量&#xff1b;同时&#xff0c;实验室的师弟在…...

大模型选型生死局(企业CTO私藏对比清单):Claude在长文档法律分析胜出32%,Gemini在实时多跳检索快4.8倍——你的业务该选谁?

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;大模型选型生死局&#xff1a;Claude vs Gemini核心能力全景图 在企业级AI应用落地的关键阶段&#xff0c;模型选型已远非单纯比拼参数量或基准分数&#xff0c;而是对推理鲁棒性、上下文工程适配度、多…...

Atlas机器人:人形设计、液压驱动与救灾场景下的技术权衡

1. 项目概述&#xff1a;Atlas&#xff0c;一个充满争议的工程里程碑2013年&#xff0c;当波士顿动力公司为DARPA&#xff08;美国国防高级研究计划局&#xff09;打造的Atlas机器人首次公开亮相时&#xff0c;它在工程技术社区引发的震动&#xff0c;远不止于其令人惊叹的行走…...

京东自动评价终极指南:如何用Python脚本轻松完成批量评价

京东自动评价终极指南&#xff1a;如何用Python脚本轻松完成批量评价 【免费下载链接】jd_AutoComment 自动评价,仅供交流学习之用 项目地址: https://gitcode.com/gh_mirrors/jd/jd_AutoComment 还在为京东购物后的繁琐评价工作烦恼吗&#xff1f;每次大促后面对几十个…...

航拍UAV电力电缆巡检检测数据集_数据集第10027期

航拍UAV电力电缆巡检检测数据集_数据集第10027期 项目简介 面向无人机电力巡检场景的开源目标检测数据集&#xff0c;聚焦电力电缆识别任务&#xff0c;可用于电力线检测、植被与电力线安全距离监测等场景&#xff0c;助力电力巡检智能化。 数据集核心信息 数据规模&#xff1a…...