中级会员
 
- 积分
- 457
- 金钱
- 457
- 注册时间
- 2015-8-16
- 在线时间
- 116 小时
|
//根据角度计算弧度
double rad(double d)
{
const double PI = 3.1415926535898;
return d * PI/180.0;
}
//根据弧度计算角度
double Angle(double r)
{
const double PI = 3.1415926535898;
return r * 180/PI;
}
//根据两点经纬度计算两点距离
double GetDistance(double lat1, double lng1, double lat2, double lng2)
{
const double EARTH_RADIUS = 6378137;//地球半径(单位:m)
double radLat1 = rad(lat1);//根据角度计算弧度
double radLat2 = rad(lat2);
double radLng1 = rad(lng1);
double radLng2 = rad(lng2);
double a = radLat1 - radLat2;
double b = radLng1 - radLng2;
double s = 2 * asin(sqrt(pow(sin(a/2),2) + cos(radLat1)*cos(radLat2)*pow(sin(b/2),2)));//google maps里面实现的算法
s = s * EARTH_RADIUS;
return s;
}
//计算方位角
double GetBearing(double lat1, double lng1, double lat2, double lng2)
{
double d = 0;
double radLat1 = rad(lat1);//根据角度计算弧度
double radLat2 = rad(lat2);
double radLng1 = rad(lng1);
double radLng2 = rad(lng2);
d = sin(radLat1)*sin(radLat2)+cos(radLat1)*cos(radLat2)*cos(radLng2-radLng1);
d = sqrt(1-d*d);
d = cos(radLat2)*sin(radLng2-radLng1)/d;
d = Angle(asin(d));
return d;//返回方位角
}
|
|