Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Cesium】Cesium坐标转换

【Cesium】Cesium坐标转换

作者头像
Ning@
发布于 2021-11-10 06:57:57
发布于 2021-11-10 06:57:57
3.1K02
代码可运行
举报
文章被收录于专栏:烤包子烤包子
运行总次数:2
代码可运行

Cesium中的坐标系:

1、平面坐标系(Cartesian2);

2、笛卡尔空间直角坐标系(Cartesian3);

3、Cartesian4(unknown,在应用中几乎用不到)

4、Cartographic(地理坐标系下经纬度的弧度表示),通常情况下通过它和WGS84坐标系之间互转。

2.1.1世界坐标

以椭球中心为原点的空间直角坐标系中的一个点的坐标。Cesium中用Cartesian3变量表示,笛卡尔空间直角坐标系,用new Cesium.Cartesian3(x, y, z)创建。

2.1.2 地理坐标

就是测绘中的地理经纬度坐标,地理坐标系,坐标原点在椭球的质心。

经度:参考椭球面上某点的大地子午面与本初子午面间的两面角。东正西负。

纬度 :参考椭球面上某点的法线与赤道平面的夹角。北正南负。

Cesuim中没有具体的经纬度对象,要得到经纬度首先需要计算为弧度,再进行转换。

2.1.3  弧度

Cartographic变量表示。

new Cesium.Cartographic(longitude, latitude, height)。是用弧度表示的经纬度,这里的参数也叫做longitude,latitude,即经度和纬度。弧度即角度对应弧长是半径的倍数。

角度转弧度 π/180×角度 ; 弧度变角度 180/π×弧度。

2.2 坐标转换

Cesium其实是一个封装好的WebGL库,当然这里面就牵扯到好几套坐标问题:屏幕坐标、三维空间坐标、投影坐标。坐标转换肯定是我们在开发任何地理信息系统中经常会碰到的问题,也比较复杂。

“平面坐标系” 和“笛卡尔空间直角坐标系”和“Cartographic”之间的相互转换思路如下所示。

坐标的定义:

1:Cartesian2-----new Cesium.Cartesian2(x, y)

2:Cartesian3---- new Cesium.Cartesian3(x, y, z)

3:Cartographic----new Cesium.Cartographic(longitude, latitude, height) 注:经纬度为弧度单位

转换:

Cartesian3→ Cartesian2,        Cesium.Cartesian2.fromCartesian3(cartesian, result)→ Cartesian2

经纬度坐标(WGS84)→ Cartesian3,    Cesium.Cartesian3.fromDegrees(longitude, latitude, height, ellipsoid, result) → Cartesian3

弧度坐标 → Cartesian3,         Cesium.Cartesian3.fromRadians(longitude, latitude, height, ellipsoid, result) → Cartesian3

Cartesian3→ Cartographic,        Cesium.Cartographic.fromCartesian(cartesian, ellipsoid, result) → Cartographic

经纬度坐标(WGS84)→ Cartographic,   Cesium.Cartographic.fromDegrees(longitude, latitude, height, result) → Cartographic

单位: 经纬度坐标和弧度坐标也可以通过Cesium.Math来转换。

Cesium.CesiumMath.toDegrees(radians) → Number

Cesium.CesiumMath.toRadians(degrees) → Number

2.2.1 坐标系

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new Cesium.Cartesian2(1,1) //表示一个二维笛卡尔坐标系,也就是直角坐标系(屏幕坐标系)
new Cesium.Cartesian3(1,1,1) //表示一个三维笛卡尔坐标系,也是直角坐标系(就是真实世界的坐标系)

2.2.2 二维屏幕坐标系到三维坐标系的转换

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var pick1= scene.globe.pick(viewer.camera.getPickRay(pt1), scene) //其中pt1为一个二维屏幕坐标。

