美文网首页
php计算两个地址之间直线距离 2023-03-31

php计算两个地址之间直线距离 2023-03-31

作者: 阿然学编程 | 来源:发表于2023-03-30 08:55 被阅读0次
/**
 * 计算地球上两点之间的距离(根据经纬度)
 *
 * @param float $lon1 地点1的经度
 * @param float $lat1 地点1的纬度
 * @param float $lon2 地点2的经度
 * @param float $lat2 地点2的纬度
 * @param string $unit 单位('m' 为米,'km' 为千米,默认为 'm')
 * @return float 两点之间的距离(根据 $unit 返回不同单位的结果)
 */
function haversine_distance($lon1, $lat1, $lon2, $lat2, $unit = 'm')
{
    // 地球半径,单位:米
    $earthRadius = 6371393;

    // 将经纬度从度数转换为弧度
    $lon1Rad = deg2rad($lon1);
    $lon2Rad = deg2rad($lon2);
    $lat1Rad = deg2rad($lat1);
    $lat2Rad = deg2rad($lat2);

    // 计算经纬度的差值
    $deltaLon = $lon2Rad - $lon1Rad;
    $deltaLat = $lat2Rad - $lat1Rad;

    // 应用 Haversine 公式计算两点之间的距离
    $a = sin($deltaLat / 2) * sin($deltaLat / 2) + cos($lat1Rad) * cos($lat2Rad) * sin($deltaLon / 2) * sin($deltaLon / 2);
    $c = 2 * asin(sqrt($a));
    $distance = $earthRadius * $c;

    // 返回计算结果,根据需要将单位转换为 'm' 或 'km'
    return $unit == 'm' ? $distance : $distance / 1000;
}

使用示例

// 计算北京市和上海市之间的距离,单位为千米
$lon1 = 116.4074;
$lat1 = 39.9042;
$lon2 = 121.4737;
$lat2 = 31.2304;
$distanceKm = haversine_distance($lon1, $lat1, $lon2, $lat2, 'km');
echo "北京市和上海市之间的距离为:" . $distanceKm . "千米";

相关文章

网友评论

      本文标题:php计算两个地址之间直线距离 2023-03-31

      本文链接:https://www.haomeiwen.com/subject/sibqddtx.html