您的当前位置:首页>全部文章>文章详情

php通过经纬度计算距离

发表于:2024-04-23 15:22:04浏览:262次TAG: #PHP #ThinkPHP

前言

在PHP中,计算经纬度之间的距离可以使用Haversine公式。Haversine公式是一种简化的计算地球上两点之间距离的方法,适用于短距离计算。该公式的原理是根据点与地球中心的夹角来计算距离。

php代码

if (!function_exists('distance')) {
    /**
     * 通过经纬度获取距离(米)
     * @param $lat1
     * @param $lon1
     * @param $lat2
     * @param $lon2
     * @param $unit
     * @return float
     */
    function distance($lat1, $lon1, $lat2, $lon2,$unit = 'km') {
        // 地球平均半径(千米)
        $earthRadius = [
            'km' => 6371.0,
            'mi' => 3958.8
        ];
        // 校验输入范围(纬度:-90~90,经度:-180~180)
        if (!is_numeric($lat1) || !is_numeric($lon1) || !is_numeric($lat2) || !is_numeric($lon2)) {
            // 经纬度必须为数字
            return 0;
        }
        if (!in_array($unit, ['km', 'mi'])) {
            $unit = 'km';
        }
        // 角度转弧度
        $lat1 = deg2rad($lat1);
        $lon1 = deg2rad($lon1);
        $lat2 = deg2rad($lat2);
        $lon2 = deg2rad($lon2);
        // 计算经纬度差值
        $dLat = $lat2 - $lat1;
        $dLon = $lon2 - $lon1;
        // Haversine公式核心计算
        $a = sin($dLat / 2) ** 2 + cos($lat1) * cos($lat2) * sin($dLon / 2) ** 2;
        $c = 2 * atan2(sqrt($a), sqrt(1 - $a));
        // 计算距离并转换单位
        $distance = $earthRadius[$unit] * $c;
        // 保留两位小数
        return round($distance, 2);
    }
}