c++经纬度转直角坐标
时间: 2023-08-02 20:10:58 浏览: 149
C++中经纬度转直角坐标可以通过以下代码实现:
```c++
#include <math.h>
// 定义常量
const double PI = 3.14159265358979323846;
const double EARTH_RADIUS = 6378137.0;
// 定义经纬度结构体
struct LonLat {
double lon; // 经度
double lat; // 纬度
};
// 将角度转换为弧度
double deg2rad(double deg) {
return deg * PI / 180.0;
}
// 将弧度转换为角度
double rad2deg(double rad) {
return rad * 180.0 / PI;
}
// 计算两点间距离
double distance(LonLat p1, LonLat p2) {
double radLat1 = deg2rad(p1.lat);
double radLat2 = deg2rad(p2.lat);
double a = radLat1 - radLat2;
double b = deg2rad(p1.lon) - deg2rad(p2.lon);
double s = 2 * asin(sqrt(pow(sin(a/2),2) + cos(radLat1)*cos(radLat2)*pow(sin(b/2),2)));
s = s * EARTH_RADIUS;
return s;
}
// 计算两点间直角坐标系坐标
void lonlat2meters(LonLat p, double& x, double& y) {
x = EARTH_RADIUS * cos(deg2rad(p.lat)) * cos(deg2rad(p.lon));
y = EARTH_RADIUS * cos(deg2rad(p.lat)) * sin(deg2rad(p.lon));
}
```
使用方法如下:
```c++
LonLat p1 = {116.3975, 39.9088};
LonLat p2 = {121.4737, 31.2304};
double d = distance(p1, p2);
double x, y;
lonlat2meters(p1, x, y);
```
其中,p1和p2分别表示两个经纬度点,d表示两点之间的距离,x和y表示p1的直角坐标系坐标。
阅读全文