Redis geo地理位置模塊

業(yè)界比較通用的地理位置排序算法是GeoHash算法,Redis也使用了GeoHash算法。GeoHash算法將二維經(jīng)緯度數(shù)據(jù)經(jīng)過編碼映射到一維的整數(shù),這樣將所有的元素掛載到一條直線上,距離很近的二維經(jīng)緯度坐標(biāo)映射到一維后的點(diǎn)之間的距離也會(huì)很近,當(dāng)我們要計(jì)算"附近的人"時(shí),首先將目標(biāo)位置定位到這條線上,然后獲取這條一維直線上附近的點(diǎn)就可以了。
經(jīng)過GeoHash算法編碼之后,每個(gè)地圖的元素坐標(biāo)將變成一個(gè)整數(shù),通過這個(gè)整數(shù)可以還原出初始坐標(biāo),整數(shù)越長(zhǎng),還原出來(lái)的坐標(biāo)損失就越小,對(duì)于附近的人這種功能,損失一點(diǎn)精度是可以接受的。
GeoHash算法會(huì)繼續(xù)對(duì)這個(gè)整數(shù)做一次base32編碼變成一個(gè)字符串。在Redis中,經(jīng)緯度使用的是52位的整數(shù)進(jìn)行編碼放在zset里,zset的value是元素的key,score是GeoHash的52位整數(shù)值。zset的score雖然是浮點(diǎn)數(shù),但是仍然可以無(wú)損儲(chǔ)存52位的整數(shù)值。

一、Geo的基本用法

  1. geoadd 向集合中添加元素
image.png
格式:geoadd [key] [經(jīng)度] [緯度] [名稱]
geo并沒有刪除語(yǔ)句,但是geo本質(zhì)上就是一個(gè)zset,所以可以直接使用zset的刪除指令進(jìn)行刪除。
  1. geodist 計(jì)算兩個(gè)元素之間的距離
image.png
格式:geodist [key] [名稱1] [名稱2] [距離單位] 距離單位可以是m、km、ml、ft。

從結(jié)果來(lái)看 小米到掘金的距離要小于京東到掘金的距離

  1. geopos 獲取元素的初始位置
image.png
格式:geopos [key] [名稱]

我們可以看到geopos取出來(lái)的元素初始位置和存進(jìn)去的初始位置會(huì)有一定的誤差,這是因?yàn)镚eoHash對(duì)二維坐標(biāo)轉(zhuǎn)換為一維坐標(biāo)是有一定損耗的,但是對(duì)于附近的人這種功能,這點(diǎn)損耗是完全可以接受的。

  1. geohash 獲取元素的hash值
image.png
格式:geohash [key] [名稱]

上面已經(jīng)提到,他是個(gè)base32的編碼,可以自行利用這個(gè)編碼獲取定位。

5.georadiusbymember geo最關(guān)鍵的指令之一,可以查詢指定元素附近的其他元素

image.png

image.png
格式:georadiusbymember [key] [名稱1] [距離] [距離單位] [count] [數(shù)量] [排序方式]

無(wú)論正序排列還是倒序排列,并不會(huì)排除本身
另外還有三個(gè)可選參數(shù),withcoord withdist withhash 其中withdist可以計(jì)算距離

6.georadius 根據(jù)定位查詢附近的人

image.png
格式:georadius [key] [經(jīng)度] [緯度] [距離] [距離單位] [可選參數(shù)] [count] [數(shù)量] [排序方式]

可以直接根據(jù)定位來(lái)查詢附近的信息,他的參數(shù)和georadiusbymember基本相似,只是把名稱換成了經(jīng)緯度

好了 今天的分享就到這里了,如果感覺對(duì)自己有幫助的話,歡迎關(guān)注我的公眾號(hào) "IT編程技術(shù)猿"
謝謝大家啦!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容