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);