标签搜索

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

sunshine
2024-04-09 / 0 评论 / 70 阅读
温馨提示:
本文最后更新于2024年04月09日,已超过191天没有更新,若内容或图片失效,请留言反馈。

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

/**
 * 求两个已知经纬度之间的距离,单位为米
 * 
 * @param lng1 $ ,lng2 经度
 * @param lat1 $ ,lat2 纬度
 * @return float 距离,单位米
 */
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;
}
感觉很棒,欢迎点赞 OR 打赏~
2
分享到:

评论 (0)

取消