1. 程式人生 > 資料庫 >redis中對於距離的計算

redis中對於距離的計算

redis目前已經到了3.2版本,3.2版本里面新增的一個功能就是對GEO(地理位置)的支援。

地理位置大概提供了6個命令,分別為:

  • GEOADD
  • GEODIST
  • GEOHASH
  • GEOPOS
  • GEORADIUS
  • GEORADIUSBYMEMBER

具體的功能如下:

1.

命令:GEOADD key longitude latitude member [longitude latitude member ...]

命令描述:將指定的地理空間位置(緯度、經度、名稱)新增到指定的key中。

返回值:新增到sorted set元素的數目,但不包括已更新score的元素。

 

 

 

 

2.

命令:GEODIST key member1 member2 [unit]

命令描述:

返回兩個給定位置之間的距離。如果兩個位置之間的其中一個不存在, 那麼命令返回空值。指定單位的引數 unit 必須是以下單位的其中一個:

  • m 表示單位為米。
  • km 表示單位為千米。
  • mi 表示單位為英里
  • ft 表示單位為英尺。                                      

 

 

3.

命令:GEOPOS key member [member ...]

命令描述:從key裡返回所有給定位置元素的位置(經度和緯度)。

返回值:GEOPOS 命令返回一個數組, 陣列中的每個項都由兩個元素組成: 第一個元素為給定位置元素的經度, 而第二個元素則為給定位置元素的緯度。當給定的位置元素不存在時, 對應的陣列項為空值。

 

 

4.

命令:GEOHASH key member [member ...]

命令描述:返回一個或多個位置元素的 Geohash 表示。通常使用表示位置的元素使用不同的技術,使用Geohash位置52點整數編碼。由於編碼和解碼過程中所使用的初始最小和最大座標不同,編碼的編碼也不同於標準。此命令返回一個標準的Geohash

返回值:一個數組, 陣列的每個項都是一個 geohash 。 命令返回的 geohash 的位置與使用者給定的位置元素的位置一一對應。

 

 

5.

命令:GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]

命令描述:

以給定的經緯度為中心, 返回鍵包含的位置元素當中, 與中心的距離不超過給定最大距離的所有位置元素。

範圍可以使用以下其中一個單位:

  • m 表示單位為米。
  • km 表示單位為千米。
  • mi 表示單位為英里。
  • ft 表示單位為英尺。

在給定以下可選項時, 命令會返回額外的資訊:

  • WITHDIST: 在返回位置元素的同時, 將位置元素與中心之間的距離也一併返回。 距離的單位和使用者給定的範圍單位保持一致。
  • WITHCOORD: 將位置元素的經度和維度也一併返回。
  • WITHHASH: 以 52 位有符號整數的形式, 返回位置元素經過原始 geohash 編碼的有序集合分值。 這個選項主要用於底層應用或者除錯, 實際中的作用並不大。

命令預設返回未排序的位置元素。 通過以下兩個引數, 使用者可以指定被返回位置元素的排序方式:

  • ASC: 根據中心的位置, 按照從近到遠的方式返回位置元素。
  • DESC: 根據中心的位置, 按照從遠到近的方式返回位置元素。

在預設情況下, GEORADIUS 命令會返回所有匹配的位置元素。 雖然使用者可以使用 COUNT <count> 選項去獲取前 N 個匹配元素, 但是因為命令在內部可能會需要對所有被匹配的元素進行處理, 所以在對一個非常大的區域進行搜尋時, 即使只使用 COUNT 選項去獲取少量元素, 命令的執行速度也可能會非常慢。 但是從另一方面來說, 使用 COUNT 選項去減少需要返回的元素數量, 對於減少頻寬來說仍然是非常有用的。

返回值:

  • 在沒有給定任何 WITH 選項的情況下, 命令只會返回一個像 [“New York”,”Milan”,”Paris”] 這樣的線性(linear)列表。
  • 在指定了 WITHCOORD 、 WITHDIST 、 WITHHASH 等選項的情況下, 命令返回一個二層巢狀陣列, 內層的每個子陣列就表示一個元素。

在返回巢狀陣列時, 子陣列的第一個元素總是位置元素的名字。 至於額外的資訊, 則會作為子陣列的後續元素, 按照以下順序被返回:

  1. 以浮點數格式返回的中心與位置元素之間的距離, 單位與使用者指定範圍時的單位一致。
  2. geohash 整數。
  3. 由兩個元素組成的座標,分別為經度和緯度。

 

 

 

6.

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

命令描述:這個命令和 GEORADIUS 命令一樣, 都可以找出位於指定範圍內的元素, 但是 GEORADIUSBYMEMBER 的中心點是由給定的位置元素決定的。