代码如下

/**
   *转换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

转载请注明出处谢谢。

欢迎点赞收藏转发!

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