PHP根据经纬度计算两点距离与方圆范围方法

宁采陈 2019-05-26 PM 2877℃ 6条

平常我们做项目,经常遇到根据用户当前位置来计算出与用户之间的距离,或者给用户展示方圆一公里的店铺商家之类的功能。所以在此记录一下方法。

计算两个经纬度地点之间的距离

/**
 * 求两个已知经纬度之间的距离,单位为米
 * 
 * @param lng1 $ ,lng2 经度
 * @param lat1 $ ,lat2 纬度
 * @return float 距离,单位米
 * @author www.Alixixi.com 
 */
function getdistance($lng1, $lat1, $lng2, $lat2) {
    // 将角度转为狐度
    $radLat1 = deg2rad($lat1); //deg2rad()函数将角度转换为弧度
    $radLat2 = deg2rad($lat2);
    $radLng1 = deg2rad($lng1);
    $radLng2 = deg2rad($lng2);
    $a = $radLat1 - $radLat2;
    $b = $radLng1 - $radLng2;
    $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))) * 6378.137 * 1000;
    return $s;
}

根据经纬度获取指定方圆距离的四个点

/**
* 获取指定方圆距离的四个点
* param lng float 经度
* param lat float 纬度
* param distance float 该点所在圆的半径,该圆与此正方形内切,默认值为单位米
* return array 正方形的四个点的经纬度坐标
*/
function getSquarePoint($lng, $lat,$distance)
{
    $PI = 3.14159265;
    $longitude = $lng;
    $latitude = $lat;

    $degree = (24901*1609)/360.0;
    $raidusMile = $distance;

    $dpmLat = 1/$degree;
    $radiusLat = $dpmLat*$raidusMile;
    $minLat = $latitude - $radiusLat;       //拿到最小纬度
    $maxLat = $latitude + $radiusLat;       //拿到最大纬度

    $mpdLng = $degree*cos($latitude * ($PI/180));
    $dpmLng = 1 / $mpdLng;
    $radiusLng = $dpmLng*$raidusMile;
    $minLng = $longitude - $radiusLng;     //拿到最小经度
    $maxLng = $longitude + $radiusLng;     //拿到最大经度
    $range = array(
        'minLat' => $minLat,
        'maxLat' => $maxLat,
        'minLon' => $minLng,
        'maxLon' => $maxLng
    );
    return $range;
}
标签: PHP, 经纬度

非特殊说明,本博所有文章均为博主原创。

评论啦~



已有 6 条评论


  1. nicoun
    nicoun

    模板怎么使用呢

    回复 2020-08-04 21:06
  2. 333
    333

    $degree中这几个常数是什么意义

    回复 2020-03-18 15:40
    1. 宁采陈
      宁采陈 博主

      $degree = (24901*1609)/360.0;
      地球的周长是24901英里,1英里等于1609米。360度数。

      回复 2020-03-31 23:00
  3. 隔壁老王
    隔壁老王

    kankan

    回复 2019-08-21 14:30
  4. 444
    444

    12312

    回复 2019-08-21 14:12
  5. 123
    123

    随便看看

    回复 2019-08-17 19:22