方式一(数据库参与计算)(只能用来低访问量)

$lng = 30.187941; // 当前纬度
$lat = 120.259814; // 当前经度

select * from user where (acos(sin(({$lat}*3.1415)/180)
* sin((lat*3.1415)/180)
+ cos(({$lat}*3.1415)/180)
* cos((lat*3.1415)/180)
* cos(({$lng}*3.1415)/180 - (lng*3.1415)/180))
* 6370.996) <= 5

上述代码,取了5公里范围内的用户

上述方式(通过数据库计算),提高一点效率的方法是,不算成圆,而是改成算成一个矩形

方式二 (GeoHash算法)

参见这个post

作者:某昆
链接:https://www.jianshu.com/p/2fd0cf12e5ba
来源:简书