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 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 20

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

1年前 评论
勇敢的心 1年前
helong3314 (楼主) 1年前
王小大 (作者) 1年前
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年前 评论
eanBear 1年前
yyy123456 (作者) 1年前

用redis更好

1年前 评论
eanBear 1年前

用geohash更方便

1年前 评论

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

1年前 评论

mark一下

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

1年前 评论

不要用redis geo,不完善,多条件筛选不好做

1年前 评论
sanders

建议用 mysql 自带的函数 ST_Distance_Sphere 简单一些。

1年前 评论

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