首頁  >  文章  >  資料庫  >  Redis特殊資料類型Geospatial怎麼使用

Redis特殊資料類型Geospatial怎麼使用

PHPz
PHPz轉載
2023-05-26 14:55:06565瀏覽

Redis特殊資料類型Geospatial地理空間

這是在redis 3.2版本推出的,推算地理位置的信息,兩地之間的距離,周圍方圓的人等等場景都可以用它實現。

一、geoadd

將指定的地理空間位置(緯度、經度、名稱)加入指定的key。

這裡可以藉助網路上的一些查詢經緯度的工具來取得資料。

geoadd china:city 121.472644 31.231706 shanghai
geoadd china:city 120.619585 31.299379 suzhou
geoadd china:city 116.405285 39.904989 beijing
geoadd china:city 113.280637 23.125178 guangzhou 113.26197 23.10379 haizhuqu

china:city這個key裡,增加了5個地方的經緯度:上海、蘇州、北京、廣州、廣州海珠區。

Redis特殊資料類型Geospatial怎麼使用

二、geopos

從key傳回所有給定位置元素的位置(經度和緯度)。

geopos china:city suzhou shanghai

傳回位置的座標。

Redis特殊資料類型Geospatial怎麼使用

三、geodist

傳回兩個給定位置之間的距離。

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

指定單位的參數 unit 必須是下列單位的其中一個:

  • m 表示單位為公尺(預設)。

  • km 表示單位為千米。

  • mi 表示單位為英哩。

  • ft 表示單位為英尺。

geodist china:city suzhou shanghai km

Redis特殊資料類型Geospatial怎麼使用

四、georadius

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

georadius china:city 121.49295 31.22337 30 km

我以 上海黃浦區的座標121.49295 31.22337為中心,尋找30km之內的城市。

Redis特殊資料類型Geospatial怎麼使用

再遠點,100km之內,還可以找到suzhou,加上withdist顯示出距離。

加上withcoord可以傳回經緯度。

Redis特殊資料類型Geospatial怎麼使用

再加上count,只回傳我指定的數量。

georadius china:city 121.49295 31.22337 100 km withdist withcoord count 1

Redis特殊資料類型Geospatial怎麼使用

五、georadiusbymember

這個指令和 georadius指令一樣, 都可以找出位於指定範圍內的元素。

但這裡不是指定中心點座標,而是指定以哪個元素為中心點。

georadiusbymember china:city suzhou 100 km withdist

這裡以元素suzhou為中心點,找週五100km內的其他元素。

Redis特殊資料類型Geospatial怎麼使用

六、geohash

一個或多個位置元素,用hash表示。

geohash china:city suzhou shanghai

Redis特殊資料類型Geospatial怎麼使用

回傳11個字元的Geohash字串,代表當前經緯度的字串,就是換了個形式,將二維的經緯度轉換成了一維的字串。

如果上圖結構裡的2個字串越接近,則2個位置距離也越近,這些了解即可。

geo的底層原則還是zset,我們可以使用zset指令來操作geo,例如移除geo裡的城市。

zrem china:city haizhuqu

Redis特殊資料類型Geospatial怎麼使用

#

以上是Redis特殊資料類型Geospatial怎麼使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除