溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

redis geo 地理位置系應(yīng)用戰(zhàn)案例

發(fā)布時間:2020-02-28 10:43:45 來源:網(wǎng)絡(luò) 閱讀:4246 作者:hgditren 欄目:數(shù)據(jù)庫

專有名詞
geographic 地理
radius 半徑范圍; 半徑(距離); 用半徑度量的圓形面積

redis GEO實現(xiàn)

redis GEO實現(xiàn)主要包含了以下兩項技術(shù):

1、使用geohash保存地理位置的坐標(biāo)。
2、使用有序集合(sort set)保存地理位置的集合。(重點(diǎn):基于sort set存儲)

redis GEO 方法列表

  1. geoadd

含義:

將指定的地理空間位置(緯度、經(jīng)度、名稱)添加到指定的key中。

語法:

GEOADD key longitude latitude member [longitude latitude member]

實現(xiàn):

geoadd city_clusters 116.405285 39.904989 beijing  121.472644 31.231706 shanghai
  1. geopos

含義:

從key里返回所有給定位置元素的位置(經(jīng)度和緯度)

語法:

GEOPOS key member [member ...]

實現(xiàn):

127.0.0.1:6379> geopos city_clusters beijing shanghai
1) 1) "116.40528291463851929"
   2) "39.9049884229125027"
2) 1) "121.47264629602432251"
   2) "31.23170490709807012"
  1. geodist

含義:

返回兩個給定位置之間的距離。
備注:
指定單位的參數(shù) unit 必須是以下單位的其中一個:
m 表示單位為米。
km 表示單位為千米。
mi 表示單位為英里。
ft 表示單位為英尺。
如果用戶沒有顯式地指定單位參數(shù), 那么 GEODIST 默認(rèn)使用米作為單位。

語法:

GEODIST key member1 member2 [unit]

實現(xiàn):

127.0.0.1:6379> geodist city_clusters beijing shanghai km
"1067.5980"
127.0.0.1:6379> geodist city_clusters beijing shanghai
"1067597.9668"
  1. geohash

含義:

返回一個或多個位置元素的 Geohash 表示。
作用:將二維的經(jīng)緯度轉(zhuǎn)換成字符串。

語法:

GEOHASH key member [member ...]

實現(xiàn):

127.0.0.1:6379> geohash city_clusters beijing
1) "wx4g0b7xrt0"
127.0.0.1:6379> geohash city_clusters beijing shanghai
1) "wx4g0b7xrt0"
2) "wtw3sjt9vg0"
  1. georadius

含義:

以給定的經(jīng)緯度為中心, 返回鍵包含的位置元素當(dāng)中, 與中心的距離不超過給定最大距離的所有位置元素。
備注:
范圍可以使用以下其中一個單位:
m 表示單位為米。
km 表示單位為千米。
mi 表示單位為英里。
ft 表示單位為英尺。
在給定以下可選項時, 命令會返回額外的信息:
WITHDIST: 在返回位置元素的同時, 將位置元素與中心之間的距離也一并返回。 距離的單位和用戶給定的范圍單位保持一致。
WITHCOORD: 將位置元素的經(jīng)度和維度也一并返回。
WITHHASH: 以 52 位有符號整數(shù)的形式, 返回位置元素經(jīng)過原始 geohash 編碼的有序集合分值。 這個選項主要用于底層應(yīng)用或者調(diào)試, 實際中的作用并不大。

COUNT限定返回的記錄數(shù)

命令默認(rèn)返回未排序的位置元素。 通過以下兩個參數(shù), 用戶可以指定被返回位置元素的排序方式:
ASC: 根據(jù)中心的位置, 按照從近到遠(yuǎn)的方式返回位置元素。
DESC: 根據(jù)中心的位置, 按照從遠(yuǎn)到近的方式返回位置元素。

語法:

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

實現(xiàn):

 georadius city_clusters 114.546569 30.496705 1000 km withdist withcoord withhash  count 3 asc  
1) 1) "wuhan"
   2) "0.0002"
   3) (integer) 4051940381831537
   4) 1) "114.54657107591629028"
      2) "30.49670420836107354"
2) 1) "ezhou"
   2) "34.4580"
   3) (integer) 4051965036178493
   4) 1) "114.88938957452774048"
      2) "30.40377626121739496"
3) 1) "shanghai"
   2) "666.1872"
   3) (integer) 4054803464817068
   4) 1) "121.47264629602432251"
      2) "31.23170490709807012
  1. georadiusbymember

含義:

和 GEORADIUS 命令一樣, 都可以找出位于指定范圍內(nèi)的元素, 但是 GEORADIUSBYMEMBER 的中心點(diǎn)是由給定的位置元素決定的, 而不是像 GEORADIUS 那樣, 使用輸入的經(jīng)度和緯度來決定中心點(diǎn)
備注:
同georadius

語法:

GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]

實現(xiàn):

 georadiusbymember city_clusters ezhou 1000 km withcoord withdist withhash count 10 asc
1) 1) "ezhou"
   2) "0.0000"
   3) (integer) 4051965036178493
   4) 1) "114.88938957452774048"
      2) "30.40377626121739496"
2) 1) "wuhan"
   2) "34.4578"
   3) (integer) 4051940381831537
   4) 1) "114.54657107591629028"
      2) "30.49670420836107354"
3) 1) "shanghai"
   2) "635.4470"
   3) (integer) 4054803464817068
   4) 1) "121.47264629602432251"
      2) "31.23170490709807012"
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI