美文网首页
PHP计算两个经纬度地点之间的距离

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

作者: 菠萝蜜朵弦 | 来源:发表于2020-01-20 11:46 被阅读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;
    }
    

    相关文章

      网友评论

          本文标题:PHP计算两个经纬度地点之间的距离

          本文链接:https://www.haomeiwen.com/subject/tfliaqtx.html