Redis数据结构:地理坐标



通过地理坐标(Redis GEO),用户可将经纬度格式的地理坐标存储并进行操作。



数据结构

  • 地理坐标


地理坐标

  • 存储坐标
    1.geoadd命令  格式:geoadd key [NX|XX] [CH] longitude latitude member [longitude latitude member …]
    将一个或多个经纬度坐标存储到位置集合中并对应设置名字,执行后返回新添加的坐标数量,若是更新member的位置坐标则返回0。
    geoadd key longitude latitude member [longitude latitude member ...]
  • redis计算两坐标间距离 redis 坐标_git

  • XX选项的作用是只更新不添加,执行后返回0。
    geoadd key XX longitude latitude member [longitude latitude member ...]
  • redis计算两坐标间距离 redis 坐标_数据库_02

  • NX选项的作用是只添加不更新,执行成功返回添加元素的个数。
    geoadd key NX longitude latitude member [longitude latitude member ...]
  • redis计算两坐标间距离 redis 坐标_数组_03

  • CH选项的作用是返回被修改成员的数量而非添加成功的成员数量,被修改包括新添加。
    geoadd key CH longitude latitude member [longitude latitude member ...]
  • redis计算两坐标间距离 redis 坐标_数据库_04

  • 获取指定位置坐标
    1.geopos命令  格式:geopos key member [member …]
    获取给定位置的坐标,返回一个数组作为执行结果,数组第一个项和第二个项与用户设置的顺序相同,位置不存在时返回nil。
    geopos key member [member ...]
  • redis计算两坐标间距离 redis 坐标_redis计算两坐标间距离_05

  • 获取指定位置的Geohash值
    1.geohash命令  格式:geohash key member [member …]
    获取经纬度坐标的Geohash表示,字符串格式返回。位置集合或位置不存在时返回nil。
    geohash key member [member ...]
  • redis计算两坐标间距离 redis 坐标_redis计算两坐标间距离_06

  • 计算位置间直线距离
    1.geodist命令  格式:geodist key member1 member2 [m|km|ft|mi]
    默认情况下返回的距离以米为单位,ft为英尺,mi为英里。位置不存在时返回nil。
    geodist key member1 member2 [m|km|ft|mi]
  • redis计算两坐标间距离 redis 坐标_数组_07

  • 查找指定坐标半径内的其他位置
    1.georadius命令  格式:georadius key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key] [STOREDIST key]
    在位置集合中,查找位于给定经纬度给定半径内的位置。位置集合不存在或集中中无满足位置返回空集。
    georadius key longitude latitude radius m|km|ft|mi
  • redis计算两坐标间距离 redis 坐标_redis_08

  • WITHDIST选项可返回匹配位置与给定位置间距离,数组形式返回。
    georadius key longitude latitude radius m|km|ft|mi WITHDIST
  • redis计算两坐标间距离 redis 坐标_数据库_09

  • WITHCOORD 选项可返回匹配位置坐标,数组形式返回。
    georadius key longitude latitude radius m|km|ft|mi WITHCOORD WITHDIST
  • redis计算两坐标间距离 redis 坐标_git_10

  • ASC|DESC选项可指定返回结果排序方式,按照距离升序(ASC)或降序(DESC)排列返回,不指定时默认升序。
    georadius key longitude latitude radius m|km|ft|mi WITHCOORD WITHDIST ASC|DESC
  • redis计算两坐标间距离 redis 坐标_数组_11

  • COUNT count [ANY]选项指定返回的位置个数。
    georadius key longitude latitude radius m|km|ft|mi WITHCOORD WITHDIST ASC|DESC COUNT count [ANY]
  • redis计算两坐标间距离 redis 坐标_数据库_12

  • 查找指定位置半径内的其他位置
    1.georadiusbymember命令  格式:georadiusbymember key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key] [STOREDIST key]
    与georadius的区别是给定的不是经纬度而是集合中的位置,匹配位置中会返回指定的位置。集合不存在时返回空集,位置不存在时返回error。
    georadiusbymember key member radius m|km|ft|mi
  • redis计算两坐标间距离 redis 坐标_redis计算两坐标间距离_13

  • 使用有序集合命令操作GEO数据
    一个位置集合实际上就是一个有序集合,经纬度及位置添加到位置集合实际上就是把给定的经纬度转成数字Geohash值添加到有序集合。
  • redis计算两坐标间距离 redis 坐标_git_14

  • 常见用法
    1.查找附近用户