YUMMY:两经纬度之间的实际距离PHP算法

2014-03-23 2,402 2 开发! 大超超。

微软创新杯比赛中使用WP8开发的YUMMY吃货圈APP,在webServer端需要计算从APP端传来的经纬度,在数据库里查找附近的吃货,因此要用到经纬度计算实际距离算法,从网上看了若干文章后选取了一篇里的使用C#实现的算法,改造成了PHP版的(下面的代码是封装在一个类里的,所以用的时候按需修改一下方法调用):

private function _rad($d){
    return $d * pi() / 180.0;
}
// 返回单位:km
private function _getDistance($lo1, $la1, $lo2, $la2){
    $EARTH_RADIUS = 6378.137;//地球半径
    $radla1 = $this->_rad($la1);
    $radla2 = $this->_rad($la2);
    $a = $radla1 - $radla2;
    $b = $this->_rad($lo1) - $this->_rad($lo2);
               
    $s = 2 * sin(sqrt(pow(sin($a/2),2) +
    cos($radla1)*cos($radla2)*pow(sin($b/2),2)));
    $s = $s * $EARTH_RADIUS;
    $s = round($s * 10000) / 10000;
    return $s;
}

webServer端提供的RESTful接口调用:

140323计算两经纬度之间的实际距离-实操.png

实际测试两点距离:

140323计算两经纬度之间的实际距离-p.png

两点实际距离15.6147km,使用百度地图测距工具测出来是15.3公里(起点和终点稍微点歪一点就会有一定的误差),在误差允许的范围内基本验证了算法正确。

 



声明: 本文由大超超。原创编译,转载请保留链接: http://www.thinkful.cn/archives/454.html