C++实现由两点经纬度计算距离
时间: 2023-08-31 15:12:51 浏览: 75
在C++中,可以使用Haversine公式来计算两点之间的距离。Haversine公式是一种用于计算球面上两点之间距离的公式,适用于球形地球模型以及近似球形地球模型。以下是一个实现该公式的示例代码:
```cpp
#include <cmath>
double distance(double lat1, double lon1, double lat2, double lon2)
{
const double earthRadiusKm = 6371.0;
double dLat = (lat2 - lat1) * M_PI / 180.0;
double dLon = (lon2 - lon1) * M_PI / 180.0;
lat1 = lat1 * M_PI / 180.0;
lat2 = lat2 * M_PI / 180.0;
double a = pow(sin(dLat / 2), 2) +
pow(sin(dLon / 2), 2) * cos(lat1) * cos(lat2);
double c = 2 * atan2(sqrt(a), sqrt(1 - a));
return earthRadiusKm * c;
}
```
其中,`lat1`和`lon1`表示第一个点的经纬度,`lat2`和`lon2`表示第二个点的经纬度,函数返回值表示两点之间的距离(单位:千米)。
相关问题
C++大地计算,由两点经纬度计算距离方位
使用C++可以通过以下公式计算两点之间的距离和方位:
1. 将经度和纬度转换为弧度:
```
double deg2rad(double deg) {
return (deg * PI / 180);
}
double lat1_rad = deg2rad(lat1);
double lon1_rad = deg2rad(lon1);
double lat2_rad = deg2rad(lat2);
double lon2_rad = deg2rad(lon2);
```
其中,PI为圆周率,需要定义。
2. 计算两点之间的距离:
```
double dlon = lon2_rad - lon1_rad;
double dlat = lat2_rad - lat1_rad;
double a = pow(sin(dlat / 2), 2) + cos(lat1_rad) * cos(lat2_rad) * pow(sin(dlon / 2), 2);
double c = 2 * atan2(sqrt(a), sqrt(1 - a));
double distance = R * c;
```
其中,R为地球半径,需要定义。
3. 计算两点之间的方位:
```
double y = sin(dlon) * cos(lat2_rad);
double x = cos(lat1_rad) * sin(lat2_rad) - sin(lat1_rad) * cos(lat2_rad) * cos(dlon);
double angle = atan2(y, x);
double bearing = fmod((angle * 180 / PI + 360), 360);
```
其中,bearing为方位角,需要定义。
完整代码如下:
```c++
#include <iostream>
#include <cmath>
#define PI 3.14159265358979323846
#define R 6371 // 地球半径,单位为千米
double deg2rad(double deg) {
return (deg * PI / 180);
}
int main() {
double lat1, lon1, lat2, lon2;
std::cout << "请输入第一个点的纬度和经度(以度为单位,用逗号隔开):" << std::endl;
std::cin >> lat1 >> lon1;
std::cout << "请输入第二个点的纬度和经度(以度为单位,用逗号隔开):" << std::endl;
std::cin >> lat2 >> lon2;
double lat1_rad = deg2rad(lat1);
double lon1_rad = deg2rad(lon1);
double lat2_rad = deg2rad(lat2);
double lon2_rad = deg2rad(lon2);
double dlon = lon2_rad - lon1_rad;
double dlat = lat2_rad - lat1_rad;
double a = pow(sin(dlat / 2), 2) + cos(lat1_rad) * cos(lat2_rad) * pow(sin(dlon / 2), 2);
double c = 2 * atan2(sqrt(a), sqrt(1 - a));
double distance = R * c;
double y = sin(dlon) * cos(lat2_rad);
double x = cos(lat1_rad) * sin(lat2_rad) - sin(lat1_rad) * cos(lat2_rad) * cos(dlon);
double angle = atan2(y, x);
double bearing = fmod((angle * 180 / PI + 360), 360);
std::cout << "两点之间的距离为:" << distance << "千米" << std::endl;
std::cout << "两点之间的方位为:" << bearing << "度" << std::endl;
return 0;
}
```
c++ 知道两点经纬度算距离
在 C++ 中,可以使用 Haversine 公式来计算两点之间的距离。Haversine 公式是一种计算地球表面上两点之间距离的方法,它基于球面三角学。
以下是一个示例代码,使用 Haversine 公式计算两点之间的距离:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
const double PI = 3.14159265358979323846;
const double R = 6371.0; // 地球半径,单位为千米
// 将角度转换为弧度
double toRadians(double degrees) {
return degrees * PI / 180.0;
}
// 计算两点之间的距离,参数为经度和纬度,单位为度
double distance(double lat1, double lon1, double lat2, double lon2) {
double dLat = toRadians(lat2 - lat1);
double dLon = toRadians(lon2 - lon1);
double a = sin(dLat / 2) * sin(dLat / 2) +
cos(toRadians(lat1)) * cos(toRadians(lat2)) *
sin(dLon / 2) * sin(dLon / 2);
double c = 2 * atan2(sqrt(a), sqrt(1 - a));
return R * c;
}
int main() {
double lat1 = 31.2304; // 第一个点的纬度
double lon1 = 121.4737; // 第一个点的经度
double lat2 = 40.7128; // 第二个点的纬度
double lon2 = -74.0060; // 第二个点的经度
double d = distance(lat1, lon1, lat2, lon2);
cout << "两点之间的距离为:" << d << " 千米" << endl;
return 0;
}
```
在这个例子中,我们计算了上海(31.2304°N, 121.4737°E)和纽约(40.7128°N, 74.0060°W)之间的距离,输出的结果为 11851.2 千米。