php通过经纬度计算距离
发表于:2024-04-23 15:22:04浏览:306次
前言
在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);
}
}
栏目分类全部>