如何实现查找附近的人
来源:互联网 发布:小说软件下载排行榜 编辑:程序博客网 时间:2024/04/30 13:58
问题:给定一个用户A,返回与此用户相距小于d的所有用户。支持GEO的后端存储有MongoDB,Redis等。那么如果让我们实现,我们应该怎么做呢?
思路:围绕此用户生成一个圆形,半径是d,返回所有被此园覆盖的用户。
方法1: 先求方,再求园。
如果直接求园,每一个用户都要计算距离值,无法利用到索引,可以先求方,将经度值和纬度值分别差值小于半径的点拿出来,然后在求园,将不符合点的用户过滤。
方法2: 位置敏感hash
MongoDB采用的就是这种方式:具体方式是先将整个地图分为四个相等的区域,然后给每个区域赋值,比如左下方是00,左上方是01,右下方是10,右上方是11.
a. 给定一个点,算出此点在哪个区域,比如在右上方,则是11,那么geohash的值的前两位就是11.
b. 将右上方区域继续切分为四个相等的区域,然后算出此点在哪个区域,如果在右下方,那么geohash的接下来两位就是10.
c 就这样迭代n次,geohash的值就是2n位的。n越大,精度越高,MongoDB的默认值是26次。
然后计算相邻的时候就比较容易了,因为hash值是位置敏感hash,所以越是相近的点那么他们的差值就越小。
方法2的优点显而易见,求相邻的速度非常快,是O(1), 缺点是模拟相邻,并不是真正的圆形等距离,不过这一缺点可以靠增加迭代次数实现,也就是精度提高。方法1的优点是严格的圆形等距离,但缺点是算法复杂度根附近的用户数相关。
原文:http://blog.csdn.net/hongchangfirst/article/details/51518371
作者:hongchangfirst
hongchangfirst的主页:http://blog.csdn.net/hongchangfirst
- 如何实现查找附近的人
- 查找附近的人-mongodb的实现
- 后台实现查找附近的人接口
- Android查找附近的人(云服务)实现方式
- 使用elasticsearch1.5.2实现查找附近的人
- 使用elasticsearch1.5.2实现查找附近的人
- 【易微信系列一】查找附近的人
- “附近的人”功能实现
- 附近的人,实现思路
- geohash算法,实现快速查找附近的点
- app后端开发四:GeoHash实现查找附近的X
- mongodb实现lbs地理位置查找附近的商家
- 基于Mysql5.7实现查找附近的店铺
- android附近的人的实现
- 计算附近的人的常用实现
- PHP实现搜索附近的人代码
- Geo redis实现附近的车辆/人
- PHP实现搜索附近的人
- StringIO 跟 BytesIO
- iphone安装burp证书
- 文件和目录
- SP namespace (sp.js)
- LoadRunner+Android模所器录制脚本
- 如何实现查找附近的人
- Windows下安装Django
- HUBUT
- 序列化
- 模仿系统方法自定义UIAlertView的实现和代理
- C/C++零碎知识点
- InnoDB存储引擎MVCC的工作原理
- Java第四课:接口
- mysql批量导出、导入文本数据