2.2.3 三维坐标到地理坐标的转换

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var geoPt1= scene.globe.ellipsoid.cartesianToCartographic(pick1) //其中pick1是一个Cesium.Cartesian3对象。

2.2.4 地理坐标到经纬度坐标的转换

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var point1=[geoPt1.longitude / Math.PI * 180,geoPt1.latitude / Math.PI * 180]; //其中geoPt1是一个地理坐标。

2.2.5 经纬度坐标转地理坐标(弧度)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var cartographic = Cesium.Cartographic.fromDegree(point) //point是经纬度值
var coord_wgs84 = Cesium.Cartographic.fromDegrees(lng, lat, alt);//单位:度,度,米

2.2.6 经纬度坐标转世界坐标

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var cartesian = Cesium.Cartesian3.fromDegree(point)

2.2.7 计算两个三维坐标系之间的距离

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var d = Cesium.Cartesian3.distance(
    new Cesium.Cartesian3(pick1.x, pick1.y, pick1.z), 
    new Cesium.Cartesian3(pick3.x, pick3.y, pick3.z)
); //pick1、pick3都是三维坐标系

转换到笛卡尔坐标系后就能运用计算机图形学中的仿射变换知识进行空间位置变换如平移旋转缩放。cesium.js为我们提供了很有用的变换工具类, Cesium.Cartesian3(相当于Point3D)Cesium.Matrix3(3x3矩阵,用于描述旋转变换)Cesium.Matrix4(4x4矩阵,用于描述旋转 加平移变换),Cesium.Quaternion(四元数,用于描述围绕某个向量旋转一定角度的变换)。下面举个例子: 一个局部坐标为p1(x,y,z)的点,将它的局部坐标原点放置到loc(lng,lat,alt)上,局部坐标的z轴垂直于地表,局部坐标的y轴指向正北, 并围绕这个z轴旋转angle度,求此时p1(x,y,z)变换成全局坐标笛卡尔坐标p2(x1,y1,z1)是多少?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var rotate = Cesium.Math.toRadians(angle);//转成弧度
var quat = Cesium.Quaternion.fromAxisAngle(Cesium.Cartesian3.UNIT_Z, rotate); //quat为围绕这个z轴旋转d度的四元数
var rot_mat3 = Cesium.Matrix3.fromQuaternion(quat);//rot_mat3为根据四元数求得的旋转矩阵

var pt = new Cesium.Cartesian3(x, y, z);//p1的局部坐标
// m2为旋转加平移的4x4变换矩阵,这里平移为(0,0,0),故填个Cesium.Cartesian3.ZERO
var m = Cesium.Matrix4.fromRotationTranslation(rot_mat3, Cesium.Cartesian3.ZERO);
m = Cesium.Matrix4.multiplyByTranslation(m, pt);//m = m X v

