编写一个gps解析程序,能够计算输入两点经纬度坐标的相对位置包括(距离和方向),用C++实现。
时间: 2024-03-02 11:51:26 浏览: 62
main为主程序 通过两点的经纬度信息计算距离及相对方位角(正北角)
5星 · 资源好评率100%
好的,我可以为您提供一个简单的GPS解析程序,计算两点经纬度坐标的相对位置,包括距离和方向。以下是代码示例:
```c++
#include <iostream>
#include <cmath>
using namespace std;
const double PI = 3.14159265358979323846;
const double R = 6371; // 地球半径,单位为千米
double rad(double d)
{
return d * PI / 180.0;
}
double getDistance(double lat1, double lng1, double lat2, double lng2)
{
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 = s * R;
return round(s * 1000) / 1000; // 保留三位小数
}
double getDirection(double lat1, double lng1, double lat2, double lng2)
{
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double a = radLat1 - radLat2;
double b = rad(lng1) - rad(lng2);
double s = atan2(sin(b) * cos(radLat2), cos(radLat1) * sin(radLat2) - sin(radLat1) * cos(radLat2) * cos(b));
s = s * 180 / PI;
s = fmod((s + 360), 360); // 转换为0-360度
return round(s * 100) / 100; // 保留两位小数
}
int main()
{
double lat1, lng1, lat2, lng2;
cout << "请输入第一个点的经度和纬度(用空格隔开):" << endl;
cin >> lng1 >> lat1;
cout << "请输入第二个点的经度和纬度(用空格隔开):" << endl;
cin >> lng2 >> lat2;
double distance = getDistance(lat1, lng1, lat2, lng2);
double direction = getDirection(lat1, lng1, lat2, lng2);
cout << "两点之间的距离为:" << distance << "千米" << endl;
cout << "两点之间的方向为:" << direction << "度" << endl;
return 0;
}
```
使用示例:
```
请输入第一个点的经度和纬度(用空格隔开):
116.4074 39.9042
请输入第二个点的经度和纬度(用空格隔开):
121.4737 31.2304
两点之间的距离为:1051.36千米
两点之间的方向为:123.81度
```
希望能帮到您!
阅读全文