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