PHP实现通过经纬度计算距离和查附近店门

单位:公里

laravel查附近店门

DB::table('shops')->selectRaw('id, address, lat, lng, round((
 6370.996 * acos ( cos ( radians( ? ) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians( ? ) ) + sin ( radians( ? ) ) * sin( radians( lat ) ) ) ),1) AS distance', [$lat, $lng, $lat])
 ->orderBy('distance')->first();

PHP实现通过经纬度计算距离

$lng1 = 102.76;
$lat1 = 25.00;
$lat2 = auth()->user()->lat;
$lng2 = auth()->user()->lng;
//将角度转为狐度
$radLat1 = deg2rad($lat1);
$radLat2 = deg2rad($lat2);
$radLng1 = deg2rad($lng1);
$radLng2 = deg2rad($lng2);
$a=$radLat1-$radLat2;//两纬度之差,纬度<90
$b=$radLng1-$radLng2;//两经度之差纬度<180
$s= 2*asin(sqrt(pow(sin($a/2),2)+cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)))*6378.137;
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 13

针对不规则的形状怎么处理呢,之前做过类似项目,不规则的区域有 bug

2周前 评论
helong3314 (楼主) 2周前
王小大 (作者) 2周前
cvoid 1周前
mowangjuanzi 1周前
王小大 (作者) 1周前
playmaker

为啥不用 redis GEO

1周前 评论

不用查数据库时那么写,mysql有自带的距离函数的。 select st_distance_sphere(point( ?,? ), point( house.lng, house.lat )) distance from house where id= ?

1周前 评论

用geohash更方便

1周前 评论

用geohash,速度起飞,唯一不好得就是查出来需要自己按距离重新排一下序

1周前 评论

mark一下

经纬度查询距离,一开始做的时候也是用的这个。后面有看到redis的,其他的没用过。

1周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!