php - 根据指定坐标来找出指定距离内的其他坐标(已存在)怎么做?

查看:381
本文介绍了php - 根据指定坐标来找出指定距离内的其他坐标(已存在)怎么做?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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%的错误率。

插入用户的坐标:

GEOADD users 13.361389 38.115556 user1
GEOADD users 13.361389 38.115566 user2
...

查里user1半径500米的用户:

GEORADIUSBYMEMBER users user1 500 m

更好的是GEORADIUSBYMEMBER加WITHDIST还能得到用户间距离。

这篇关于php - 根据指定坐标来找出指定距离内的其他坐标(已存在)怎么做?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