c++enu转wgs84代码
时间: 2023-10-23 21:20:38 浏览: 140
以下是C语言中将ENU(东北天)坐标系转换为WGS84(经纬度)坐标系的代码示例:
```c
#include <math.h>
#define PI 3.14159265358979323846
#define a 6378137.0 // 赤道半径
#define b 6356752.3142 // 极半径
#define f (a - b) / a // 扁率
void ENUtoWGS84(double east, double north, double up, double lat0, double lon0, double h0, double *lat, double *lon, double *h) {
double sin_lat0 = sin(lat0 * PI / 180.0);
double cos_lat0 = cos(lat0 * PI / 180.0);
double sin_lon0 = sin(lon0 * PI / 180.0);
double cos_lon0 = cos(lon0 * PI / 180.0);
double N = a / sqrt(1 - f * (2 - f) * sin_lat0 * sin_lat0); // 卯酉圈半径
double M = a * (1 - f) / pow(1 - f * sin_lat0 * sin_lat0, 1.5); // 卯酉圈曲率半径
double x = -north * sin_lat0 * cos_lon0 - east * sin_lon0 + up * cos_lat0 * cos_lon0;
double y = -north * sin_lat0 * sin_lon0 + east * cos_lon0 + up * cos_lat0 * sin_lon0;
double z = north * cos_lat0 + up * sin_lat0;
*lat = lat0 + atan2(z, sqrt(x * x + y * y)) * 180.0 / PI;
*lon = lon0 + atan2(y, x) * 180.0 / PI;
double cos_lat = cos(*lat * PI / 180.0);
double sin_lat = sin(*lat * PI / 180.0);
double N1 = a / sqrt(1 - f * sin_lat * sin_lat);
*h = sqrt(x * x + y * y) / cos_lat - N1;
}
```
其中,输入参数为:
- east:ENU坐标系中的东向距离,单位为米。
- north:ENU坐标系中的北向距离,单位为米。
- up:ENU坐标系中的天向距离,单位为米。
- lat0:参考点的纬度,单位为度。
- lon0:参考点的经度,单位为度。
- h0:参考点的高度,单位为米。
输出参数为:
- lat:转换后的纬度,单位为度。
- lon:转换后的经度,单位为度。
- h:转换后的高度,单位为米。
使用示例:
```c
int main() {
double east = 1000.0;
double north = -500.0;
double up = 200.0;
double lat0 = 30.0;
double lon0 = 120.0;
double h0 = 50.0;
double lat, lon, h;
ENUtoWGS84(east, north, up, lat0, lon0, h0, &lat, &lon, &h);
printf("WGS84: %lf, %lf, %lf\n", lat, lon, h);
return 0;
}
```
阅读全文