RT,根据app获取到用户坐标后,将其保存到数据库内,然后根据此坐标搜索表内其他用户,找出与其相近的人。
比如500米之内的用户,用处是能返回给该用户附近的人用户列表
目前想到两个方法,但一个觉得太笨了,耗费资源,另一个貌似不太靠谱:
1.每次遍历库内所有用户,然后与当前用户比对,计算坐标距离(当然这不现实,可以将其分组吧,每次给每个用户一个既定范围,例如该用户在朝阳区西北方向,我在自己地图模型(概念上)里将此区定为CYXB1区,并存入数据库,找附近用户只需要搜索自定区域即可,缺点:不能以用户为圆心画半径去搜索附近的人)
2.根据坐标前N位,或前N位相邻的值 模糊查询,
例如:当前坐标 123.456,456.123
如此在数据库查询 select * from users where x like "{123.4}%" and y like "{456.1}%"; #x代表坐标x轴,y同理
请教一下各位有没有好的解决方法,谢谢
GeoHash,Redis直接支持,快速存储和查询都搞定了,最高0.5%的错误率。
插入用户的坐标:
查里user1半径500米的用户:
更好的是GEORADIUSBYMEMBER加WITHDIST还能得到用户间距离。