cesium从入门到进阶(一):坐标系与坐标系转换

news2024/11/17 5:55:11

目录

一、坐标系

1、屏幕坐标系(像素)

1.1 二维笛卡尔平面坐标Cartesian2

1.2 三维笛卡尔空间坐标(世界坐标)Cartesian3

2、地理坐标系

2.1 地理坐标系(弧度)Cartographic

2.2 地理坐标系(经纬度)WGS84

二、坐标系转换

1、WGS84(经纬度)与笛卡尔坐标(Cartesian3)互转

1.1 WGS84转Cartesian3

1.2 Cartesian3转WGS84

2 、Cartesian2屏幕坐标与Cartesian3世界坐标互换

2.1 Cartesian2转椭球面迪卡尔坐标,不包含地形、模型等的坐标

2.2 Cartesian2转场景坐标,包含地形和模型等的坐标

2.3 Cartesian2转地表笛卡尔空间坐标

2.4 Cartesian3转Cartesian2

3、角度经纬度与弧度经纬度互换


        Cesium中常用的坐标有两种WGS84地理坐标系笛卡尔空间坐标系,其中,WGS84地理坐标系包括 WGS84经纬度坐标系(没有实际的对象)和 WGS84弧度坐标系(Cartographic);
笛卡尔空间坐标系包括 笛卡尔空间直角坐标系(Cartesian3)、平面坐标系(Cartesian2),4D笛卡尔坐标系(Cartesian4)。简单的说就说屏幕坐标系地理坐标(弧度)地理坐标(经纬度)这些。

一、坐标系

1、屏幕坐标系(像素)

1.1 二维笛卡尔平面坐标Cartesian2

  • 介绍:  屏幕左上角为原点(0,0),单位为像素值,屏幕水平方向为X轴,向右为正,垂直方向为Y轴,向下为正。

 

  • 获取

                (1)通过鼠标点击直接获取的坐标就是屏幕坐标了,单位是像素值;

                (2)通过new Cesium.Cartesian2(x, y)创建

  •  

1.2 三维笛卡尔空间坐标(世界坐标)Cartesian3

  • 作用:用来做空间位置的变化如平移、旋转和缩放等等
  • 获取

        (1)通过new Cesium.Cartesian3(x, y, z)创建

  •  

2、地理坐标系

2.1 地理坐标系(弧度)Cartographic

  • 作用:Cesium中的地理坐标单位默认是弧度制,用Cartographic变量表示。
  • 获取:通过new Cesium.Cartographic(longitude, latitude, height)创建,其中这里的参数是用弧度表示的经纬度
new Cesium.Cartographic(longitude, latitude, height)   
 
注:这里的经纬度是用弧度表示的,经纬度其实就是角度。弧度即角度对应弧长是半径的倍数。
角度转弧度: π / 180 × 角度 
弧度变角度: 180 / π × 弧度 

2.2 地理坐标系(经纬度)WGS84

  • 作用:Cesuim中没有具体的经纬度对象,要得到经纬度首先需要计算为弧度,再进行转换
  • 获取:
// 经纬度转弧度
Cesium.Math.toRadians(degrees)
// 弧度转经纬度
Cesium.Math.toDegrees(radians)

二、坐标系转换

1、WGS84(经纬度)与笛卡尔坐标(Cartesian3)互转

1.1 WGS84转Cartesian3

方法一:直接通过经纬度转换

// 角度制与笛卡尔转换
// 格式:[113.21, 25.61, 100.0],高度默认为0,可以不写
let cartesian3 = Cesium.Cartesian3.fromDegrees(lon, lat, height);
// 格式:[113.21, 25.61, 113.54, 25.24],不带高度格式的数组
let cartesian3s = Cesium.Cartesian3.fromDegreesArray(coordinates);
// 格式:[113.21, 25.61, 100.0, 113.54, 25.24, 200.0],带高度格式的数组
let cartesian3s = Cesium.Cartesian3.fromDegreesArrayHeights(coordinates);

// 弧度制也类似,使用Cesium.Cartesian3.fromRadians, Cesium.Cartesian3.fromRadiansArray, Cesium.Cartesian3.fromRadiansArrayHeights

方法二:使用椭球体转换

let position = Cesium.Cartographic.fromDegrees(lon, lat, height);
// 单个坐标
let cartesian3 = Cesium.Ellipsoid.WGS84.cartographicToCartesian(position);
// 多个坐标
let cartesian3s = Cesium.Ellipsoid.WGS84.cartographicArrayToCartesianArray(positions);

1.2 Cartesian3转WGS84

方法一:直接转换

