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