-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathApproGeoLine.cpp
More file actions
34 lines (29 loc) · 1.04 KB
/
Copy pathApproGeoLine.cpp
File metadata and controls
34 lines (29 loc) · 1.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <cmath>
using namespace std;
#define EARTH_RADIUS 6378.137
#define PI 3.141592654
//角度转弧度
double rad(double d)
{
return d * PI / 180.0;
}
/*******************************************************************
* 返回两个地点P1(lng1, lat1)和P2(lng2, lat2)的近似大地线距离(单位 km)
* double lng1: 第一个地点的经度(角度)
* double lat1: 第一个地点的纬度(角度)
* double lng2: 第二个地点的经度(角度)
* double lat2: 第二个地点的纬度(角度)
* 返回值: double, 两个点之间的近似大地线距离,单位 km
*******************************************************************/
double getPtsDist(double lat1, double lng1, double lat2, double lng2)
{
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double radLon1 = rad(lng1);
double radLon2 = rad(lng2);
double a = radLat1 - radLat2;
double b = radLon1 - radLon2;
double s = 2 * asinf(sqrtf(sin(a/2)*sin(a/2) + cos(radLat1)*cos(radLat2)*sin(b/2)*sin(b/2)));
s = s * EARTH_RADIUS;
return s;
}