mysql根据当前经纬度获取周边x公里的数据
Last Updated:2022-08-12
方式一(数据库参与计算)(只能用来低访问量)
$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
- GeoHash用一个字符串表示经度和纬度两个坐标。在数据库中可以实现在一列上应用索引(某些情况下无法在两列上同时应用索引)
- GeoHash表示的并不是一个点,而是一个矩形区域
- GeoHash编码的前缀可以表示更大的区域。例如wx4g0ec1,它的前缀wx4g0e表示包含编码wx4g0ec1在内的更大范围。 这个特性可以用于附近地点搜索
作者:某昆
链接:https://www.jianshu.com/p/2fd0cf12e5ba
来源:简书