//得到局部坐标原点的全局坐标
var cart3 = ellipsoid.cartographicToCartesian(Cesium.Cartographic.fromDegrees(lng, lat, alt));
//m1为局部坐标的z轴垂直于地表,局部坐标的y轴指向正北的4x4变换矩阵
var m1 = Cesium.Transforms.eastNorthUpToFixedFrame(cart3);
m = Cesium.Matrix4.multiplyTransformation(m, m1);//m = m X m1
var p2 = Cesium.Matrix4.getTranslation(m);//根据最终变换矩阵m得到p2
代码语言:javascript
代码运行次数:0
运行
复制
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/02/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Cesium 入门教程(基于 vue3)
Cesium 是一个开源的 JavaScript 库,专门用于创建世界级的三维地球和地图可视化应用。它提供了强大的工具和功能,使开发者能够轻松地在浏览器中展示高分辨率的地形、影像以及三维模型。Cesium 支持多种数据格式,包括但不限于 3D Tiles、GeoJSON 和 glTF,这使得它成为处理地理空间数据的理想选择。无论是构建虚拟地球、城市规划模拟、还是气象数据分析,Cesium 都能提供必要的技术支持。此外,Cesium 还支持时间动态数据,允许用户通过时间轴查看历史数据变化或预测未来趋势。Cesium 的核心优势在于其无需任何插件即可运行于现代浏览器的能力,这意味着它可以跨平台使用,无论是在桌面端还是移动端都能保证流畅体验。同时,Cesium 提供了丰富的 API 接口,让开发者可以自由定制应用的功能与外观,极大地增强了项目的灵活性和扩展性。随着版本不断迭代更新,Cesium 正逐步成为地理信息系统(GIS)、智慧城市解决方案以及虚拟现实等多个领域不可或缺的技术之一。
用户11404404
2025/03/12
4940
Cesium 入门教程(基于 vue3)
Cesium入门之九:Cesium加载gltf文件
glTF(Graphics Library Transmission Format)是一种用于存储3D模型和场景的格式。它是一种开放的标准格式,可用于在不同的3D引擎和软件之间传输和交换3D模型和场景数据。
九仞山
2023/10/14
3.5K0
Cesium入门之九:Cesium加载gltf文件
Cesium基础使用介绍
前言 最近折腾了一下三维地球,本文简单为大家介绍一款开源的三维地球软件——Cesium,以及如何快速上手Cesium。当然三维地球重要的肯定不是数据显示,这只是数据可视化的一小部分,重要的应该是背后的数据生成及处理等。本文先为大家介绍这简单的部分。 一、 Cesium简介 Github地址:https://github.com/AnalyticalGraphicsInc/cesium。官方介绍如下: An open-source JavaScript library for world-class 3D
魏守峰
2018/04/28
7K0
Cesium基础使用介绍
GCJ-02(高德) BD-09(百度) WGS-84(谷歌)坐标系之间的转换
新建一个 js 文件,直接把下面的代码copy进去。在需要使用的地方导入就可以调用下面的各个转换方法了 —.—
andyhu
2022/12/14
12.3K0
【Cesium】相机姿态与中心点等参数获取
1.经纬度获取 var handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas); handler.setInputAction(function (movement) { //获取鼠标当前位置的经纬度 cartesian = viewer.camera.pickEllipsoid(movement.position); //获取视图中心点的经纬度 //cartesian = viewer.camera.pickEllipsoid(new Ces
Ning@
2021/11/10
1.3K0
Python学习——库Geopy用法之经纬度坐标转换、经纬度距离计算
转换原理:借助第三方API平台,为了方便,Geopy将市面上提供经纬度转换的第三方平台的接口都分别封装在一个类中,借助Geopy模块来调用。
Sparkle^
2022/03/01
5.6K0
地心地固坐标系(ECEF)与站心坐标系(ENU)的转换
我在《大地经纬度坐标与地心地固坐标的的转换》这篇文章中已经论述了地心坐标系的概念。我们知道,基于地心坐标系的坐标都是很大的值,这样的值是不太方便进行空间计算的,所以很多时候可以选取一个站心点,将这个很大的值变换成一个较小的值。以图形学的观点来看,地心坐标可以看作是世界坐标,站心坐标可以看作局部坐标。
charlee44
2021/10/13
9K0
让GIS三维可视化变得简单-地理坐标系统
地理位置也就是坐标说是 GIS 的灵魂不为过吧,像天气预报、火箭发射包括地震、火山等事故发生时,新闻媒体就会说东经 XX 度、北纬 YY 度发生了什么什么,还有高德百度的地图导航、定位等等都需要用到坐标系统,因为没有准确的位置信息就无法表达地物的位置关系,地图查询分析等等也就无从谈起了
isboyjc
2022/03/28
1.1K0
让GIS三维可视化变得简单-地理坐标系统
走进地图(2)-坐标系
    前面简单介绍了下什么是地图,我们主要说说电子地图,而对于电子地图来说,还是先了解什么是坐标系。
XiaoA
2023/05/24
4600
明白了这些术语,才算懂个“球”
最近公司要开展国家2000坐标转换相关的工作,身边的测绘专业的同事给我科普了一下GIS基础知识,甩给我一堆缩写、概念和PPT:
申龙斌
2019/05/08
2K0
明白了这些术语,才算懂个“球”
大地经纬度坐标与地心地固坐标的的转换
要解决这个问题首先得理解地球椭球这个概念,这里直接用武汉大学《大地测量学基础》(孔详元、郭际明、刘宗全)的解释吧:
charlee44
2021/09/07
3.5K0
【教程】详解相机模型与坐标转换
由于复制过来,如果有格式问题,推荐大家直接去我原网站上查看: 相机模型与坐标转换 - 生活大爆炸
小锋学长生活大爆炸
2024/05/25
8080
【教程】详解相机模型与坐标转换
GIS世界里坐标系“黑话”
世界大地测量系统(World geodetic system,简称WGS)是指1960年以来, 由美国国防制图局(DMA)建立的四个世界大地测量系统(WGS60、WGS66、WGS72和WGS84)的统称
追风骚年
2021/11/19
2.4K0
【YashanDB 知识库】为什么 YashanDB 只有 Geometry 类型,没有 Geogrephy 类型
● Geometry:投影坐标系,平面坐标系,笛卡尔坐标系,Srid 默认 2369,基于平面直角坐标系,在该坐标系内计算出的最短路径是一条直线,计算简单,执行起来更快,但是相对于地球球体表面的数据不准确。
用户10349277
2025/02/28
810
地理坐标系与投影坐标系的区别
1、首先理解地理坐标系(Geographic coordinate system),Geographic coordinate system直译为 地理坐标系统,是以经纬度为地图的存储单位的。很明显,Geographic coordinate syst em是球面坐标系统。我们要将地球上的数字化信息存放到球面坐标系统上,如何进行操作 呢?地球是一个不规则的椭球,如何将数据信息以科学的方法存放到椭球上?这必然要求 我们找到这样的一个椭球体。这样的椭球体具有特点:可以量化计算的。具有长半轴,短
用户1075292
2018/01/23
2.2K0
Python pyproj 实现地理坐标转换
pyproj是一个Python库,用于执行坐标转换和投影变换。它基于Proj库,后者是一个C库,用于处理地图投影和坐标变换。pyproj提供了Python语言的接口,使得用户可以方便地使用这些功能。
为为为什么
2024/07/02
1K0
【vue-cesium】在vue上使用cesium开发三维地图(一)
作为一个WebGIS开发,从前端往GIS靠拢,虽说不是纯GIS,但是也了解到一些相关GIS上的东西
玖柒的小窝
2021/11/04
8.1K0
【vue-cesium】在vue上使用cesium开发三维地图(一)
大地经纬度坐标系与Web墨卡托坐标系的转换
我在《大地经纬度坐标与地心地固坐标的的转换》这篇文章中已经论述了大地坐标系/地理坐标系的概念,简单来说就是由经度、纬度以及高程(BLH)确定的坐标系,它是一种曲面坐标。
charlee44
2021/10/26
3.7K0
前端调用Cesium加载三维模型全攻略
想象一下,地球在你眼前旋转,上面还有各种3D模型,是不是很酷?Cesium是一个超酷的库,专门用来创建超炫的3D地球和地图。好,言归正传,今天这篇文章就分享一下前端如何使用Cesium加载三维模型。
china马斯克
2024/08/01
3970
坐标系与矩阵(4):球心坐标与NEU坐标系
前三篇介绍了坐标系和矩阵的数学知识,从本篇开始,我们试图运用这些知识来解决实际问题。
Peter Lu
2021/07/20
3.5K0
坐标系与矩阵(4):球心坐标与NEU坐标系
推荐阅读
相关推荐
Cesium 入门教程(基于 vue3)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验