互转(经纬度、地心坐标、东北天坐标)

互转(经纬度、地心坐标、东北天坐标)Part1 三种坐标系介绍经纬度坐标 假设空间某点 P 用经纬度表示的话 你们 B 代表纬度 L 代表经度 H 代表大地高

大家好,欢迎来到IT知识分享网。

df18f4bff56b7d6c7c318a8a6455effe.png

Part1三种坐标系介绍

经纬度坐标: 假设空间某点P,用经纬度表示的话,你们B代表纬度,L代表经度,H代表大地高。
纬度B:P点沿着地球法线方向与赤道面的夹角。向北为正称为北纬(0-90),向南为负称为南纬(0-90) 实际表示可以用(-90 ~ 90)
纬度L:NPS面与参考椭球起始子午面NGS的夹角。由起始子午面起算,向东为正称为东经(0-180),向西为负称为西经(0-180)。实际表示用(-180 ~ 180)。
大地高H:表示P点沿该点法线到椭球面的距离,向上为正,向下为负。如下图所示:635bd758e03044e40d9ac58910acab16.png地心地固坐标系(Earth-Centered, Earth-Fixed) 又简称地心坐标系,英文简称(ECEF)。其中
原点:O为椭球的中心点
X轴: 指向起始子午面与赤道的交点
Y轴: 位于赤道面上,且按右手坐标系与X轴成90度夹角
Z轴: 指向椭球的北极N
805f8f9f432d87f205b66ae4d95977d1.png东北天坐标系:站在地球球面某点,构建直角坐标系。
X轴:指向东方
Y轴:指向北方
Z轴:指向蓝天
5710e45b5e43a8de386d1f81f9fc3be3.png

Part2三种坐标系互相转换

这里我们主要分享如何通过js函数实现三种坐标系的互相转换,不进行原理的深入研究,只讲究如何实现。这里实现方法通过Cesium.js库来实现。

1Cesium.js介绍

CesiumJS 是一个开源 JavaScript 库,用于创建具有最佳性能、精度、视觉质量和易用性的世界级 3D 地球仪和地图。从航空航天到智能城市再到无人机,各行各业的开发人员都使用 CesiumJS 创建交互式 Web 应用程序来共享动态地理空间数据。参考网址:https://cesium.com/platform/cesiumjs/ github地址:https://github.com/CesiumGS/cesium

90c21af452f693f0a98b295e5c812007.png

2nodejs实现坐标转换

首先通过npm来安装cesium库,方法如下:

npm install cesium

经纬度和地心坐标互转

# 经纬度转地心坐标系 let center = Cesium.Cartesian3.fromDegrees(116, 39) console.log(center) #地心坐标系转经纬度 let cartographic = Cesium.Cartographic.fromCartesian(center) console.log({   longitude: Cesium.Math.toDegrees(cartographic.longitude),   latitude: Cesium.Math.toDegrees(cartographic.latitude), })

控制输出如下:与之前输入的经纬度一致

Cartesian3 {x: -., y: .0, z: .0} {longitude: 116.00000000000001, latitude: 39}

地心坐标与东北天互转

假设在上面的地球球面center处构建东北天坐标系。

# 东北天坐标转地心坐标 # 下面求(0,0,0)处的坐标在地心坐标系下的坐标 let enr2ffTransforms = Cesium.Transforms.eastNorthUpToFixedFrame(center) let result1 = Cesium.Matrix4.multiplyByPoint(   enr2ffTransforms,   new Cesium.Cartesian3(0, 0, 0),   new Cesium.Cartesian3() ) console.log(result1)

输出值与center处地心坐标一致

Cartesian3 {x: -., y: .0, z: .0}
# 地心坐标系转东北天坐标系 # 下面示例采用的地心坐标为上面示例输出值 let enr2ffTransformsInverse = Cesium.Matrix4.inverseTransformation(   enr2ffTransforms,   new Cesium.Matrix4() ) console.log(   Cesium.Matrix4.multiplyByPoint(     enr2ffTransformsInverse,     result1,     new Cesium.Cartesian3()   ) )

输出如下,符合之前的预期

Cartesian3 {x: 0, y: 0, z: 0}

Part3总结

本文主要介绍了经纬度、地心坐标、东北天三种坐标系的概念,并给出了基于cesium.js实现了三种坐标系互相转换的方法。
欢迎加技术交流群交流。671638d1026885921bbe0355a25fadc4.png

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/158558.html

(0)
上一篇 2025-01-19 17:20
下一篇 2025-01-19 17:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信