【WebGis开发 - Cesium】获取视野中心点,并设置顶视图视角

news2024/12/28 19:02:06

引言

项目开发过程中遇到一个需求,通过一个按钮切换视角为顶视图。
分析了一下这个模糊的需求,首先没有给出切换顶视图后俯视的区域范围,其次没有给出俯视点的高度。
这里可以粗略的认为当前的侧俯视的角度下观看的范围即为俯视的区域范围,当前摄像机的高度为俯视点的高度,以这两点为基准开始编码。

中心点图

整理编码思路

  1. camera设置视角需要笛卡尔坐标系坐标,以及pitch、heading、roll三值。
  2. 获取视野中心点坐标需要屏幕中心像素坐标转笛卡尔坐标转经纬度坐标,此时获取到中心点x,y坐标。
  3. 以当前camera高度为准,获取z坐标。
  4. 将视野中心的x,y结合camera当前的z,将经纬度转为笛卡尔坐标系。
  5. 设置pitch为-1.5702046740690863,heading和roll取camera 当前值。
  6. 以上组成的一组数据{x,y,z,heading,pitch,roll}设置camera视角

代码编写

获取中心点坐标

// 根据屏幕中心像素的坐标获取中心点笛卡尔坐标
const center = viewer.camera.pickEllipsoid(
	new Cesium.Cartesian2(
		viewer.canvas.clientWidth / 2,
		viewer.canvas.clientHeight / 2
		)
	);
//将笛卡尔坐标转化为经纬度坐标
const cartographic = Cesium.Cartographic.fromCartesian(center);
const longitude = Cesium.Math.toDegrees(cartographic.longitude);
const latitude = Cesium.Math.toDegrees(cartographic.latitude); 

以当前camera高度作为z坐标

const cameracartographic = Cesium.Cartographic.fromCartesian(
	scene.camera.position
	);
const height = cameracartographic.height;

结合中心点坐标和camera高度,转换笛卡尔坐标系

const position = Cesium.Cartesian3.fromDegrees(
	longitude,
	latitude,
	height
	);

组合一组camera视角参数,并设置camera

// 组合视角参数
const view = {
	...position,
	heading: scene.camera.heading,
	pitch: -1.5702046740690863,
	roll: scene.camera.roll,
	};
// 执行设置视角方法
setView(view);

