Redis 3.2 之后,支持地理坐標(biāo)數(shù)據(jù)的管理。將給定的坐標(biāo)元素(緯度、經(jīng)度、名字)添加到指定的鍵里面。 這些數(shù)據(jù)就會以有序集合的形式被儲, 可以通過GEORADIUS 計算兩個坐標(biāo)點的距離,或者使用GEORADIUS 和 GEORADIUSBYMEMBER查詢某個坐標(biāo)半徑內(nèi)的數(shù)據(jù)。下面對其中常用的命令進(jìn)行一個簡單的介紹。
1. GEOADD
將坐標(biāo)信息添加到指定的鍵里面。
GEOADD key longitude latitude member [longitude latitude member ...]
longitude:坐標(biāo)點經(jīng)度,有效值[ -180,180 ]
latitude:坐標(biāo)點緯度,有效值[ -85.05112878, 85.05112878 ]
示例:
1
2
3
4
5
6
7
|
127.0.0.1:6379> geoadd parks 116.300892 40.009462 yuanmingyuan ( integer ) 1 127.0.0.1:6379> geoadd parks 116.188797 39.990132 xiangshan 116.255916 40.030233 baiwangshan ( integer ) 2 127.0.0.1:6379> GEOADD parks 110 89.9 nanji (error) ERR invalid longitude,latitude pair 110.000000,89.900000 |
可以看到,GEOADD 支持一次添加一個或多個地點,每個地點需要包含精度維度和名稱,當(dāng)嘗試添加合法經(jīng)緯度外的坐標(biāo)(維度為89.9的nanji) 時, 會報錯。
2. GEOPOS
GEOPOS命令根據(jù)地點的名稱返回對應(yīng)的經(jīng)緯度。集合中不存在時,返回數(shù)據(jù)為空
示例:
1
2
3
4
5
6
|
127.0.0.1:6379> GEOPOS parks xiangshan baiwangshan nanji 1) 1) "116.18879646062850952" 2) "39.99013224137585354" 2) 1) "116.2559160590171814" 2) "40.03023406483775659" 3) (nil) |
3. GEODIST
GEODIST 返回兩個給定位置之間的距離。如果兩個位置之間的其中一個不存在, 那么命令返回空值。
GEODIST key member1 member2 [unit]
合法的unit值
unit: | m(缺省值) | km | mi | ft |
說明: | 米 | 千米 | 英里 | 英尺 |
示例:
1
2
3
4
5
6
|
127.0.0.1:6379> GEODIST parks xiangshan baiwangshan "7251.9492" 127.0.0.1:6379> GEODIST parks xiangshan baiwangshan km "7.2519" 127.0.0.1:6379> GEODIST parks xiangshan nanji km (nil) |
4. GEORADIUS
以給定的經(jīng)緯度為中心, 返回鍵包含的位置元素當(dāng)中, 與中心的距離不超過給定最大距離的所有位置元素。
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
經(jīng)緯度和單位參數(shù)與前面命令保持一致。 其他可選參數(shù)說明
- WITHCOORD: 將坐標(biāo)數(shù)據(jù)的經(jīng)緯度一并返回
- WITHDIST:將坐標(biāo)數(shù)據(jù)與當(dāng)前坐標(biāo)的距離一并返回
- WITHHASH:以 52 位有符號整數(shù)的形式, 返回位置元素經(jīng)過原始 geohash 編碼的有序集合分值
- COUNT:返回指定條數(shù)的數(shù)據(jù)
- ASC|DESC:根據(jù)中心的位置, 按照從近到遠(yuǎn)或者從遠(yuǎn)到近的方式返回位置元素
- STORE和STOREDIST:將返回結(jié)果保存至一個有序集合,區(qū)別是STORE保存的是hash值,STOREDIST保存的是距離
示例:
返回額外信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
127.0.0.1:6379> GEORADIUS parks 116.29248 40.048107 20 km 1) "xiangshan" 2) "baiwangshan" 3) "yuanmingyuan" 127.0.0.1:6379> GEORADIUS parks 116.29248 40.048107 20 km WITHCOORD WITHDIST WITHHASH 1) 1) "xiangshan" 2) "10.9353" 3) ( integer ) 4069878528493207 4) 1) "116.18879646062850952" 2) "39.99013224137585354" 2) 1) "baiwangshan" 2) "3.6941" 3) ( integer ) 4069880373231506 4) 1) "116.2559160590171814" 2) "40.03023406483775659" 3) 1) "yuanmingyuan" 2) "4.3576" 3) ( integer ) 4069880708898691 4) 1) "116.30089133977890015" 2) "40.00946202493697257" |
指定數(shù)據(jù)條數(shù)和排序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
127.0.0.1:6379> GEORADIUS parks 116.29248 40.048107 20 km WITHDIST ASC 1) 1) "baiwangshan" 2) "3.6941" 2) 1) "yuanmingyuan" 2) "4.3576" 3) 1) "xiangshan" 2) "10.9353" 127.0.0.1:6379> GEORADIUS parks 116.29248 40.048107 20 km WITHDIST DESC 1) 1) "xiangshan" 2) "10.9353" 2) 1) "yuanmingyuan" 2) "4.3576" 3) 1) "baiwangshan" 2) "3.6941" 127.0.0.1:6379> GEORADIUS parks 116.29248 40.048107 20 km WITHDIST ASC COUNT 2 1) 1) "baiwangshan" 2) "3.6941" 2) 1) "yuanmingyuan" 2) "4.3576" |
將結(jié)果保存到新的zset, hash值或者距離
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
127.0.0.1:6379> GEORADIUS parks 116.29248 40.048107 20 km ASC COUNT 2 STORE store_20km ( integer ) 2 127.0.0.1:6379> GEORADIUS parks 116.29248 40.048107 20 km ASC COUNT 2 STOREDIST storedist_20km ( integer ) 2 127.0.0.1:6379> ZRANGE store_20km 0 -1 WITHSCORES 1) "baiwangshan" 2) "4069880373231506" 3) "yuanmingyuan" 4) "4069880708898691" 127.0.0.1:6379> ZRANGE storedist_20km 0 -1 WITHSCORES 1) "baiwangshan" 2) "3.6941190849982757" 3) "yuanmingyuan" 4) "4.3576262236174665" |
5. GEORADIUSBYMEMBER
這個命令和 GEORADIUS 命令一樣, 都可以找出位于指定范圍內(nèi)的元素, 但是GEORADIUSBYMEMBER的中心點是由給定的位置元素決定的, 而不是像GEORADIUS 那樣, 使用輸入的經(jīng)度和緯度來決定中心點。
示例:
1
2
3
|
GEORADIUSBYMEMBER parks yuanmingyuan 5 km ASC 1) "yuanmingyuan" 2) "baiwangshan" |
查詢圓明園5公里內(nèi)的公園
到此這篇關(guān)于redis輕松處理經(jīng)緯度坐標(biāo)點數(shù)據(jù)的實現(xiàn)方法的文章就介紹到這了,更多相關(guān)redis 經(jīng)緯度坐標(biāo)點內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://blog.csdn.net/be5yond/article/details/120825715