redis輕松處理經(jīng)緯度坐標點數(shù)據(jù)的實現(xiàn)方法
Redis 3.2 之后,支持地理坐標數(shù)據(jù)的管理。將給定的坐標元素(緯度、經(jīng)度、名字)添加到指定的鍵里面。 這些數(shù)據(jù)就會以有序集合的形式被儲, 可以通過GEORADIUS 計算兩個坐標點的距離,或者使用GEORADIUS 和 GEORADIUSBYMEMBER查詢某個坐標半徑內(nèi)的數(shù)據(jù)。下面對其中常用的命令進行一個簡單的介紹。
1. GEOADD
將坐標信息添加到指定的鍵里面。
GEOADD key longitude latitude member [longitude latitude member ...]
longitude:坐標點經(jīng)度,有效值[ -180,180 ]
latitude:坐標點緯度,有效值[ -85.05112878, 85.05112878 ]
示例:
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 支持一次添加一個或多個地點,每個地點需要包含精度維度和名稱,當嘗試添加合法經(jīng)緯度外的坐標(維度為89.9的nanji) 時, 會報錯。
2. GEOPOS
GEOPOS命令根據(jù)地點的名稱返回對應(yīng)的經(jīng)緯度。集合中不存在時,返回數(shù)據(jù)為空
示例:
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 |
| 說明: | 米 | 千米 | 英里 | 英尺 |
示例:
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)緯度為中心, 返回鍵包含的位置元素當中, 與中心的距離不超過給定最大距離的所有位置元素。
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: 將坐標數(shù)據(jù)的經(jīng)緯度一并返回
- WITHDIST:將坐標數(shù)據(jù)與當前坐標的距離一并返回
- WITHHASH:以 52 位有符號整數(shù)的形式, 返回位置元素經(jīng)過原始 geohash 編碼的有序集合分值
- COUNT:返回指定條數(shù)的數(shù)據(jù)
- ASC|DESC:根據(jù)中心的位置, 按照從近到遠或者從遠到近的方式返回位置元素
- STORE和STOREDIST:將返回結(jié)果保存至一個有序集合,區(qū)別是STORE保存的是hash值,STOREDIST保存的是距離
示例:
返回額外信息
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ù)和排序
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值或者距離
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)度和緯度來決定中心點。
示例:
GEORADIUSBYMEMBER parks yuanmingyuan 5 km ASC 1) "yuanmingyuan" 2) "baiwangshan"
查詢圓明園5公里內(nèi)的公園
到此這篇關(guān)于redis輕松處理經(jīng)緯度坐標點數(shù)據(jù)的實現(xiàn)方法的文章就介紹到這了,更多相關(guān)redis 經(jīng)緯度坐標點內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信