wsg84与UTM坐标系互相转换C语言代码
时间: 2023-03-06 22:58:08 浏览: 153
下面是将 WGS84 坐标系转换为 UTM 坐标系的 C 语言代码示例:
```
#include <stdio.h>
#include <math.h>
#define PI 3.14159265
int main()
{
// 定义变量
double lat, lon; // 纬度和经度
char lat_hemi, lon_hemi; // 纬度和经度的半球
int zone; // UTM 区域
double x, y; // UTM 坐标
// 输入 WGS84 坐标
printf("输入纬度: ");
scanf("%lf%c", &lat, &lat_hemi);
printf("输入经度: ");
scanf("%lf%c", &lon, &lon_hemi);
// 将角度转换为弧度
lat = lat * PI / 180;
lon = lon * PI / 180;
// 计算 UTM 区域
zone = (int)((lon + 180) / 6) + 1;
// 计算 UTM 坐标
double a = 6378137;
double e = 0.081819191;
double k0 = 0.9996;
double e2 = e * e;
double n = (a - b) / (a + b);
double n2 = n * n;
double n3 = n * n * n;
double cos_lat = cos(lat);
double sin_lat = sin(lat);
double tan_lat = tan(lat);
double t = tan_lat * tan_lat;
double c = e2 * cos_lat * cos_lat;
double A = cos_lat * (lon - lon_0);
double M = a * ((1 - e2 / 4 - 3 * e2 * e2 / 64 - 5 * e2 * e2 * e2 / 256) * lat
- (3 * e2 / 8 + 3 * e2 * e2 / 32 + 45 * e2 * e2 * e2 / 1024) * sin(2 * lat)
+ (15 * e2 * e2 / 256 + 45 * e2 * e2 * e2 / 1024) * sin(4 * lat)
- (35 * e2 * e2 * e2 / 3072) * sin(6 * lat));
double x = k0 * a * A * (1 + A * A * ((1 - t + c) / 6
+ A * A * (5 - 18 * t + t * t + 72 * c - 58 * e2) / 120));
double y = k0 * (M + N0 + A * A * (0.5 + A * A * ((
阅读全文