redis地理位置和MongoDB地理索引的使用

2 篇文章 1 订阅
2 篇文章 0 订阅

比较

  1. 经度纬度都要在有效区间。经度范围介于 -180 到 180,纬度范围大致介于-90和到90。
  2. redis使用Zset结构存储,将经度值、纬度值转换为一个值,二维量变成一维量找附近的位置,效率极高,不过限于平面,且无法分页。
  3. MongoDB更为灵活,通过建立地理位置索引,来实现附近的地理位置查找,可以支持平面、球面,还可分页,功能更为丰富完善。

Redis使用

  1. 添加地理位置坐标:GEOADD 键名 经度 纬度 位置名
  2. 删除地理位置(和操作zset是一样的):ZREM 键名 位置名
  3. 查找附近的位置(返回[[位置名,距离],[位置名,距离],[位置名,距离]...]):
    GEORADIUS 键名 经度 纬度 最大距离 单位(m或km) WITHDIST(意为带距离) count 数量数字 ASC(意为由近到远)
  4. demo(有自定义的工具方法,需要改造)

 MongoDB使用

  1. 需要建立2dsphere索引(2d索引不考虑):db.表名.createIndex({"建立索引的字段": "2dsphere"})
  2. 一般的数据类型为JSON格式的,可参考如下结构:db.pos.createIndex({"location": "2dsphere"})
  3.  查询附近位置且显示距离,单位为米
    db.getCollection('表名').aggregate([
    {$geoNear:{
        "near":{"type": "Point", "coordinates": [经度, 纬度]},
        "spherical":     true,
        "distanceField": "distance"
        }},
    {$skip:0},
    {$limit:20}
    ]);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值