?
本文檔使用 php中文網(wǎng)手冊(cè) 發(fā)布
GEOADD key longitude latitude member [longitude latitude member ...]
自3.2.0起可用。
時(shí)間復(fù)雜度:添加每個(gè)項(xiàng)目的 O(log(N)),其中 N 是排序集合中元素的數(shù)量。
將指定的地理空間項(xiàng)目(緯度,經(jīng)度,名稱)添加到指定的鍵。數(shù)據(jù)作為一個(gè)排序集存儲(chǔ)在密鑰中,以便以后可以使用帶有 GEORADIUS 或 GEORADIUSBYMEMBER 命令的半徑查詢來(lái)檢索項(xiàng)目。
該命令采用標(biāo)準(zhǔn)格式 x,y 的參數(shù),因此經(jīng)度必須在緯度之前指定??梢运饕淖鴺?biāo)是有限的:非??拷鼧O點(diǎn)的區(qū)域不可索引。EPSG:900913 / EPSG:3785 / OSGEO:41001的具體限制如下:
有效經(jīng)度從-180到180度。
有效緯度從 -85.05112878 到 85.05112878 度。
當(dāng)用戶嘗試索引超出指定范圍的坐標(biāo)時(shí),該命令將報(bào)告錯(cuò)誤。
注意:沒有 GEODEL 命令,因?yàn)槟梢允褂?ZREM 來(lái)刪除元素。地理索引結(jié)構(gòu)只是一個(gè)有序集合。
排序集的填充方式是使用稱為 Geohash 的技術(shù)。緯度和經(jīng)度位被交織以形成唯一的52位整數(shù)。我們知道有排序的集合雙分?jǐn)?shù)可以表示一個(gè)52位整數(shù),而不會(huì)失去精度。
此格式允許通過(guò)檢查覆蓋整個(gè)半徑所需的1 + 8區(qū)域并丟棄半徑外的元素來(lái)進(jìn)行半徑查詢。通過(guò)計(jì)算覆蓋框的范圍來(lái)檢查區(qū)域,從排序集合評(píng)分的較低有效部分中移除足夠的位,并計(jì)算評(píng)分范圍以在每個(gè)區(qū)域的排序集合中查詢。
它只是假設(shè)地球是一個(gè)球體,因?yàn)槭褂玫木嚯x公式是 Haversine 公式。這個(gè)公式只適用于地球,這不是一個(gè)完美的球體。在需要通過(guò) radius 和大多數(shù)其他應(yīng)用程序進(jìn)行查詢的社交網(wǎng)站上下文中使用引入的錯(cuò)誤不是問題。然而,在最糟糕的情況下,錯(cuò)誤可能高達(dá)0.5%,因此您可能需要考慮其他系統(tǒng)的錯(cuò)誤關(guān)鍵應(yīng)用程序。
整數(shù)回復(fù),具體為:
添加到已排序集合的元素?cái)?shù)量,不包括已更新分?jǐn)?shù)的元素。
redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania" (integer) 2
redis> GEODIST Sicily Palermo Catania "166274.1516"
redis> GEORADIUS Sicily 15 37 100 km 1) "Catania"
redis> GEORADIUS Sicily 15 37 200 km 1) "Palermo" 2) "Catania"