tp5 根据经纬度计算门店距离 可排序

$branchInfo=Db::name('Branch')->where('b_id','250')->find();
        $map['p.cate_id']=array('eq',5);
        $map['b.lng']=array('neq','');
        $map['b.lat']=array('neq','');
        $map['b.b_id']=array('neq',250);
        $branchGoodsList=Db::name('BranchStock')->alias('s')->field("s.s_id,s.s_stock,p.p_name,p.p_code,p.p_size,p.p_color,b.*,(6378.138 * 2 * asin(sqrt(pow(sin((lat * pi() / 180 - ".$branchInfo['lat']." * pi() / 180) / 2),2) + cos(lat * pi() / 180) * cos(".$branchInfo['lat']." * pi() / 180) * pow(sin((lng * pi() / 180 - ".$branchInfo['lng']." * pi() / 180) / 2),2))) * 1000) as distance")->join('think_products p','s.g_id=p.p_id','LEFT')->join('think_branch b','s.b_id=b.b_id','LEFT')->group('s.b_id')->where($map)->order('distance')->select();
        foreach($branchGoodsList as $k=>$v){
            $branchGoodsList[$k]['distance']=round($v['distance']/1000,2).'Km';
        }

}

 

利用mysql 计算两点间具体  用百度地图接口计算距离太慢了  还有次数限制 因此改装了sql

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值