地图上两个位置间的距离
/**
* 计算球体上表面两点的距离
* 由于地球并不是数学意义上的球体,因此用些方法只能得到近似的距离值,
* 与实际情况的误差最大可能达到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)