根据两地经纬度计算两地之间的间距距离,并用php编写案例

2023-06-01 00:00:00 经纬度 间距 两地

需求:已知当前用户地址位置坐标信息,计算目标坐标点的距离信息。

思路图:

1.png

计算公式:

2.png

W为纬度对应的弧度,J为经度对应的弧度,如上图所示


php案例:

/**
 * 计算两点地理坐标之间的距离
 * @param  Decimal $lng1  起点经度
 * @param  Decimal $lat1  起点纬度
 * @param  Decimal $lng2  终点经度
 * @param  Decimal $lat2  终点纬度
 * @param  Int   $unit     单位 1:米 2:公里
 * @param  Int   $decimal   精度 保留小数位数
 * @return Decimal
 */
public static function getlatlngspac($lng1, $lat1, $lng2, $lat2, $unit=1, $decimal=1){
    $r = 6370.996;  // 地球半径系数
    $pi = 3.1415926; // 圆周率

    $radLat1 = $lat1 * $pi / 180;
    $radLat2 = $lat2 * $pi / 180;
    $radLng1 = $lng1 * $pi / 180;
    $radLng2 = $lng2 * $pi / 180;

    $a = $radLat1 - $radLat2;
    $b = $radLng1 - $radLng2;
    $distance = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1) * cos($radLat2) * pow(sin($b/2),2)));
    $distance = $distance * $r * 1000;
    if($unit==2){
        $distance = $distance / 1000;
    }
    return round($distance, $decimal);
}

看看效果:

$lng1 = $wangdian['baiduapilng'];
$lat1 = $wangdian['baiduapilat'];
$lng2 = '113.62241';
$lag2 = '23.130767';

echo SelectOption::getlatlngspac($lng1,$lat1,$lng2,$lag2).'m';

3.png

业务功能:

4.png

相关文章