天天看点

php sql 腾讯地图根据两点经纬度计算距离

//距离计算
$sqrt = 'SQRT(POW(SIN(('.$latitude.'*PI()/180-`latitude`*PI()/180)/2),2)+COS('.$latitude.'*PI()/180)*COS(`latitude`*PI()/180)*POW(SIN(('.$longitude.'*PI()/180-`longitude`*PI()/180)/2),2))';
 //表前缀
 $prefix = config('database.prefix');
 //条件
 $where =  "'%".$key."%'" ;
 //sql语句
 $sql = "select * from (select * ,ROUND(6378.138*2*ASIN($sqrt)*1000) AS distance from  " .$prefix ."store". "  where store_name like ".  $where ." or address like ".  $where ."  order by distance,id) as a ";
    Db::query($sql);


/**
 * 获取两个坐标点的距离
 * @param $ulon
 * @param $ulat
 * @param $slon
 * @param $slat
 * @return float
 */
private static function getDistance($ulon, $ulat, $slon, $slat)
{
    // 地球半径
    $R = 6378137;
    // 将角度转为狐度
    $radLat1 = deg2rad($ulat);
    $radLat2 = deg2rad($slat);
    $radLng1 = deg2rad($ulon);
    $radLng2 = deg2rad($slon);
    // 结果
    $s = acos(cos($radLat1) * cos($radLat2) * cos($radLng1 - $radLng2) + sin($radLat1) * sin($radLat2)) * $R;
    // 精度
    $s = round($s * 10000) / 10000;
    return round($s);
}
           
php