关于Cesium中的常用坐标系及说明

本文详细介绍了Cesium中常用坐标系之间的转换方法,包括WGS84坐标系与笛卡尔空间直角坐标系之间的转换,以及平面坐标系、笛卡尔空间直角坐标系和Cartographic之间的相互转换。

        Cesium是一个基于JavaScript的开源框架,可用于在浏览器中绘制3D的地球,并在其上绘制地图(支持多种格式的瓦片服务),该框架不需要任何插件支持,但是浏览器必须支持WebGL。

       Cesium中常用的坐标系主要有两种:WGS84坐标系和笛卡尔空间直角坐标系。平时我们常见的某个点的经纬度就是在WGS84坐标系下某个点的坐标,它的坐标原点在椭球的质心;而笛卡尔坐标系主要是用来做空间位置的变化如平移、旋转和缩放等等,它的坐标原点在椭球的中心。

除此之外,还有不常用的坐标系:1、平面坐标系(Cartesian2);2、笛卡尔空间直角坐标系(Cartesian3);3、Cartesian4(unknown,在应用中几乎用不到)4、Cartographic(地理坐标系下经纬度的弧度表示),通常情况下通过它和WGS84坐标系之间互转。


下边主要介绍  “平面坐标系” 和“笛卡尔空间直角坐标系”和“Cartographic”之间的相互转换关系

1:Cartesian2-----new Cesium.Cartesian2(xy)

I: Cartesian3→ Cartesian2Cesium.Cartesian2.fromCartesian3(cartesian, result)→ Cartesian2


2:Cartesian3---- new Cesium.Cartesian3(xyz)

I:经纬度坐标(WGS84)→ Cartesian3

Cesium.Cartesian3.fromDegrees(longitude, latitude, heightellipsoidresult) → Cartesian3
II:弧度坐标→ Cartesian3

Cesium.Cartesian3.fromRadians(longitude, latitude, heightellipsoidresult) → Cartesian3


3:Cartographic----new Cesium.Cartographic(longitudelatitudeheight)    注:经纬度为弧度单位

I:Cartesian3→ Cartographic

Cesium.Cartographic.fromCartesian(cartesian, ellipsoidresult) → Cartographic

II:经纬度坐标(WGS84)→ Cartographic

Cesium.Cartographic.fromDegrees(longitude, latitude, heightresult) → Cartographic


另外,经纬度坐标和弧度坐标也可以通过Cesium.Math来转换

Cesium.CesiumMath.toDegrees(radians) → Number

Cesium.CesiumMath.toRadians(degrees) → Number


举例:

I:经纬度坐标转为笛卡尔空间直角坐标系

var ellipsoid=viewer.scene.globe.ellipsoid;

var cartographic=Cesium.Cartographic.fromDegrees(lng,lat,alt);

var cartesian3=ellipsoid.cartographicToCartesian(cartographic);

var x=cartesian3.x;   var y=cartesian3.y;   var z=cartesian3.z;

II:笛卡尔空间直角坐标系转为经纬度坐标

var ellipsoid=viewer.scene.globe.ellipsoid;

var cartesian3=new Cesium.cartesian3(x,y,z);

var cartographic=ellipsoid.cartesianToCartographic(cartesian3);

var lat=Cesium.Math.toDegrees(cartograhphic.latitude);

var lng=Cesium.Math.toDegrees(cartograhpinc.longitude);
var alt=cartographic.height;


更多坐标系转换请参考:
http://blog.youkuaiyun.com/u013929284/article/details/52503295

new Cesium.Cartesian3(xyz)
Cesium 中,`Cartesian3` 是用于表示三维空间中点的核心类之一。它表示的是一个 **笛卡尔三维坐标系Cartesian Coordinate System)** 中的点,通常用于描述物体在三维空间中的位置。 --- ## ✅ 一、Cesium 中的 Cartesian3 坐标系详解 ### 1. `Cartesian3` 是什么? `Cartesian3` 是 Cesium 提供的一个类,用于表示三维空间中的点,具有三个属性: ```javascript new Cesium.Cartesian3(x, y, z) ``` - `x`: 东方向(East)的偏移(单位:米) - `y`: 北方向(North)的偏移(单位:米) - `z`: 垂直方向(Up)的偏移(单位:米) 这是一个 **地心笛卡尔坐标系(ECEF)**,也称为 **地固坐标系(Earth-Centered, Earth-Fixed)**。 --- ### 2. 坐标系特点 | 特性 | 说明 | |------|------| | 原点 | 地球中心(地心) | | x轴 | 指向本初子午线与赤道的交点 | | y轴 | 指向东经 90 度与赤道的交点 | | z轴 | 指向地球北极 | | 坐标单位 | 米(m) | 这个坐标系是固定在地球上的,会随着地球自转而旋转。 --- ### 3. 与其他坐标系的转换 Cesium 提供了多种坐标系之间的转换方法,最常见的是: | 坐标类型 | 描述 | 转换方法 | |----------|------|----------| | `Cartesian3` | 三维笛卡尔坐标(地心坐标系) | `Cesium.Cartesian3.fromDegrees()` | | `Cartographic` | 经纬度 + 高度(弧度) | `Cesium.Cartographic.fromCartesian()` | | `Cartesian2` | 二维屏幕坐标 | `Cesium.SceneTransforms.wgs84ToWindowCoordinates()` | --- ## ✅ 二、常用转换方法示例 ### 1. 从经纬度(WGS84)转换为 Cartesian3 ```javascript const position = Cesium.Cartesian3.fromDegrees(-115.0, 37.0, 1000.0); // 参数:经度(度)、纬度(度)、高度(米) ``` ### 2. 从 Cartesian3 转换为 Cartographic(经纬度) ```javascript const cartographic = Cesium.Cartographic.fromCartesian(position); const longitude = Cesium.Math.toDegrees(cartographic.longitude); // 经度(度) const latitude = Cesium.Math.toDegrees(cartographic.latitude); // 纬度(度) const height = cartographic.height; // 高度(米) ``` ### 3. 创建原点(地心) ```javascript const origin = Cesium.Cartesian3.ZERO; // 原点坐标 (0, 0, 0) ``` ### 4. 向量运算(加法、缩放、距离等) ```javascript const p1 = new Cesium.Cartesian3(1.0, 2.0, 3.0); const p2 = new Cesium.Cartesian3(4.0, 5.0, 6.0); // 加法 const sum = Cesium.Cartesian3.add(p1, p2, new Cesium.Cartesian3()); // 缩放 const scaled = Cesium.Cartesian3.multiplyByScalar(p1, 2.0, new Cesium.Cartesian3()); // 距离 const distance = Cesium.Cartesian3.distance(p1, p2); ``` --- ## ✅ 三、坐标系Cesium 中的应用场景 | 场景 | 说明 | |------|------| | 实体位置 | `Entity.position` 使用 `Cartesian3` 表示世界坐标 | | 相机位置 | `viewer.camera.flyTo({ destination: ... })` 使用 `Cartesian3` | | 三维模型 | `Model` 的位置、方向、缩放 | | 几何计算 | 如距离、高度、法线方向等 | | 渲染管线 | 所有几何数据最终都会被转换为 `Cartesian3` 进行渲染 | --- ## ✅ 四、注意事项 - `Cartesian3` 是 **右手坐标系**。 - 所有坐标单位为 **米(m)**。 - 在进行大量坐标运算时,建议使用静态方法(如 `Cesium.Cartesian3.add()`)并传入目标对象以避免频繁创建对象,提升性能。 - `Cartesian3.ZERO` 是只读常量,不要尝试修改它。 --- ##
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值