溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Redis新特性GEOHASH

發(fā)布時(shí)間:2020-08-08 18:15:03 來(lái)源:網(wǎng)絡(luò) 閱讀:1556 作者:DBAspace 欄目:關(guān)系型數(shù)據(jù)庫(kù)

一、簡(jiǎn)言

    Redis 的 GEO 特性將在 Redis 3.2 版本釋出, 這個(gè)功能可以將用戶(hù)給定的地理位置信息儲(chǔ)存起來(lái), 并對(duì)這些信息進(jìn)行操作   

    將指定的地理空間項(xiàng)目(緯度,經(jīng)度,名稱(chēng))添加到指定的鍵。數(shù)據(jù)作為排序集存儲(chǔ)到密鑰中,使得可以使用GEORADIUS或GEORADIUSBYMEMBER命令使用半徑查詢(xún)稍后檢索項(xiàng)目。

    該命令采用標(biāo)準(zhǔn)格式x,y的參數(shù),因此必須在緯度之前指定經(jīng)度。可以索引的坐標(biāo)有限制:非??拷鼧O點(diǎn)的區(qū)域不可索引。如EPSG:900913 / EPSG:3785 / OSGEO:41001規(guī)定的具體限值如下:

    有效經(jīng)度為-180至180度。

    有效緯度為-85.05112878至85.05112878度。

    注意:沒(méi)有GEODEL命令,可以使用ZREM來(lái)刪除元素。地理索引結(jié)構(gòu)只是一個(gè)排序集。

二、Redis GEO實(shí)現(xiàn)

    Redis GEO實(shí)現(xiàn)主要包含了以下兩項(xiàng)技術(shù):

    1、使用geohash保存地理位置的坐標(biāo)。

    2、使用有序集合(zset)保存地理位置的集合。


三、GEOHASH

    geohash的思想是將二維的經(jīng)緯度轉(zhuǎn)換成一維的字符串,geohash有以下三個(gè)特點(diǎn):

1、字符串越長(zhǎng),表示的范圍越精確。編碼長(zhǎng)度為8時(shí),精度在19米左右,而當(dāng)編碼長(zhǎng)度為9時(shí),精度在2米左右。

2、字符串相似的表示距離相近,利用字符串的前綴匹配,可以查詢(xún)附近的地理位置。這樣就實(shí)現(xiàn)了快速查詢(xún)某個(gè)坐標(biāo)附近的地理位置。

3、geohash計(jì)算的字符串,可以反向解碼出原來(lái)的經(jīng)緯度。


四、GEOHASH命令語(yǔ)法

    1、geoadd 用來(lái)增加地理位置的坐標(biāo),可以批量添加地理位置,其格式為:

        GEOADD key longitude latitude member [longitude latitude member ...]

        字段的介紹:

        key標(biāo)識(shí)一個(gè)地理位置的集合。longitude latitude member標(biāo)識(shí)了一個(gè)地理位置的坐標(biāo)。longitude是地理位置的經(jīng)度,latitude是地理位置的緯度。

        member是該地理位置的名稱(chēng)。GEOADD可以批量給集合添加一批地理位置

        egg:GEOADD beijing-area 39.8865577059 116.2161254883 shijingshan

    2、geopos 可以獲取地理位置的坐標(biāo),可以批量獲取多個(gè)地理位置的坐標(biāo),命令格式為:

        GEOPOS key member [member ...]


    3、geodist 用來(lái)獲取兩個(gè)地理位置的距離,命令格式為:

        單位可以指定為以下四種類(lèi)型:

        m:米,距離單位默認(rèn)為米,不傳遞該參數(shù)則單位為米。

        km:公里。

        mi:英里。

        ft:英尺。

    4、georadius 可以根據(jù)給定地理位置坐標(biāo)獲取指定范圍內(nèi)的地理位置集合。命令格式為:

         GEORADIUS key longitude latitude radius [m|km|ft|mi] [WITHCOORD] [WITHDIST] [ASC|DESC] [WITHHASH] [COUNT count]

        longitude latitude標(biāo)識(shí)了地理位置的坐標(biāo),radius表示范圍距離,距離單位可以為m|km|ft|mi,還有一些可選參數(shù):

