c加加如何根据两点的经纬度计算方位和距离
时间: 2023-11-10 16:07:32 浏览: 110
根据两点的经纬度计算方位和距离是一个常见的问题,可以使用C++中的数学库来解决。以下是计算两点之间距离和方位角的示例代码:
```c++
#include <iostream>
#include <cmath>
using namespace std;
const double PI = 3.14159265358979323846;
const double EARTH_RADIUS = 6378.137; // 地球半径,单位为千米
double rad(double d) {
return d * PI / 180.0;
}
double getDistance(double lng1, double lat1, double lng2, double lat2) {
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double a = radLat1 - radLat2;
double b = rad(lng1) - rad(lng2);
double s = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(radLat1) * cos(radLat2) * pow(sin(b / 2), 2)));
s *= EARTH_RADIUS;
return s;
}
double getAzimuth(double lng1, double lat1, double lng2, double lat2) {
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double radLng1 = rad(lng1);
double radLng2 = rad(lng2);
double y = sin(radLng2 - radLng1) * cos(radLat2);
double x = cos(radLat1) * sin(radLat2) - sin(radLat1) * cos(radLat2) * cos(radLng2 - radLng1);
double brng = atan2(y, x);
brng = brng * 180 / PI;
if (brng < 0) {
brng += 360;
}
return brng;
}
int main() {
double lng1 = 116.388171;
double lat1 = 39.935961;
double lng2 = 116.397458;
double lat2 = 39.908722;
double distance = getDistance(lng1, lat1, lng2, lat2);
double azimuth = getAzimuth(lng1, lat1, lng2, lat2);
cout << "两点之间的距离为:" << distance << "千米" << endl;
cout << "两点之间的方位角为:" << azimuth << "度" << endl;
return 0;
}
```
其中,getDistance函数用于计算两点之间的距离,getAzimuth函数用于计算两点之间的方位角。需要注意的是,这里使用的是WGS84坐标系,如果需要使用其他坐标系,需要进行转换。
阅读全文