//封装设置camera视角函数
const setView = (viewData, duration = 1.5=>{
	viewer.scene.camera.flyTo({
		destination: new Cesium.Cartesian3(viewData.x, viewData.y, viewData.z),
		orientation: {
			heading: viewData.heading,
			pitch: viewData.pitch,
			roll: viewData.roll,
		},
		duration: duration,
	})
}	

实现效果

飞入

需要注意的点

  • 笛卡尔坐标系的xyz中z坐标不可以随意组合,(不能将中心点笛卡尔坐标系的xy和camera笛卡尔坐标系的z结合)需要进行经纬度转换后再组合,然后再反转为笛卡尔坐标系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2151352.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视频美颜SDK核心功能解析:打造高效直播美颜工具方案详解

随着直播行业的迅猛发展,用户对于直播画质和个人形象的要求越来越高。视频美颜SDK作为一项关键技术,已经成为各大直播平台和短视频应用的重要组成部分。通过实时美颜技术,用户能够在直播过程中呈现出更加理想的形象,从而提升直播体…

实验一:Windows下的IIS服务器配置和管理

第一次实验隐藏关很多,稍不留神服务器就寄了。 实验一完成后会有联网问题,问题解决详见番外篇。 实验内容 任务一: 1、建立一个基于主机名www.study.com的站点,站点的主目录为C:\inetpub\wwwroot,给站点建立一个虚拟…

Codeforces Round 973 (Div. 2) F1. Game in Tree (Easy Version)(思维题 博弈)

题目 思路来源 乱搞ac 题解 两个人的策略是一样的,把1到u的路径标记, 如果能走旁边的链(也就是当前点,刨去标记链以外的子树中最长的链), 使得对面走剩余的连通块无法比你大,就走旁边的链&…

业务资源管理模式语言16

示例: 图25 描述了PayForTheResourceTransaction 的一个实例。其中,“Sale”扮演“Resource Transaction”,“Accounts Receivable”扮演“Payment”。 图25——PayForTheResourceTransaction 模式实例 相关模式: PayForTheRes…

特殊类的设计与类型转换

特殊类的设计 1.请设计一个不能被拷贝的类 拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。 C98 C98是怎么设计的呢? class Cop…

从零开始讲DDR(3)——DDRC与DDRPYH

一、DDR的使用 在之前的文章中我们介绍了DDR的基本概念,但是DDR内存的操作不仅仅是简单的数据读取和写入,它包括许多时序要求和信号调度。为了让DDR内存有效运作,系统需要在逻辑层和物理层之间进行大量的协作。我们拿出一张DDR的操作简化状态…

MySQL程序

目录 MySQL程序 常用的MySQL的程序 mysqld程序 mysql客户端 客户端命令的常用的选项 配置文件 配置文件语法 MySQL客户端命令 ​编辑 .sql 文件中执行SQL语句 mysqlcheck (表维护程序) Mysqldump(数据库备份程序) mysql…

单片机项目合集列表——Excel合集列表目录查阅(持续更新)

阿齐Archie《单片机项目合集》专栏项目 为方便查找本专栏的项目,特整理Excel合集列表供查阅(可搜索或按系列查找) 持续更新链接如下: 阿齐单片机项目合集 (kdocs.cn)https://www.kdocs.cn/l/cmrxCxJN05YN 打开链接如下Exce表所…

【开源免费】基于SpringBoot+Vue.JS网上购物商城(JAVA毕业设计)

本文项目编号 T 041 ,文末自助获取源码 \color{red}{T041,文末自助获取源码} T041,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计 六、核…

代码随想录Day50|图论Part01,leetcode题目:98. 所有可达路径

提示:DDU,供自己复习使用。欢迎大家前来讨论~ 文章目录 图论理论基础Part01图的基本概念图的种类 连通性连通图强连通图连通分量强连通分量 图的构造邻接矩阵邻接表 图的遍历方式 深度优先搜索理论基础DFS 与 BFS 区别dfs 搜索过程代码框架深搜三部曲为…

Superset 使用指南之优化数据可视化性能与扩展

1. Superset 概述 什么是 Apache Superset? Apache Superset 是一个开源、现代化的数据可视化和数据探索平台。它通过提供直观的用户界面,使用户能够轻松创建复杂的图表和仪表板,探索海量数据,同时避免传统商业智能(…

Apache James配置连接达梦数据库

项目场景: Apache James配置连接达梦数据库,其他配置中不存在的数据库也可参考此方案。 配置步骤 1、把需要的jar包导入到James 把DmJdbcDriver18.jar复制到下面lib目录下 james-2.3.2\lib 2、 修改连接配置 james-2.3.2\apps\james\SAR-INF\confi…

k8s部署jenkins集群时,使用ThinBackup进行定期备份

一、背景 使用k8s部署jenkins集群的时候,一般会把$JENKSIN_HOME(默认是/var/jenkins_home)进行持久化。 volumeMounts:- name: jenkins-homemountPath: /var/jenkins_home这样,机器重启,保证不会丢失文件。 本文要讲…

杀死端口占用的进程

1、查看端口的进程,以9023为例 (1)方法1 netstat -tunpl|grep 9023 (2)方法2 ss -tulpan |grep 9023 (3)方法3 netstat -ntlp |grep 9023 (4)方法4 lsof -i:9023 …

Linux:虚拟文件系统/proc和self进程

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 /proc目录 在Linux操作系统中,目录/proc是一个虚拟文件系统,称为procfc,用于访问内核和系统的实时状态信息。这个文件系统不同于常规…

下载 B 站封面的正确方式

B 友们经常用一些很好看的图片作为视频封面,但是大部分都不会指出图片来源,为此我们可以下载封面原图,用于保存或者搜索源出处。 这里介绍几个我知道的方法,欢迎补充🤔 ‍ 使用相关客户端 上一篇博客介绍了很多的能…

基于微型5G网关的酒店服务机器人应用

智能机器人在酒店中已经越来越常见,并且也是提升客户体验、提高服务效率的重要工具。然而,尽管这些机器人在自动化服务方面可以发挥着重要作用,但它们仍然面临着一些通信、组网和在线管理方面的痛点。 针对这些难题,可以通过部署微…

【数据结构入门】排序算法之三路划分与非比较排序

文章目录 前言 一、三路划分优化 1.1. 基本思想 1.2. 实现步骤 1.3. 优点 1.4 代码实现 二、非比较排序 2.1 计数排序 2.1.1基本思想 2.1.2具体步骤 2.1.3算法特性 2.1.4算法实现 2.2 基数排序 2.2.1基本思想 2.2.2具体步骤 2.2.3 基数排序的方法 2.2.4算法特…

【高等代数笔记】线性空间(五-九)

3. 线性空间 主线任务:研究线性空间和它的子空间的结构 研究平面 π \pi π上向量共线与不共线的问题: c ⃗ \vec{c} c 与 a ⃗ ≠ 0 \vec{a}\ne\boldsymbol{0} a 0共线 c ⃗ λ a ⃗ ⇔ λ ∈ R ⇔ − λ a ⃗ 1 c ⃗ 0 ⃗ \vec{c}\lambda\vec{…

【白皮书下载】分布式功能安全的创新与突破

近日,Imagination 推出全新性能最高且具有高等级功能安全性的汽车 GPU IP——Imagination DXS GPU,并且是Imagination 第一款带有“分布式安全机制”的处理器。 下载白皮书,获取完整分布式安全机制解决方案 根据 ISO 26262 汽车安全完整性等级…