PHP如何根据经纬度精确计算两地间的距离?
- 内容介绍
- 文章标签
- 相关推荐
本文共计303个文字,预计阅读时间需要2分钟。
这是一个非常有用的距离计算函数,它利用纬度和经度来计算从点A到点B的直线距离。函数可以直接返回英里、公里或海里三种单位类型的距离。下面是简化后的函数代码:
phpfunction distance($lat1, $lon1, $lat2, $lon2, $unit) { $earth_radius=6371; // 地球半径,单位:千米 $latFrom=deg2rad($lat1); $lonFrom=deg2rad($lon1); $latTo=deg2rad($lat2); $lonTo=deg2rad($lon2);
$latDelta=$latTo - $latFrom; $lonDelta=$lonTo - $lonFrom;
$angle=2 * asin(sqrt(pow(sin($latDelta / 2), 2) + cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2), 2))); $distance=$angle * $earth_radius;
switch ($unit) { case 'mi': // 英里 return $distance * 0.621371; case 'km': // 公里 return $distance; case 'n': // 海里 return $distance / 1.852; default: return $distance; }}
这是一个非常有用的距离计算函数,利用纬度和经度计算从 A 地点到 B 地点的距离。该函数可以返回英里,公里,海里三种单位类型的距离。
function distance($lat1, $lon1, $lat2, $lon2, $unit) { $theta = $lon1 - $lon2; $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); $dist = acos($dist); $dist = rad2deg($dist); $miles = $dist * 60 * 1.1515; $unit = strtoupper($unit); if ($unit == "K") { return ($miles * 1.609344); } else if ($unit == "N") { return ($miles * 0.8684); } else { return $miles; } } //用法: echo distance(32.9697, -96.80322, 29.46786, -98.53506, "k")." kilometers";
本文共计303个文字,预计阅读时间需要2分钟。
这是一个非常有用的距离计算函数,它利用纬度和经度来计算从点A到点B的直线距离。函数可以直接返回英里、公里或海里三种单位类型的距离。下面是简化后的函数代码:
phpfunction distance($lat1, $lon1, $lat2, $lon2, $unit) { $earth_radius=6371; // 地球半径,单位:千米 $latFrom=deg2rad($lat1); $lonFrom=deg2rad($lon1); $latTo=deg2rad($lat2); $lonTo=deg2rad($lon2);
$latDelta=$latTo - $latFrom; $lonDelta=$lonTo - $lonFrom;
$angle=2 * asin(sqrt(pow(sin($latDelta / 2), 2) + cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2), 2))); $distance=$angle * $earth_radius;
switch ($unit) { case 'mi': // 英里 return $distance * 0.621371; case 'km': // 公里 return $distance; case 'n': // 海里 return $distance / 1.852; default: return $distance; }}
这是一个非常有用的距离计算函数,利用纬度和经度计算从 A 地点到 B 地点的距离。该函数可以返回英里,公里,海里三种单位类型的距离。
function distance($lat1, $lon1, $lat2, $lon2, $unit) { $theta = $lon1 - $lon2; $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); $dist = acos($dist); $dist = rad2deg($dist); $miles = $dist * 60 * 1.1515; $unit = strtoupper($unit); if ($unit == "K") { return ($miles * 1.609344); } else if ($unit == "N") { return ($miles * 0.8684); } else { return $miles; } } //用法: echo distance(32.9697, -96.80322, 29.46786, -98.53506, "k")." kilometers";

