正在上传图片(0/1)

如何计算两个经纬度坐标之间的直线距离

 2
手机看帖 0 1326
由于地球是一个球体,计算两个经纬度之间的距离需要用到球面余弦公式。具体公式如下:
S=R·arccos[cosβ1cosβ2cos(α1-α2)+sinβ1sinβ2]
相应的计算代码为:
double getDistance(double lat1, double lng1,double lat2,double lng2)
{
   double s = acos(cos(lat1)*cos(lat2)*cos(lng1-lng2)+sin(lat1)*sin(lat2));
   s=s*EarthCenter;  // EarthCenter=6378137
   return s;         // 返回值单位为m
}

注意:函数的参数都是用弧度表示的经纬度,经度转弧度只需要乘以 0.0174533即可
前面的球面余弦公式中有cos(lng1-lng2)项,当两点间距离很短时(比如相距几百米的两点),余弦函数会得出 0.99999...... 的结果,会导致较大的舍入误差。Haversine 方法进行了某种变换消除了 cos(lng1-lng2) 项,能够避免该问题。代码如下:
double getDistance(double lat1, double lng1,double lat2,double lng2)
{
double a=lat1-lat2;
double b=lng1-lng2;
double s=2*asin(sqrt(pow(sin(a/2),2)+cos(lat1)*cos(lat2)*pow(sin(b/2),2)));
s=s*EarthCenter;
return s;
}

评论
上传
你需要登录之后才能回帖    登录 | 注册
收藏 点赞 评论
分享至:
回复:
上传
取消 评论
快速回复 返回顶部 返回列表