php 根据两点的经纬度计算距离

原创
2012/10/20 22:05
阅读数 1.5W

最近用到了geohash(参考《geohash:用字符串实现附近地点搜索》)来实现附近搜索的功能,在《微信、陌陌架构方案分析》文中提供了一个php的geohash类直接能对经纬地址编码成字符串,  而其中包含一个getDistance方法获取两点间的距离,但在sphinx中使用过滤附近地标的方法SetGeoAnchor发现返回的距离值有误,遂google出以下方法,经测试可用。。

/**
*  @desc 根据两点间的经纬度计算距离
*  @param float $lat 纬度值
*  @param float $lng 经度值
*/
 function getDistance($lat1, $lng1, $lat2, $lng2)
 {
     $earthRadius = 6367000; //approximate radius of earth in meters

     /*
       Convert these degrees to radians
       to work with the formula
     */

     $lat1 = ($lat1 * pi() ) / 180;
     $lng1 = ($lng1 * pi() ) / 180;

     $lat2 = ($lat2 * pi() ) / 180;
     $lng2 = ($lng2 * pi() ) / 180;

     /*
       Using the
       Haversine formula

       http://en.wikipedia.org/wiki/Haversine_formula

       calculate the distance
     */

     $calcLongitude = $lng2 - $lng1;
     $calcLatitude = $lat2 - $lat1;
     $stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude / 2), 2);  $stepTwo = 2 * asin(min(1, sqrt($stepOne)));
     $calculatedDistance = $earthRadius * $stepTwo;

     return round($calculatedDistance);
 }

附一个在线计算两点距离的地址:

http://www.nhc.noaa.gov/gccalc.shtml


展开阅读全文
打赏
2
28 收藏
分享
加载中
楼主,请问返回的数据的单位是什么啊
2016/04/28 13:15
回复
举报
北京到广州的距离比北京到河北的距离 都近 怎么回事
2015/08/26 19:24
回复
举报
楼主,请问一下为什么我不同的经纬度值计算出来的两点距离都是一个结果呢?非常感谢哦~
2014/01/06 13:05
回复
举报
你真的测过?
返回一个没定义的变量
2013/11/18 10:11
回复
举报

引用来自“_EKC”的评论

引用来自“透过玻璃的光”的评论

博主有测试过这个代码么。

测试过了

嗯,感谢。是我的数据弄错了
2012/11/20 14:36
回复
举报
_EKC博主

引用来自“透过玻璃的光”的评论

博主有测试过这个代码么。

测试过了
2012/11/20 12:41
回复
举报
博主有测试过这个代码么。
2012/11/19 18:22
回复
举报
更多评论
打赏
7 评论
28 收藏
2
分享
返回顶部
顶部