PHP计算两个经纬度地点之间的距离

2020-01-20  本文已影响0人  菠萝蜜朵弦
/**
*求两个已知经纬度之间的距离,单位为米
 * @param $lng1 $经度
 * @param $lat1 $纬度
 * @param $lng2 $经度
 * @param $lat2 $纬度
 * @return float|int 单位 米
 */
function getDistance($lng1, $lat1, $lng2, $lat2)
{
    // 将角度转为弧度
    $radLat1 = deg2rad($lat1); //deg2rad()函数将角度转换为弧度
    $radLat2 = deg2rad($lat2);
    $radLng1 = deg2rad($lng1);
    $radLng2 = deg2rad($lng2);
    $a = $radLat1 - $radLat2;
    $b = $radLng1 - $radLng2;
    $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))) * 6378.137 * 1000;
    return $s;
}
/**
 * *计算某个经纬度的周围某段距离的正方形的四个点
 * *@param $lng float 经度
 * *@param $lat float 纬度
 * *@param $distance float 该点所在圆的半径,该圆与此正方形内切,默认值为0.5千米
 * *@return array 正方形的四个点的经纬度坐标
 *      */
function returnSquarePoint1($lng, $lat, $distance = 5)
{
    $earthdata = 6371;//地球半径,平均半径为6371km
    $dlng = 2 * asin(sin($distance / (2 * $earthdata)) / cos(deg2rad($lat)));
    $dlng = rad2deg($dlng);
    $dlat = $distance / $earthdata;
    $dlat = rad2deg($dlat);
    $arr = array(
        'left_top' => array('lat' => $lat + $dlat, 'lng' => $lng - $dlng),
        'right_top' => array('lat' => $lat + $dlat, 'lng' => $lng + $dlng),
        'left_bottom' => array('lat' => $lat - $dlat, 'lng' => $lng - $dlng),
        'right_bottom' => array('lat' => $lat - $dlat, 'lng' => $lng + $dlng)
    );
    return $arr;
}
上一篇下一篇

猜你喜欢

热点阅读