/**
* 计算地球上两点之间的距离(根据经纬度)
*
* @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 . "千米";
网友评论