将指定的地理空間位置(緯度、經度、名稱)添加到指定的
key
中。這些資料将會存儲到
sorted set
這樣的目的是為了友善使用GEORADIUS或者GEORADIUSBYMEMBER指令對資料進行半徑查詢等操作。
該指令以采用标準格式的參數x,y,是以經度必須在緯度之前。這些坐标的限制是可以被編入索引的,區域面積可以很接近極點但是不能索引。具體的限制,由EPSG:900913 / EPSG:3785 / OSGEO:41001 規定如下:
- 有效的經度從-180度到180度。
- 有效的緯度從-85.05112878度到85.05112878度。
當坐标位置超出上述指定範圍時,該指令将會傳回一個錯誤。
它是如何工作的?
sorted set使用一種稱為Geohash的技術進行填充。經度和緯度的位是交錯的,以形成一個獨特的52位整數. 我們知道,一個sorted set 的double score可以代表一個52位的整數,而不會失去精度。
這種格式允許半徑查詢檢查的1 + 8個領域需要覆寫整個半徑,并丢棄元素以外的半徑。通過計算該區域的範圍,通過計算所涵蓋的範圍,從不太重要的部分的排序集的得分,并計算得分範圍為每個區域的sorted set中的查詢。
使用什麼樣的地球模型(Earth model)?
這隻是假設地球是一個球體,因為使用的距離公式是Haversine公式。這個公式僅适用于地球,而不是一個完美的球體。當在社交網站和其他大多數需要查詢半徑的應用中使用時,這些偏差都不算問題。但是,在最壞的情況下的偏差可能是0.5%,是以一些地理位置很關鍵的應用還是需要謹慎考慮。
傳回值
integer-reply, 具體的:
- 添加到sorted set元素的數目,但不包括已更新score的元素。
例子
redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
redis> GEODIST Sicily Palermo Catania
"166274.15156960039"
redis> GEORADIUS Sicily 15 37 100 km
1) "Catania"
redis> GEORADIUS Sicily 15 37 200 km
1) "Palermo"
2) "Catania"
redis>
相關指令
- GEOADD
- GEODIST
- GEOHASH
- GEOPOS
- GEORADIUS
- GEORADIUSBYMEMBER