Cesium坐标问题

转载自:http://www.mamicode.com/info-detail-2115345.html 

坐标转换

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

2.4.1 坐标系

new Cesium.Cartesian2(1,1) //表示一个二维笛卡尔坐标系,也就是直角坐标系(屏幕坐标系)
new Cesium.Cartesian3(1,1,1) //表示一个三维笛卡尔坐标系,也是直角坐标系(就是真实世界的坐标系)

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

var pick1= scene.globe.pick(viewer.camera.getPickRay(pt1), scene) //其中pt1为一个二维屏幕坐标。

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

var geoPt1= scene.globe.ellipsoid.cartesianToCartographic(pick1) //其中pick1是一个Cesium.Cartesian3对象。

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

var point1=[geoPt1.longitude / Math.PI * 180,geoPt1.latitude / Math.PI * 180]; //其中geoPt1是一个地理坐标。

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

var cartographic = Cesium.Cartographic.fromDegree(point) //point是经纬度值
var coord_wgs84 = Cesium.Cartographic.fromDegrees(lng, lat, alt);//单位:度,度,米

2.4.6 经纬度坐标转世界坐标

var cartesian = Cesium.Cartesian3.fromDegree(point)

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

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 坐标系的使用方法及原理 #### 1. **Cesium坐标参考框架** Cesium 提供了一种基于地球椭球模型的地心坐标系 (Ellipsoid-centered),这是其核心的坐标参考框架之一[^1]。该坐标系以地球质心为原点,定义了一个空间直角坐标系,在此体系下所有的地理数据都可以被映射到三维空间中。 #### 2. **Cartesian3 地心坐标表示** `Cesium.Cartesian3(x, y, z)` 是用于描述地心坐标系下的一个点的位置[^2]。它通过三个维度 \(x\)、\(y\)、\(z\) 来唯一确定地球上某一点的空间位置。这种表示方式适用于需要精确计算距离方位的应用场景。 #### 3. **球心坐标与本地坐标的转换** 为了支持更复杂的几何运算以及地图投影需求,Cesium 实现了多种坐标之间的相互转换逻辑。例如,从球面坐标(经度、纬度)到 Cartesian3 的转换可以通过矩阵变换完成[^3]。具体来说: - 经纬度通常是以角度形式给出的数据; - 需要将其转化为弧度制以便参与后续三角函数运算; - 转化后的结果再乘以对应的半径长度得到最终的 Cartesian3 表达式。 以下是简单的代码示例展示如何执行这一过程: ```javascript const cartographic = new Cesium.Cartographic( Cesium.Math.toRadians(longitude), // longitude converted to radians Cesium.Math.toRadians(latitude), // latitude converted to radians height // optional altitude value ); const cartesian = Cesium.Ellipsoid.WGS84.cartographicToCartesian(cartographic); ``` #### 4. **角度与弧度间的互换操作** 当处理涉及地理位置的角度数值时,往往需要用到单位间的变化工具。比如将弧度值变换成人们习惯使用的十进制度数可以借助如下公式实现[^4]: \[ \text{degree} = \frac{\text{radian}}{\pi} * 180 \] 对应于 JavaScript 编程环境内的写法则是利用 `Cesium.Math.toDegrees()` 方法简化上述流程。 #### 5. **相机控制机制中的坐标运用** 在虚拟现实或者增强现实中,摄像机视角调整是非常重要的一环。对于 Cesium 而言,它的相机移动遵循特定的方向矢量原则[^5]。即每次改变视图都涉及到围绕选定目标点进行上下左右翻滚等一系列动作组合而成的整体效果呈现出来。这些基本运动单元均依赖内部预设好的局部坐标系统来进行精准定位并实施相应指令集下达给渲染引擎加以表现。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值