PHP根据经纬度获取两个地点之间的直线距离

橙子与柠檬 / 2024-09-22 / 原文

/**
 * 根据两点间的经纬度计算距离
 * @param $lat1 纬度1
 * @param $lng1 经度1
 * @param $lat2 纬度2
 * @param $lng2 经度2
 * @return array
 */
function get_distance($lat1, $lng1, $lat2, $lng2): array
{
    //赤道半径(单位m)
    $earthRadius = 6378137;
    $lat1        = ($lat1 * pi()) / 180;
    $lng1        = ($lng1 * pi()) / 180;

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

    $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 = abs(round(($earthRadius * $stepTwo), 2));
    //千米
    $calculatedDistanceKm = abs(round(($calculatedDistance / 1000), 2));
    if ($calculatedDistanceKm >= 1) {
        if ($calculatedDistanceKm > 999) {
            $distance_str = ">999 km";
        } else {
            $distance_str = $calculatedDistanceKm . " km";
        }
    } else {
        $distance_str = $calculatedDistance . " m";
    }
    return [
        'distance'     => $calculatedDistance,
        'distance_str' => $distance_str,
    ];
}