注意:直接转换得到的是WGS84弧度制的经纬度坐标,可将其再转换为角度制

 // 3.笛卡尔空间直角坐标系转为地理坐标(弧度制)
 // var cartographic = Cesium.Cartographic.fromCartesian(cartesian3); // 方法1
 var cartographic = ellipsoid.cartesianToCartographic(cartesian3); // 方法2
 // 4.地理坐标(弧度制)转为经纬度坐标
 var lat = Cesium.Math.toDegrees(cartographic.latitude);
 var lng = Cesium.Math.toDegrees(cartographic.longitude);
 var height = cartographic.height;

方法二:通过椭球体转换

// 单个坐标
let cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(cartesian3);
// 多个坐标
let cartographics = Cesium.Ellipsoid.WGS84.cartesianArrayToCartographic(cartesain3Array);

2 、Cartesian2屏幕坐标与Cartesian3世界坐标互换

2.1 Cartesian2转椭球面迪卡尔坐标,不包含地形、模型等的坐标

Cesium中的Camera提供了pickEllipsoid方法:

let cartesain3 = viewer.scene.camera.pickEllipsoid(cartesian2);

2.2 Cartesian2转场景坐标,包含地形和模型等的坐标

使用Scene类中的pickPosition方法实现。

let cartesian3 = viewer.scene.pickPosition(cartesian2);

2.3 Cartesian2转地表笛卡尔空间坐标

通过相机与屏幕点位连线来求取坐标。使用Scene类中globe属性中的pick方法:

let ray = viewer.camera.getPickRay(cartesian2);
let cartesian3 = viewer.scene.globe.pick(ray,viewer.scene);

2.4 Cartesian3转Cartesian2

let cartesian2 = Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene,cartesian3);

3、角度经纬度与弧度经纬度互换

经纬度转弧度:
Cesium.CesiumMath.toRadians(degrees) 
弧度转经纬度:
Cesium.CesiumMath.toDegrees(radians) 

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

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

相关文章

华为不丢失数据解手机屏幕锁华为售后能保资料解锁吗华为锁屏保留数据荣耀手机解锁保数据华为手机保存数据解锁

大家好,今天给大家分享的华为mate9手机忘记密码保资料不清除数据解锁华为手机案例分享:这个用户是从马来西亚邮递回国的华为p30手机进行保资料不清除数据解除华为锁屏密码,由于机主突然的去世,手机里有公司贵重的资料,…

27 openEuler管理网络-通过ifcfg文件配置网络

文章目录27 openEuler管理网络-通过ifcfg文件配置网络27.1 配置静态网络27.2 配置动态网络27.3 配置默认网关27 openEuler管理网络-通过ifcfg文件配置网络 说明: 通过ifcfg文件配置的网络配置不会立即生效,需要在root权限下执行systemctl reload Network…

因为需求理解不到位,视频自动播放列表又重写了

一、一定要理解需求再下手 刚接手一个旧项目,只需要在上面添加一些新功能,和后端对对接口就可以了。因为害怕总是去问别人需求惹人烦,所以好几次讨论给我讲需求我就说我懂了,然后下来自己思考怎么做。最后又因为好多需求理解不到…

【机器学习】机器学习实验一:线性回归(详细代码展示)

文章目录一、前言二、梯度下降理解算法2.1 单变量线性回归2.2 多变量线性回归2.3 正则化2.3.1 L2正则化(Ridge回归)2.3.2 L1正则化(Lasso回归)三、实验一详细代码案例一、前言 本次实验我将分为两个部分进行讲解,第一…

Echarts 模拟汽车速度和油量的仪表显示,两个仪表盘同图

