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

本文介绍了一种使用SQL和PHP计算两点间地理坐标的距离的方法,包括将角度转换为弧度的过程,以及应用三角函数和地球半径来计算精确距离的公式。
//距离计算
$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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值