ECEF转WGS84 C/C++算法
·
代码如下
/**
*转换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
转载请注明出处谢谢。
欢迎点赞收藏转发!
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)