给定二十一个经纬度,求一个地点坐标是否在这个范围内C++实现
时间: 2023-06-13 17:08:57 浏览: 72
可以使用以下方法实现:
1. 定义一个结构体来存储经纬度信息:
```c++
struct Coordinate {
double latitude;
double longitude;
};
```
2. 编写一个函数来计算两个地点之间的距离(以米为单位),可以使用 Haversine 公式:
```c++
double distance(Coordinate c1, Coordinate c2) {
double lat1 = c1.latitude * M_PI / 180;
double lon1 = c1.longitude * M_PI / 180;
double lat2 = c2.latitude * M_PI / 180;
double lon2 = c2.longitude * M_PI / 180;
double dlat = lat2 - lat1;
double dlon = lon2 - lon1;
double a = pow(sin(dlat / 2), 2) + cos(lat1) * cos(lat2) * pow(sin(dlon / 2), 2);
double c = 2 * atan2(sqrt(a), sqrt(1-a));
double distance = 6371000 * c;
return distance;
}
```
其中,6371000 是地球半径(单位为米)。
3. 编写一个函数来判断一个地点是否在一个范围内,可以定义一个圆心和半径,判断该点是否在圆内:
```c++
bool isInRange(Coordinate c, vector<Coordinate> range) {
Coordinate center = range[0];
double radius = distance(center, range[1]);
double d = distance(center, c);
return d <= radius;
}
```
其中,range 是一个长度为 2 的 vector,表示范围的左上角和右下角的经纬度。
完整代码示例:
```c++
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
struct Coordinate {
double latitude;
double longitude;
};
double distance(Coordinate c1, Coordinate c2) {
double lat1 = c1.latitude * M_PI / 180;
double lon1 = c1.longitude * M_PI / 180;
double lat2 = c2.latitude * M_PI / 180;
double lon2 = c2.longitude * M_PI / 180;
double dlat = lat2 - lat1;
double dlon = lon2 - lon1;
double a = pow(sin(dlat / 2), 2) + cos(lat1) * cos(lat2) * pow(sin(dlon / 2), 2);
double c = 2 * atan2(sqrt(a), sqrt(1-a));
double distance = 6371000 * c;
return distance;
}
bool isInRange(Coordinate c, vector<Coordinate> range) {
Coordinate center = range[0];
double radius = distance(center, range[1]);
double d = distance(center, c);
return d <= radius;
}
int main() {
Coordinate c1 = {30.0, 120.0};
Coordinate c2 = {30.1, 120.1};
vector<Coordinate> range = {{29.9, 119.9}, {30.2, 120.2}};
cout << isInRange(c1, range) << endl; // 1
cout << isInRange(c2, range) << endl; // 0
return 0;
}
```