目的是,根据经纬度,实现查其找附近的人或地点,LBS场景。
做基于地理位置的应用后台,没有使用mongodb,看了网上的很多答案,其实也就是几份答案而已,天下文章一大抄。
这里综合网上的,结合自身,总结出了几种根据经纬度的排序算法,测试可用,性能也还可以。逐步递进优化,不同阶段,不同使用。
这里x为纬度,y为经度。
PS:SQL代码不完整,仅供阅读参考,理解意思就好。
一、MySql不使用空间函数,简单版
1.粗算,根据场景得到一个range,计算经纬度,得到的是一个矩形区域(A),不精确,但是已经有范围这个雏形了,最容易实现的方式之一。
where latitude>y-range
and latitude
and longitude>x-range
and longitude
order by abs(longitude -x)+abs(latitude -y)
limit 10;
2.使用PHP函数计算出距离,排序即可。
排序的话,自己灵活实现。很多语言都有封装排序算法,效率也挺高的。
二、Mysql不使用空间函数,优化版
这里的优化是对(一)中range的优化。根据范围半径,计算出经纬度的变化范围,得到一个比较准确的range,这里的范围(B)是圆形的(因为$radius是俩点间的距离)。
但是筛选时候的范围(C)是矩形,所以精