• Redis 中的 GEO(地理信息)类型


     

    Redis 中的 GEO(地理信息)类型

    • 1 概述
    • 2 GEOADD,添加成员的经纬度信息
    • 3 GEODIST,计算成员间距离
    • 4 GEORADIUS 基于经纬度坐标的范围查询
    • 5 GEORADIUSBYMEMBER 基于成员位置范围查询
    • 6 GEOPOS,获取成员经纬度
    • 7 GEOHASH 计算经纬度Hash

    1 概述

    Redis 3.2 中增加了对GEO类型的支持。GEO,Geographic,地理信息的缩写。该类型,就是元素的2维坐标,在地图上就是经纬度。redis基于该类型,提供了经纬度设置,查询,范围查询,距离查询,经纬度Hash等常见操作。

    通过 help @geo 可以看到全部的操作支持:

    127.0.0.1:6379> help @geo
    GEOADD key longitude latitude member [longitude latitude member ...]
    添加成员的经纬度信息
    
    GEODIST key member1 member2 [unit]
    计算成员间距离
    
    GEOHASH key member [member ...]
    计算经纬度Hash
    
    GEOPOS key member [member ...]
    获取经纬度
    
    GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
    基于经纬度坐标范围查询
    
    GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
    基于成员范围查询

    下面对常用操作,做说明演示。

    2 GEOADD,添加成员的经纬度信息

    语法:

    GEOADD key 经度 纬度 member

    以吉林省主要城市的经纬度为例:

    >  geoadd citys 125.19 43.54 changchun
    >  geoadd citys 122.50 45.38 baicheng
    >  geoadd citys 126.26 41.56 baishan
    >  geoadd citys 124.18 45.30 daan
    >  geoadd citys 125.42 44.32 dehui 
    >  geoadd citys 128.13 43.22 dunhua
    >  geoadd citys 124.49 43.31 gongzhuling 
    >  geoadd citys 129.00 42.32 helong
    >  geoadd citys 126.44 42.58 huadian
    >  geoadd citys 130.22 42.52 hunchun
    >  geoadd citys 126.11 41.08 jian
    >  geoadd citys 127.21 43.42 jiaohe 
    >  geoadd citys 126.33 43.52 jilin
    >  geoadd citys 125.51 44.09 jiutai
    >  geoadd citys 125.09 42.54 liaoyuan
    >  geoadd citys 126.53 41.49 linjiang
    >  geoadd citys 129.26 42.46 longjing
    >  geoadd citys 125.40 42.32 meihekou
    >  geoadd citys 126.57 44.24 shulan
    >  geoadd citys 124.22 43.10 siping
    >  geoadd citys 124.49 45.11 songyuan
    >  geoadd citys 122.47 45.20 taoyan
    >  geoadd citys 125.56 41.43 tonghua
    >  geoadd citys 129.51 42.57 tumen
    >  geoadd citys 129.30 42.54 yanjin
    >  geoadd citys 126.32 44.49 yushu

    3 GEODIST,计算成员间距离

    语法:

    GEODIST key member1 member2 [unit]

    unit 为结果单位,可选,支持:m,km,mi,ft,分别表示米(默认),千米,英里,英尺。

    计算演示,计算长春到敦化的距离:

    >  GEODIST citys changchun dunhua
    "240309.2820"
    
    >  GEODIST citys changchun dunhua km
    "240.3093"

    4 GEORADIUS 基于经纬度坐标的范围查询

    语法:

    GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

    检索以某个经纬度为圆心,在特定半径的圆形范围内的成员。

    查询演示,以经纬度125,42为圆心,100公里范围内的成员:

    >  GEORADIUS citys 125 42 100 km
    1) "tonghua"
    2) "meihekou"
    3) "liaoyuan"

    支持的可选项的意义是:

    • WITHCOORD,同时获取成员经纬度
    • WITHDIST,同时获取距离参考点(圆心)的距离
    • WITHHASH,同时获取成员经纬度HASH值
    • COUNT count,限制获取成员的数量
    • ASC|DESC,结果升降序排序
    • STORE key,在命令表,READONLY模式下使用
    • STOREDIST key,在命令表,READONLY模式下使用

    5 GEORADIUSBYMEMBER 基于成员位置范围查询

    语法:

    GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST ke##y]

    检索以某个成员为圆心,在特定半径的圆形范围内的成员。功能与 GEORADIUS 类似,只不过圆心为某个成员位置。

    查询演示,以经纬度 changchun 为圆心,100公里范围内的成员:

    > GEORADIUSBYMEMBER citys changchun 100 km
    1) "siping"
    2) "gongzhuling"
    3) "changchun"
    4) "jilin"
    5) "jiutai"
    6) "dehui"

    6 GEOPOS,获取成员经纬度

    语法:

    GEOPOS key member [member ...]

    获取某个成员经纬度:

    > GEOPOS citys changchun
    1) "125.19000023603439"
    2) "43.539999086145414"

    7 GEOHASH 计算经纬度Hash

    语法:

    GEOHASH key member [member ...]

    获取将经纬度坐标生成的HASH字符串。

    > GEOHASH citys changchun
    1) "wz9p8y0wfk0"

    GEOHASH,是表示坐标的一种方法,便于检索,存储。

    以上就是 Redis 提供的对2D位置信息的支持。

    转载:https://zhuanlan.zhihu.com/p/60011805

  • 相关阅读:
    宏定义函数 字符串 多行书写采用换行
    new / delete && new[] / delete[]
    删除vector中的重复元素
    AES加密算法通用版本
    字符串匹配KMP算法详解
    超外差【整理】
    LTE PDCCH 盲检测
    PDCCH学习
    PDCCH format 与传输模式之间的关系
    LTE测量事件主要有下面几种:Event A1、Event A2、Event A3、Event A4、Event A5、Event B1、Event B2
  • 原文地址:https://www.cnblogs.com/-wenli/p/13702492.html
Copyright © 2020-2023  润新知