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

转载请注明出处谢谢。

欢迎点赞收藏转发!

ECEF (Earth-Centered, Earth-Fixed) 坐标是一个笛卡尔坐标系,其中地球的中心是原点,Z 轴指向北极,X 轴指向本初子午线的交点,Y 轴指向东方。WGS84 (World Geodetic System 1984) 是一个地球椭球体模型,用于描述地球的形状。要将 ECEF 坐标换为 WGS84 坐标,需要进行以下步骤: 1. 将 ECEF 坐标系换为地心地固坐标系。 2. 将地心地固坐标系换为经纬度坐标系。 3. 将经纬度坐标系换为 WGS84 坐标系。 以下是一个 MATLAB 函数,可以将 ECEF 坐标换为 WGS84 坐标: ```matlab function [lat, lon, alt] = ecef2wgs84(x, y, z) % ECEF2WGS84 Convert ECEF coordinates to WGS84 coordinates. % [LAT, LON, ALT] = ECEF2WGS84(X, Y, Z) converts the input ECEF % coordinates X, Y, and Z (in meters) to WGS84 coordinates LAT and LON % (in degrees) and ALT (in meters). % Define WGS84 ellipsoid parameters a = 6378137.0; % Semi-major axis of WGS84 ellipsoid b = 6356752.3142; % Semi-minor axis of WGS84 ellipsoid e = sqrt(1 - b^2 / a^2); % Eccentricity of WGS84 ellipsoid % Convert ECEF coordinates to geodetic coordinates p = sqrt(x^2 + y^2); theta = atan2(z * a, p * b); lat = atan2(z + e^2 * b * (sin(theta))^3, p - a * (e^2 * (cos(theta))^3)); lon = atan2(y, x); N = a / sqrt(1 - e^2 * (sin(lat))^2); alt = p / cos(lat) - N; % Convert latitude and longitude to degrees lat = rad2deg(lat); lon = rad2deg(lon); end ``` 要使用此函数,请提供 ECEF 坐标。例如,要将 ECEF 坐标 `[5000000, 1000000, 0]` 换为 WGS84 坐标,可以执行以下操作: ```matlab x = 5000000; y = 1000000; z = 0; [lat, lon, alt] = ecef2wgs84(x, y, z); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值