• redis特殊数据类型-Geospatial(地理位置)用法


    一 Geospatial(地理位置)介绍

    1. 使用经纬度定位地理坐标并用一个有序集合zset保存,所以zset命令也可以使用
    2. 有效的经度从-180度到180度。
    3. 有效的纬度从-85.05112878度到85.05112878度。

    二 Geospatial应用场景

            

    1. 通过georadius就可以完成 附近的人功能
    2. withcoord:带上坐标
    3. withdist:带上距离,单位与半径单位相同
    4. COUNT n : 只显示前n个(按距离递增排序)

    三,命令

    1. geoadd key longitud(经度) latitude(纬度) member [..] 将具体经纬度的坐标存入一个有序集合
    2. geopos key member [member..] 获取集合中的一个/多个成员坐标
    3. geodist key member1 member2 [unit] 返回两个给定位置之间的距离。默认以米作为单位。
    4. georadius key longitude latitude radius m|km|mi|ft [WITHCOORD][WITHDIST] [WITHHASH] [COUNT count] 以给定的经纬度为中心, 返回集合包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
    5. GEORADIUSBYMEMBER key member radius... 功能与GEORADIUS相同,只是中心位置不是具体的经纬度,而是使用结合中已有的成员作为中心点。
    6. geohash key member1 [member2..] 返回一个或多个位置元素的Geohash表示。使用Geohash位置52点整数编码。

    四,案例

    1、geoadd 添加地理位置

    1. # 规则:两级无法直接添加,我们一般会下载城市数据,直接通过java程序一次性导入!
    2. # 有效的经度从-180度到180度。
    3. # 有效的纬度从-85.05112878度到85.05112878度。
    4. # 当坐标位置超出上述指定范围时,该命令将会返回一个错误,如:
    5. 127.0.0.1:6379> geoadd china:city 39.90 116.40 beijin
    6. (error) ERR invalid longitude,latitude pair 39.900000,116.400000
    7. # 参数 key 值()
    8. 127.0.0.1:6379> geoadd china:city 116.40 39.90 beijing
    9. (integer) 1
    10. 127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai
    11. (integer) 1
    12. 127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqi 114.05 22.52 shengzhen
    13. (integer) 2
    14. 127.0.0.1:6379> geoadd china:city 120.16 30.24 hangzhou 108.96 34.26 xian
    15. (integer) 2

    2、geopos 获得当前坐标值

           

    1. 127.0.0.1:6379> GEOPOS china:city beijing # 获取指定的城市的经度和纬度!
    2. 1) 1) "116.39999896287918091"
    3. 2) "39.90000009167092543"
    4. 127.0.0.1:6379> GEOPOS china:city beijing chongqi
    5. 1) 1) "116.39999896287918091"
    6. 2) "39.90000009167092543"
    7. 2) 1) "106.49999767541885376"
    8. 2) "29.52999957900659211"

    3、geodist 返回两地之间的距离

    单位:
    m 表示单位为米。
    km 表示单位为千米。
    mi 表示单位为英里。
    ft 表示单位为英尺。

    1. 127.0.0.1:6379> GEODIST china:city beijing shanghai km # 查看上海到北京的直线距离
    2. "1067.3788"
    3. 127.0.0.1:6379> GEODIST china:city beijing chongqi km # 查看重庆到北京的直线距离
    4. "1464.0708"

    4、georadiusbymember 找出位于指定元素周围的其他元素

    1. 127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km
    2. 1) "beijing"
    3. 2) "xian"
    4. 127.0.0.1:6379> GEORADIUSBYMEMBER china:city shanghai 400 km
    5. 1) "hangzhou"
    6. 2) "shanghai"

    5、geohash 返回元素的 Geohash

    Geohash :将位置信息转化为 11个字符的Geohash字符串!
    将二维的经纬度转换为一维的字符串,如果两个字符串越接近,那么则距离越近!

    1. 127.0.0.1:6379> geohash china:city beijing chongqi
    2. 1) "wx4fbxxfke0"
    3. 2) "wm5xzrybty0"

    6、georadius 以给定的经纬度为中心, 找出某一半径内的元素

    我附近的人? (获得所有附近的人的地址,定位!)通过半径来查询!
    获得附近指定数量的人,如:200人
    所有数据应该都录入:china:city

    1. 127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km # 以110,30 这个经纬度为中心,寻找方圆1000km内的城市
    2. 1) "chongqi"
    3. 2) "xian"
    4. 3) "shengzhen"
    5. 4) "hangzhou"
    6. 127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist # 显示到中间距离的位置
    7. 1) 1) "chongqi"
    8. 2) "341.9374"
    9. 2) 1) "xian"
    10. 2) "483.8340"
    11. 127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withcoord # 显示他人的定位信息
    12. 1) 1) "chongqi"
    13. 2) 1) "106.49999767541885376"
    14. 2) "29.52999957900659211"
    15. 2) 1) "xian"
    16. 2) 1) "108.96000176668167114"
    17. 2) "34.25999964418929977"
    18. 127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist withcoord count 1 # 筛选出指定数量的结果!
    19. 1) 1) "chongqi"
    20. 2) "341.9374"
    21. 3) 1) "106.49999767541885376"
    22. 2) "29.52999957900659211"
    23. 127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist withcoord count 2
    24. 1) 1) "chongqi"
    25. 2) "341.9374"
    26. 3) 1) "106.49999767541885376"
    27. 2) "29.52999957900659211"
    28. 2) 1) "xian"
    29. 2) "483.8340"
    30. 3) 1) "108.96000176668167114"
    31. 2) "34.25999964418929977"

    7、Geospatial 的其他操作 -查看,删除

    GEO 底层的实现原理其实就是 Zset!
    我们可以使用Zset命令来操作Geospatial !

    1. 127.0.0.1:6379> ZRANGE china:city 0 -1 # 查看地图中全部的元素
    2. 1) "chongqi"
    3. 2) "xian"
    4. 3) "shengzhen"
    5. 4) "hangzhou"
    6. 5) "shanghai"
    7. 6) "beijing"
    8. 127.0.0.1:6379> zrem china:city beijing # 移除指定元素!
    9. (integer) 1
    10. 127.0.0.1:6379> ZRANGE china:city 0 -1
    11. 1) "chongqi"
    12. 2) "xian"
    13. 3) "shengzhen"
    14. 4) "hangzhou"
    15. 5) "shanghai"

  • 相关阅读:
    KofamScan-KEGG官方推荐的使用系同源和隐马尔可夫模型进行KO注释
    【C进阶】之动态内存分配及内存操作函数
    坐月子真不能洗头吗?
    Vulkan SDK 中的 demo 编译配置 win10 vs2019
    卷积神经网络的基本操作,卷积神经网络卷积计算
    经典算法之插入排序(InsertionSort)
    C#中的委托
    操作系统 day09(线程)
    B 树的简单认识
    C语言刷题(一)
  • 原文地址:https://blog.csdn.net/weixin_54097396/article/details/137283258