第025个点击查看专栏目录本示例的目标是模拟汽车速度和油量的仪表显示,这里两个仪表盘同图,并倾斜一定的角度。 文章目录示例效果示例源代码(共115行)相关资料参考专栏介绍示例效果 示例源代码(共115行) /*…

ABAP中Literals的用法(untyped literal vs. typed literal)

1. 什么是Literals ? Literals的字面意思即“文字”。其实,Literals就是在ABAP代码中直接指定的一个字符串,但注意哦,这个字符串并不意味着其类型一定是string哦。 要弄清这个概念,就要清楚ABAP对于Literals 的定义和处理方式。…

Win10+vs2019配置与运行RenderMatch+用contextcapture进行重建

Win10vs2019配置与运行RenderMatch用contextcapture进行重建 继上一篇博客,ground image 和aerial image影像匹配结果将会被保存为match.bin二进制文件里 再次运行时,只需要把这个bin文件load进来就可以了,不需要再次进行匹配,修…

推荐五款在手机上写代码的APP(附下载地址)

🌟1.C4droid一款Android设备上的C/C程序IDE🌟2.AIDE一个直接在 Android 设备上开发 Android 应用的集成开发环境基于原版深度定制、适配本土化的操作习惯,一键快速添加常用的代码,大幅提高开发效率。实时的语言翻译,帮…

CUDA的卸载

大家好,下面将进行CUDA的卸载,卸载情况描述如下: > 安装在电脑Windows10系统 (1)安装在电脑Windows10系统,打开控制面板-程序-程序和功能,可以看到自己已经安装过的CUDA,如下所示: (2)依次选中需要卸载的CUDA包,鼠标右键点击卸载即可,一般需要保留3个已经安装…

idea集成Alibaba Cloud Toolkit插件

idea集成Alibaba Cloud Toolkit插件 ​ 使用该插件主要是简化打包、上传、启动服务的相关操作。 ​ 很早之前的方式是使用开发工具(eclipse,idea),使用maven命令完成项目打包(这里指jar),然后通过shell工…

SSL证书的五大优势

SSL 重要吗?我需要 SSL 吗?开车时需要系好安全带吗?看日食时需要戴防护眼镜吗?就前三个问题而言,答案是一个很大的“是”!如果您在 2021 年拥有网站或博客,则需要 SSL。就这么简单。SSL 证书不再…

BigBird:大鸟模型中文生成式长文本摘要实践

1、介绍 BigBird 是一种基于稀疏注意力的Transformer,可将基于Transformer的模型(例如 BERT)扩展到更长的序列。 论文:https://arxiv.org/abs/2007.14062 代码:https://github.com/google-research/bigbird BigBir…

Day902.Memory存储引擎 -MySQL实战

Memory存储引擎 Hi,我是阿昌,今天学习记录的是关于Memory存储引擎的内容。 两个 group by 语句都用了 order by null,为什么使用内存临时表得到的语句结果里,0 这个值在最后一行; 而使用磁盘临时表得到的结果里&…

ARM的工作模式和37个寄存器

一、ARM的工作模式 ARM一共有7种工作模式 模式含义User非特权模式,大部分任务执行在这种模式FIQ当一个高优先级(fast) 中断产生时将会进入这种模式IRQ当一个低优先级(normal) 中断产生时将会进入这种模式Supervisor当复位或软中断指令执行时…

巨头混战,抢着“兜底”自动驾驶安全

诚然,中国汽车行业的发展绝对不会拘泥于电动化,必定会在电动化的基础上,迎接下半场的快速智能化。 2021年6月,长城汽车线控底盘全球首次发布。 彼时,长城汽车技术副总裁宋东先宣布,整合了线控转向、线控制…

基于海鸥算法改进的DELM分类-附代码

海鸥算法改进的深度极限学习机DELM的分类 文章目录海鸥算法改进的深度极限学习机DELM的分类1.ELM原理2.深度极限学习机(DELM)原理3.海鸥算法4.海鸥算法改进DELM5.实验结果6.参考文献7.Matlab代码1.ELM原理 ELM基础原理请参考:https://blog.c…

【数据结构与算法】单链表的增删查改(附源码)

这么可爱的猫猫不值得点个赞吗😽😻 目录 一.链表的概念和结构 二.单链表的逻辑结构和物理结构 1.逻辑结构 2.物理结构 三.结构体的定义 四.增加 1.尾插 SListpushback 2.头插 SListpushfront 五.删除 1.尾删 SListpopback 2.头删 SListpo…

浅谈音视频开发,如何更好的去学习?

Android音视频跟普通的应用层开发相比,的确更花费精力。期间为了学习音视频的录制,编码,处理也看过大大小小的几十个项目。总体感觉就是知识比较零散,对刚入门的朋友比较不友好。所以才萌生了整理一个Android音视频学习路线的想法…

Qss自定义属性

QSS自定义属性 更多精彩内容&#x1f449;个人内容分类汇总 &#x1f448;&#x1f449;QSS样式学习 &#x1f448;文章目录QSS自定义属性[toc]前言一、实现效果二、使用方式1.QSS设置Q_PROPERTY属性样式2.QSS设置动态属性样式3.qproperty-<属性名称>语法14.qproperty-&…

如何在报表生成工具 Stimulsoft 中自定义报告查看器?

Stimulsoft Reports 是一款报告编写器&#xff0c;主要用于在桌面和Web上从头开始创建任何复杂的报告。可以在大多数平台上轻松实现部署&#xff0c;如ASP.NET, WinForms, .NET Core, JavaScript, WPF, Angular, Blazor, PHP, Java等&#xff0c;在你的应用程序中嵌入报告设计器…