天天看點

redis 特殊資料類型 geospatial(地理位置)

1 基本指令

  • 插入

  将指定的地理空間位置(經度、緯度、名稱)添加到指定的 key 中,該指令以采用标準格式的參數 x, y,是以經度必須在緯度之前。非常靠近極點的位置是不能被索引的。

  有效的經度:-180 度到 180 度

  有效的緯度:-85.05112878 度到 85.05112878 度

超出範圍則報錯。
127.0.0.1:6379> GEOADD guangdong-city 113.27324 23.15792 guangzhou	# 插入廣州坐标
(integer) 1
127.0.0.1:6379> GEOADD guangdong-city 113.88308 22.55329 shenzhen 113.29673 22.20907 zhuhai	# 同時插入多個城市坐标
(integer) 2
           

  以下指令的前提是必須存在點的資訊,可以通過程式導入各個點位置。

  • 查找
127.0.0.1:6379> ZRANGE guangdong-city 0 -1	# 檢視所有點
1) "jiangmen"
2) "zhuhai"
3) "zhongshan"
4) "shenzhen"
5) "guangzhou"
6) "dongguan"
7) "huizhou"
127.0.0.1:6379> GEOPOS guangdong-city guangzhou	# 查找指定城市的坐标
1) 1) "113.27324062585830688"
   2) "23.1579209662846921"
127.0.0.1:6379> GEOPOS guangdong-city guangzhou shenzhen	# 查找多個指定城市坐标
1) 1) "113.27324062585830688"
   2) "23.1579209662846921"
2) 1) "113.88307839632034302"
   2) "22.55329111565713873"
           
  • 移除
127.0.0.1:6379> ZREM guangdong-city huizhou	# 移除指定點
(integer) 1
127.0.0.1:6379> ZRANGE guangdong-city 0 -1
1) "jiangmen"
2) "zhuhai"
3) "zhongshan"
4) "shenzhen"
5) "guangzhou"
6) "dongguan"
           
  • 兩地點之間的直線距離
127.0.0.1:6379> GEODIST guangdong-city guangzhou shenzhen	# 廣州和深圳的直線距離 (預設米)
"91811.7949"
127.0.0.1:6379> GEODIST guangdong-city guangzhou shenzhen km	# 廣州和深圳的直線距離 (指定機關)
"91.8118"
           
  • 預設 m,表示機關為米
  • km 表示機關為千米
  • mi 表示機關為英裡
  • ft 表示機關為英尺
  • 以經緯度為中心,擷取指定範圍内的點資訊,如附近的人,通過半徑計算。
127.0.0.1:6379> GEORADIUS guangdong-city 113.27324 23.15792 90 km # 擷取以廣州為中心,半徑 90 km 内的城市名稱
1) "guangzhou"
2) "dongguan"
3) "jiangmen"
4) "zhongshan"
127.0.0.1:6379> GEORADIUS guangdong-city 113.27324 23.15792 90 km withdist	# 擷取以廣州為中心,半徑 90 km 内的城市名稱及距離中心點的距離。
1) 1) "guangzhou"
   2) "0.0001"
2) 1) "dongguan"
   2) "51.2881"
3) 1) "jiangmen"
   2) "68.5207"
4) 1) "zhongshan"
   2) "72.4447"
127.0.0.1:6379> GEORADIUS guangdong-city 113.27324 23.15792 90 km withcoord	# 擷取以廣州為中心,半徑 90 km 内的城市名稱及經緯度
1) 1) "guangzhou"
   2) 1) "113.27324062585830688"
      2) "23.1579209662846921"
2) 1) "dongguan"
   2) 1) "113.7517896294593811"
      2) "23.02067088494880664"
3) 1) "jiangmen"
   2) 1) "113.11103135347366333"
      2) "22.56027934189344109"
4) 1) "zhongshan"
   2) 1) "113.39259892702102661"
      2) "22.51594960353775576"
127.0.0.1:6379> GEORADIUS guangdong-city 113.27324 23.15792 90 km withcoord count 3	# 擷取以廣州為中心,半徑 90 km 内的指定數量的城市名稱及經緯度
1) 1) "guangzhou"
   2) 1) "113.27324062585830688"
      2) "23.1579209662846921"
2) 1) "dongguan"
   2) 1) "113.7517896294593811"
      2) "23.02067088494880664"
3) 1) "jiangmen"
   2) 1) "113.11103135347366333"
      2) "22.56027934189344109"
           
  • 以某點名稱為中心,擷取指定範圍内的點資訊
127.0.0.1:6379> GEORADIUSBYMEMBER guangdong-city guangzhou 90 km	# 和上面的以經緯度指令文法大體一緻
1) "guangzhou"
2) "dongguan"
3) "jiangmen"
4) "zhongshan"
127.0.0.1:6379> GEORADIUSBYMEMBER guangdong-city guangzhou 90 km withdist
1) 1) "guangzhou"
   2) "0.0000"
2) 1) "dongguan"
   2) "51.2880"
3) 1) "jiangmen"
   2) "68.5209"
4) 1) "zhongshan"
   2) "72.4447"
127.0.0.1:6379> GEORADIUSBYMEMBER guangdong-city guangzhou 90 km withcoord
1) 1) "guangzhou"
   2) 1) "113.27324062585830688"
      2) "23.1579209662846921"
2) 1) "dongguan"
   2) 1) "113.7517896294593811"
      2) "23.02067088494880664"
3) 1) "jiangmen"
   2) 1) "113.11103135347366333"
      2) "22.56027934189344109"
4) 1) "zhongshan"
   2) 1) "113.39259892702102661"
      2) "22.51594960353775576"
127.0.0.1:6379> GEORADIUSBYMEMBER guangdong-city guangzhou 90 km withcoord count 2
1) 1) "guangzhou"
   2) 1) "113.27324062585830688"
      2) "23.1579209662846921"
2) 1) "dongguan"
   2) 1) "113.7517896294593811"
      2) "23.02067088494880664"
           

繼續閱讀