這是在redis 3.2版本推出的,推算地理位置的信息,兩地之間的距離,周圍方圓的人等等場景都可以用它實現。
將指定的地理空間位置(緯度、經度、名稱)加入指定的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個地方的經緯度:上海、蘇州、北京、廣州、廣州海珠區。
從key傳回所有給定位置元素的位置(經度和緯度)。
geopos china:city suzhou shanghai
傳回位置的座標。
傳回兩個給定位置之間的距離。
如果兩個位置之間的其中一個不存在, 那麼指令傳回空值。
指定單位的參數 unit 必須是下列單位的其中一個:
m 表示單位為公尺(預設)。
km 表示單位為千米。
mi 表示單位為英哩。
ft 表示單位為英尺。
geodist china:city suzhou shanghai km
以給定的經緯度為中心, 返回鍵包含的位置元素當中, 與中心的距離不超過給定最大距離的所有位置元素。
georadius china:city 121.49295 31.22337 30 km
我以 上海黃浦區的座標121.49295 31.22337為中心,尋找30km之內的城市。
再遠點,100km之內,還可以找到suzhou
,加上withdist
顯示出距離。
加上withcoord
可以傳回經緯度。
再加上count
,只回傳我指定的數量。
georadius china:city 121.49295 31.22337 100 km withdist withcoord count 1
這個指令和 georadius指令一樣, 都可以找出位於指定範圍內的元素。
但這裡不是指定中心點座標,而是指定以哪個元素為中心點。
georadiusbymember china:city suzhou 100 km withdist
這裡以元素suzhou
為中心點,找週五100km內的其他元素。
一個或多個位置元素,用hash表示。
geohash china:city suzhou shanghai
回傳11個字元的Geohash字串,代表當前經緯度的字串,就是換了個形式,將二維的經緯度轉換成了一維的字串。
如果上圖結構裡的2個字串越接近,則2個位置距離也越近,這些了解即可。
geo的底層原則還是zset,我們可以使用zset指令來操作geo,例如移除geo裡的城市。
zrem china:city haizhuqu
以上是Redis特殊資料類型Geospatial怎麼使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!