根据经纬度计算距离并排序分页

6 篇文章 0 订阅
$userItem = User::get($uid);

$lng = $userItem['longitude'];
$lat = $userItem['latitude'];
$EARTH = 6378.137; //地球半径
$PI = 3.1415926535898; //PI值

$model = new StoreOrder;

// 待接单

$map1 = [
            ['a.paid', '=', 1],
            ['a.status', '=',  0],
            ['a.refund_status', '=', 0],
            ['a.shipping_type', '=',  1],
            ['a.is_del', '=',  0],
            ['a.is_system_del', '=',  0],
];

$map2 = [
            ['a.paid', '=', 0],
            ['a.status', '=', 0],
            ['a.pay_type', '=', 'offline'],
            ['a.refund_status', '=', 0],
            ['a.shipping_type', '=', 1],
            ['a.is_del', '=', 0],
            ['a.is_system_del', '=', 0],
];

//根据司机经纬度和订单收货地址经纬度计算

$list_0 = $model->alias('a')->whereOr([$map1, $map2])->join('user_address ad', 'a.user_address_id = ad.id')
->field(['a.*', 'ad.latitude as user_address_latitude', 'ad.longitude as user_address_longitude', '(2 * ' . $EARTH . '* ASIN(SQRT(POW(SIN(' . $PI . '*(' . $lat . '-ad.latitude)/360),2)+COS(' . $PI . '*' . $lat . '/180)* COS(ad.latitude * ' . $PI . '/180)*POW(SIN(' . $PI . '*(' . $lng . '-ad.longitude)/360),2)))) as distance'])
->order('distance asc')
->page((int) $page, (int) $limit)->select()->toArray();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值