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 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 20

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

2年前 评论
勇敢的心 2年前
helong3314 (楼主) 2年前
王小大 (作者) 2年前
cvoid 2年前
mowangjuanzi 2年前
王小大 (作者) 2年前
playmaker

为啥不用 redis GEO

2年前 评论

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

2年前 评论
eanBear 2年前
yyy123456 (作者) 2年前

用redis更好

2年前 评论
eanBear 2年前

用geohash更方便

2年前 评论

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

2年前 评论

mark一下

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

2年前 评论

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

2年前 评论
sanders

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

2年前 评论

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