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

比较

  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}
    ]);

猜你喜欢

转载自blog.csdn.net/qq_37575994/article/details/128312504