WGS84→地固系

本文介绍了地固坐标系的两种类型——地心坐标系和参心坐标系,详细阐述了ECEF和WGS-84坐标系的定义、轴向指向以及坐标参数。同时,讨论了如何在两者之间进行坐标转换,包括经纬度与XYZ参数的换算,并提到了布尔莎模型在坐标转换中的应用。此外,还涉及到了地固坐标系在实际地球同步运动中的意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

地固坐标系分为 地心坐标系(原点与地球质心重合)和 参心坐标系(原点与参考椭球中心重合),前者以总地球椭球为基准,后者以参考椭球为基准,以地心为原点的地固坐标系也称为地心地固坐标系(ECEF)。

无论是参心坐标系还是地心坐标系均可分为 空间直角坐标系 和 大地坐标系 两种形式,它们都与地球体固连在一起,与地球同步运动。

1. ECEF坐标系。地固系

也叫地心地固直角坐标系。其原点为地球的质心,x延伸通过本初子午线(0度经度)和赤道(0deglatitude)的交点。 z延伸通过的北极(即,与地球旋转轴重合)。 y完成右手坐标系,穿过赤道和90度经度交点。

参数:X,Y,Z。

2.WGS-84坐标系。LLA坐标系(经度L(longitude),纬度B(latitude),高程/海拔H(altitude)

全球地理坐标系、大地坐标系,纬经高坐标系。WGS-84坐标系的X轴指向BIH(国际时间服务机构)1984.0定义的零子午面(Greenwich)和协议地球极(CTP)赤道的交点。Z轴指向CTP方向。Y轴与X、Z轴构成右手坐标系。

实际指向和地固系是相同的。(地级是不断变化的,所以CTP是协议地球极)。

对于LLA三个参数:

lat:纬度指大地纬度,指经过目标点的面法线与赤道面的线面角。-90°~  +90°。北半球为正,南半球为负。

lon:经度指经过目标点的子午面与零子午面的夹角。-180°~ +180°。东经为正,西经为负

alt:高程/海拔指目标点到切面沿法线的距离,基准椭球面以内为负,以外为正。

(Q?如何确定法线和切面的交点? 椭球的法线不一定经过球心。星下点是卫星和球心的连线与球面的交点

A:把通过卫星的参考椭球面的法线代替卫星到地心的连线,这一法线和参考椭球面的交点定义为星下点。由于地球采用参考椭球体,这两种星下点将在同一个经圈上,其纬度相差也很小(几个角分)。

WGS84经纬度参数换算地固系XYZ参数:

其中长半轴a=6 378 137,短半轴b=6 356 755    ;e2=0.00669437999013

布尔莎模型坐标系转换。Δ为平移参数。θ为旋转参数。M为尺度参数。

(北京54、西安80、。。)

Cosd,,sin(ψ/2)可求。

σ为最小观测角。并由此可得有σ限制的覆盖角d’。

 

在地理信息统(GIS)领域,坐标系转换是一个常见的需求。Java 中可以通过一些开源库来进行地心地坐标系(Earth-Centered Earth-Fixed, ECEF)到 WGS84 坐标系的转换。 WGS84 是全球定位统(GPS)使用的标准大地坐标系,而 ECEF 是一种三维笛卡尔坐标系,原点位于地球质心。 下面是一个简单的实现思路: ### 实现步骤 #### 1. 确定公式 从 ECEF 到 WGS84 的转换涉及数学计算,主要包括以下几个方面: - 给定一个 ECEF 坐标 `(X, Y, Z)`。 - 计算纬度、经度以及海拔高度。 转换公式大致如下(简化版): - \( \lambda = atan2(Y, X) \) (经度) - \( r = sqrt(X^2 + Y^2) \) - \( \phi = atan\left(\frac{Z}{r}\right) \) (初始估算的纬度) 然后通过迭代方法精确计算最终的纬度和高度值。 #### 2. 使用 Java 编码实现 ```java public class CoordinateConversion { private static final double A = 6378137; // WGS84 椭球长半轴 (米) private static final double B = 6356752.31424518; // WGS84 椭球短半轴 (米) public static double[] ecefToWgs84(double x, double y, double z) { double aSquared = Math.pow(A, 2); double bSquared = Math.pow(B, 2); double epSquared = (aSquared - bSquared) / bSquared; double p = Math.sqrt(x * x + y * y); double theta = Math.atan2((z * A), (p * B)); double sinTheta = Math.sin(theta); double cosTheta = Math.cos(theta); double tmp = Math.atan2(z + epSquared * B * Math.pow(sinTheta, 3), p - ((aSquared - bSquared) / aSquared) * A * Math.pow(cosTheta, 3)); double latitude = tmp * (180 / Math.PI); // 纬度,单位:度 double longitude = Math.atan2(y, x) * (180 / Math.PI); // 经度,单位:度 double N = A / Math.sqrt(1 - ((aSquared - bSquared) / aSquared) * Math.pow(Math.sin(tmp), 2)); // 曲率半径 double altitude = (p / Math.cos(tmp)) - N; // 海拔高度 return new double[]{latitude, longitude, altitude}; } public static void main(String[] args) { // 示例ECEF坐标 double x = 4109474.0; double y = 1396383.0; double z = 4783534.0; double[] wgs84Coordinates = ecefToWgs84(x, y, z); System.out.println("Latitude: " + wgs84Coordinates[0]); System.out.println("Longitude: " + wgs84Coordinates[1]); System.out.println("Altitude: " + wgs84Coordinates[2] + " meters"); } } ``` 上述代码实现了从 ECEF 到 WGS84 的基本转换功能。 --- ### 注意事项 1. 这里仅提供了一个简化的算法实现,对于更高精度的需求建议参考专业 GIS 库,例如 GeoTools 或 Proj4j。 2. 需要注意输入数据是否已规范化(如单位一致性等)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值