ECEF转WGS84 C/C++算法

该代码实现了一个将ECEF(地球中心地球固定)坐标转换为LLAWGS84(纬度、经度、海拔)坐标的函数,涉及WGS84椭球常数、数学运算及弧度到角度的转换。此转换对GPS定位和地理信息系统有用。

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

代码如下

/**
   *转换ECEF(以地球为中心的地球固定)坐标为LLA WGS84 (Lat, Lon, Alt)。
   * @param ecef_x ECEF x坐标[m]
   * @param ecef_y ECEF y坐标[m]
   * @param ecef_z ECEF Z-coordinate [m]
   * @param latitude [deg]
   * @param longitude [deg]
   * @param海拔[m]
 */
void ECEF2lla(double ecef_x, double ecef_y, double ecef_z, double &latitude, double &longitude,
			 float &altitude)
{
    // WGS84椭球常数
    constexpr double a = 6378137.; // 半径
    constexpr double e = 8.1819190842622e-2;  // 轨道偏心率
	constexpr double asq = a * a;
	constexpr double esq = e * e;

	double x = ecef_x;
	double y = ecef_y;
	double z = ecef_z;

	double b = sqrt(asq * (1. - esq));
	double bsq = b * b;
	double ep = sqrt((asq - bsq) / bsq);
	double p = sqrt(x * x + y * y);
	double th = atan2(a * z, b * p);

	longitude = atan2(y, x);
	double sin_th = sin(th);
	double cos_th = cos(th);
	latitude = atan2(z + ep * ep * b * sin_th * sin_th * sin_th, p - esq * a * cos_th * cos_th * cos_th);
	double sin_lat = sin(latitude);
	double N = a / sqrt(1. - esq * sin_lat * sin_lat);
	altitude = (float)(p / cos(latitude) - N);

    // 弧度转角度
	longitude *= 180. / M_PI;
	latitude *= 180. / M_PI;

    // 校正极点附近的高度。
}

参考

1.移植自:https://stackoverflow.com/a/25428344

转载请注明出处谢谢。

欢迎点赞收藏转发!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值