地圖上兩個位置間的距離
阿新 • • 發佈:2018-12-04
/**
* 計算球體上表面兩點的距離
* 由於地球並不是數學意義上的球體,因此用些方法只能得到近似的距離值,
* 與實際情況的誤差最大可能達到0.5%
*
* @param float $lat1 位置1緯度,南緯時是負值
* @param float $lon1 位置1經度,西經是是負值
* @param float $lat2 位置2緯度,南緯時是負值
* @param float $lon2 位置2經度,西經是是負值
* @param float $radius 球體半徑,單位km,預設為地球半徑
* @return float 兩地球面距離,單位km
* */
function getDistance($lat1, $lon1, $lat2, $lon2, $radius = 6378.137)
{
$rad = doubleval(M_PI / 180.0);
$lat1 = doubleval($lat1) * $rad;
$lon1 = doubleval($lon1) * $rad;
$lat2 = doubleval($lat2) * $rad;
$lon2 = doubleval($lon2) * $rad;
$diff = $lon2 - $lon1;
$dist = acos(sin($lat1) * sin($lat2) + cos($lat1) * cos($lat2) * cos($diff));
if ($dist < 0) $dist += M_PI;
return $dist * $radius;
}
// 39.9096915,116.3958814 天安門
// 23.10409,113.3265492 小蠻腰
echo getDistance(23.0104611, 113.7477255, 39.9096915, 116.3958814); //1897.6869041879
例如測算廣州小蠻腰到天安門間的距離,由上面演算法得出現在距離為1897.69公里,而在高德地圖上實測兩點距離為1892.67公里,誤差還算在可以接受的範圍。
(end)