WITHCOORD:傳入WITHCOORD參數(shù),則返回結(jié)果會(huì)帶上匹配位置的經(jīng)緯度。

WITHDIST:傳入WITHDIST參數(shù),則返回結(jié)果會(huì)帶上匹配位置與給定地理位置的距離。

ASC|DESC:默認(rèn)結(jié)果是未排序的,傳入ASC為從近到遠(yuǎn)排序,傳入DESC為從遠(yuǎn)到近排序。

WITHHASH:傳入WITHHASH參數(shù),則返回結(jié)果會(huì)帶上匹配位置的hash值。

COUNT count:傳入COUNT參數(shù),可以返回指定數(shù)量的結(jié)果。

    5、georadiusbymember  可以根據(jù)給定地理位置獲取指定范圍內(nèi)的地理位置集合。georadius命令傳遞的是坐標(biāo),georadiusbymember傳遞的是地理位置。georadius更為靈活,

可以獲取任何坐標(biāo)點(diǎn)范圍內(nèi)的地理位置。但是大多數(shù)時(shí)候,只是想獲取某個(gè)地理位置附近的其他地理位置,使用georadiusbymember則更為方便。

        georadiusbymember命令格式為(命令可選參數(shù)與georadius含義一樣):

          georadiusbymember key member radius [m|km|ft|mi] [WITHCOORD] [WITHDIST] [ASC|DESC] [WITHHASH] [COUNT count]


###命令示例

1、單一添加區(qū)域

GEOADD beijing-area 116.2161254883 39.8865577059 shijingshan 

批量添加區(qū)域

geoadd Beijing-areas 116.2161254883 39.8865577059 ShiJingShan 116.1611938477 39.7283134103 FangShan 116.3534545898 39.7071866568 DaXing 116.4166259766 39.9097362345 DongChenQu

2、查看已經(jīng)添加的地理信息,可以單個(gè)member或多個(gè)查詢(xún)

    192.168.1.130:6379> geopos Beijing-areas ShiJingShan FangShan

    1) 1) "116.21612817049026489"

       2) "39.88655846536294547"

    2) 1) "116.16119652986526489"

       2) "39.72831328866426048"

3、GEODIST命令來(lái)實(shí)現(xiàn)計(jì)算兩個(gè)位置之間的距離,通過(guò)已存在的KEY下的2個(gè)位置計(jì)算距離,單位的距離有m米km千米等

192.168.1.130:6379> geodist Beijing-areas ShiJingShan FangShan m

"18216.0860"

4、georadius查看當(dāng)前位置的附近的所有位置 以及參數(shù)使用:[WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

添加測(cè)試數(shù)據(jù):

geoadd beijing 116.6638183594 39.8928799003 tongzhou

geoadd beijing 116.3534545898 39.7071866568 daxing

geoadd beijing 116.2161254883 39.8865577059 shijingshan

geoadd beijing 116.1611938477 39.7283134103 fangshan

georadius beijing 116.6875076294 39.8953822745 5000 m

       1、統(tǒng)計(jì)5000m范圍內(nèi)附近的位置取最遠(yuǎn)一個(gè)位置

        georadius beijing 116.6875076294 39.8953822745 50000 m COUNT 1 DESC ##ASC 當(dāng)前位置最近的位置排序,當(dāng)使用count類(lèi)似limit

       2、統(tǒng)計(jì)5000m范圍內(nèi)附近的位置取最遠(yuǎn)一個(gè)位置相差的距離--withdist 當(dāng)前位置相差的距離計(jì)算

          georadius beijing 116.6875076294 39.8953822745 50000 m COUNT 1 DESC withdist   

       3、統(tǒng)計(jì)5000m范圍內(nèi)附近的位置并顯示的經(jīng)緯度信息 ---withcoord 顯示經(jīng)緯度  

        georadius beijing 116.6875076294 39.8953822745 50000 m  DESC withcoord 

4、georadiusbymember 顯示已添加的某個(gè)位置為中心點(diǎn)的距離多少范圍內(nèi)的信息。

    192.168.1.130:6379> georadiusbymember beijing shijingshan 5000 m

    1) "shijingshan"

    192.168.1.130:6379> georadiusbymember beijing shijingshan 50000 m

    1) "shijingshan"

    2) "tongzhou"

    3) "fangshan"

    4) "daxing" 

 


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI