地图上两个位置间的距离

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