天天看點

redis學習之Geospatial地理位置詳解

注:該文章的知識和舉例來至于狂神b站的redis教學,網站連接配接

官方文檔介紹

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

這些資料将會存儲到sorted set(底層原理實際就是Zset,是以可以用Zset指令操作geo)

這樣的目的是為了友善使用GEORADIUS或者GEORADIUSBYMEMBER指令對資料進行半徑查詢等操作。

該指令以采用标準格式的參數x,y,是以經度必須在緯度之前。這些坐标的限制是可以被編入索引的,區域面積可以很接近極點但是不能索引。具體的限制,由EPSG:900913 / EPSG:3785 / OSGEO:41001 規定如下:

有效的經度從-180度到180度。

有效的緯度從-85.05112878度到85.05112878度。

當坐标位置超出上述指定範圍時,該指令将會傳回一個錯誤。

相關指令:

GEOADD

GEODIST

GEOHASH

GEOPOS

GEORADIUS

GEORADIUSBYMEMBER

GEOADD 添加某城市的經緯度資訊

例:geoadd key 經度 次元 城市名

redis學習之Geospatial地理位置詳解
GEOPOS 從key裡傳回所有給定位置元素的位置(經度和緯度)

例:GEOPOS key 城市名

redis學習之Geospatial地理位置詳解
GEODIST 傳回兩個給定位置之間的距離

官方介紹:如果兩個位置之間的其中一個不存在, 那麼指令傳回空值。

指定機關的參數 unit 必須是以下機關的其中一個:

m 表示機關為米。

km 表示機關為千米。

mi 表示機關為英裡。

ft 表示機關為英尺。

如果使用者沒有顯式地指定機關參數, 那麼 GEODIST 預設使用米作為機關。

GEODIST 指令在計算距離時會假設地球為完美的球形, 在極限情況下, 這一假設最大會造成 0.5% 的誤差。

redis學習之Geospatial地理位置詳解
GEORADIUS 指定某一經緯度為中心,傳回某個直徑範圍内的元素
redis學習之Geospatial地理位置詳解
GEORADIUSBYMEMBER

這個指令和 GEORADIUS 指令一樣, 都可以找出位于指定範圍内的元素, 但是 GEORADIUSBYMEMBER 的中心點是由給定的位置元素決定的, 而不是像 GEORADIUS 那樣, 使用輸入的經度和緯度來決定中心點指定成員的位置被用作查詢的中心。

redis學習之Geospatial地理位置詳解
GEOHASH 傳回一個或多個位置元素的 Geohash 表示

該指令将二維的經緯度轉換為一維的字元串,如果兩個地點越近,字元串越相似。

redis學習之Geospatial地理位置詳解
檢視所有元素
redis學習之Geospatial地理位置詳解
删除元素
redis學習之Geospatial地理位置詳解