php计算2个坐标的距离及距离当前坐标最近的地址

2020-12-20 11:10:51

根据坐标计算距离

        /**
         * 求两个已知经纬度之间的距离,单位为米
         * 
         * @param lng1 $ ,lng2 经度
         * @param lat1 $ ,lat2 纬度
         * @return float 距离,单位米
         * @author www.Alixixi.com 
         */
        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;
        } 

距离当前坐标最近的可用地址:

            //假设 $res为可用的地址,并有经纬度:jingdu为经度 weidu为纬度
            //$jingdu为用户的经度值 $weidu为用户的纬度值
            foreach($res as $k=>$v){
                $v['distance'] = $this->getdistance($v['jingdu'],$v['weidu'],$jingdu,$weidu);
                $res[$k] = $v;
            }
            //排序数组 按照计算出来的 distance 排序
            $paixu_arr = array_column($res,'distance');
            //$res按照$paixu_arr的值进行升序排序 并赋值给$res
            array_multisort($paixu_arr,SORT_ASC,$res);

致知网络科技© 2020-2025 鲁ICP备20031360号-2