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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM