redis輕松處理經(jīng)緯度坐標(biāo)點(diǎn)數(shù)據(jù)的實(shí)現(xiàn)方法
Redis 3.2 之后,支持地理坐標(biāo)數(shù)據(jù)的管理。將給定的坐標(biāo)元素(緯度、經(jīng)度、名字)添加到指定的鍵里面。 這些數(shù)據(jù)就會(huì)以有序集合的形式被儲(chǔ), 可以通過(guò)GEORADIUS 計(jì)算兩個(gè)坐標(biāo)點(diǎn)的距離,或者使用GEORADIUS 和 GEORADIUSBYMEMBER查詢(xún)某個(gè)坐標(biāo)半徑內(nèi)的數(shù)據(jù)。下面對(duì)其中常用的命令進(jìn)行一個(gè)簡(jiǎn)單的介紹。
1. GEOADD
將坐標(biāo)信息添加到指定的鍵里面。
GEOADD key longitude latitude member [longitude latitude member ...]
longitude:坐標(biāo)點(diǎn)經(jīng)度,有效值[ -180,180 ]
latitude:坐標(biāo)點(diǎn)緯度,有效值[ -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 支持一次添加一個(gè)或多個(gè)地點(diǎn),每個(gè)地點(diǎn)需要包含精度維度和名稱(chēng),當(dāng)嘗試添加合法經(jīng)緯度外的坐標(biāo)(維度為89.9的nanji) 時(shí), 會(huì)報(bào)錯(cuò)。
2. GEOPOS
GEOPOS命令根據(jù)地點(diǎn)的名稱(chēng)返回對(duì)應(yīng)的經(jīng)緯度。集合中不存在時(shí),返回?cái)?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 返回兩個(gè)給定位置之間的距離。如果兩個(gè)位置之間的其中一個(gè)不存在, 那么命令返回空值。
GEODIST key member1 member2 [unit]
合法的unit值
unit: | m(缺省值) | km | mi | ft |
說(shuō)明: | 米 | 千米 | 英里 | 英尺 |
示例:
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)中, 與中心的距離不超過(guò)給定最大距離的所有位置元素。
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
經(jīng)緯度和單位參數(shù)與前面命令保持一致。 其他可選參數(shù)說(shuō)明
- WITHCOORD: 將坐標(biāo)數(shù)據(jù)的經(jīng)緯度一并返回
- WITHDIST:將坐標(biāo)數(shù)據(jù)與當(dāng)前坐標(biāo)的距離一并返回
- WITHHASH:以 52 位有符號(hào)整數(shù)的形式, 返回位置元素經(jīng)過(guò)原始 geohash 編碼的有序集合分值
- COUNT:返回指定條數(shù)的數(shù)據(jù)
- ASC|DESC:根據(jù)中心的位置, 按照從近到遠(yuǎn)或者從遠(yuǎn)到近的方式返回位置元素
- STORE和STOREDIST:將返回結(jié)果保存至一個(gè)有序集合,區(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
這個(gè)命令和 GEORADIUS 命令一樣, 都可以找出位于指定范圍內(nèi)的元素, 但是GEORADIUSBYMEMBER的中心點(diǎn)是由給定的位置元素決定的, 而不是像GEORADIUS 那樣, 使用輸入的經(jīng)度和緯度來(lái)決定中心點(diǎn)。
示例:
GEORADIUSBYMEMBER parks yuanmingyuan 5 km ASC 1) "yuanmingyuan" 2) "baiwangshan"
查詢(xún)圓明園5公里內(nèi)的公園
到此這篇關(guān)于redis輕松處理經(jīng)緯度坐標(biāo)點(diǎn)數(shù)據(jù)的實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)redis 經(jīng)緯度坐標(biāo)點(diǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python利用Redis計(jì)算經(jīng)緯度距離案例
- Java經(jīng)緯度小數(shù)與度分秒相互轉(zhuǎn)換工具類(lèi)示例詳解
- Java正則表達(dá)式實(shí)現(xiàn)經(jīng)緯度的合法性操作
- Java通過(guò)經(jīng)緯度坐標(biāo)獲取兩個(gè)點(diǎn)之間的直線距離的示例
- javaweb實(shí)現(xiàn)百度GPS定位接口(經(jīng)緯度)
- java 根據(jù)經(jīng)緯度獲取地址實(shí)現(xiàn)代碼
- Java將GeoHash轉(zhuǎn)化為對(duì)應(yīng)的經(jīng)緯度坐標(biāo)實(shí)例代碼
- Java編程獲取經(jīng)緯度之間距離的方法
- 地址到經(jīng)緯度坐標(biāo)轉(zhuǎn)化的JAVA代碼
- Java中如何使用Redis GEO測(cè)算經(jīng)緯度距離
相關(guān)文章
詳解Redis中Lua腳本的應(yīng)用和實(shí)踐
這篇文章主要介紹了詳解Redis中Lua腳本的應(yīng)用和實(shí)踐,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01解決 Redis 數(shù)據(jù)傾斜、熱點(diǎn)等問(wèn)題
?單臺(tái)機(jī)器的硬件配置有上限制約,一般我們會(huì)采用分布式架構(gòu)將多臺(tái)機(jī)器組成一個(gè)集群,這篇文章主要介紹了解決 Redis 數(shù)據(jù)傾斜、熱點(diǎn)等問(wèn)題,需要的朋友可以參考下2022-12-12redis集群搭建_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了redis集群搭建,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08Redis 操作多個(gè)數(shù)據(jù)庫(kù)的配置的方法實(shí)現(xiàn)
本文主要介紹了Redis 操作多個(gè)數(shù)據(jù)庫(kù)的配置的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03面試常問(wèn):如何保證Redis緩存和數(shù)據(jù)庫(kù)的數(shù)據(jù)一致性
在實(shí)際開(kāi)發(fā)過(guò)程中,緩存的使用頻率是非常高的,只要使用緩存和數(shù)據(jù)庫(kù)存儲(chǔ),就難免會(huì)出現(xiàn)雙寫(xiě)時(shí)數(shù)據(jù)一致性的問(wèn)題,那我們又該如何解決呢2021-09-09redis 存儲(chǔ)對(duì)象的方法對(duì)比分析
這篇文章主要介紹了redis 存儲(chǔ)對(duì)象的方法對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07Linux系統(tǒng)下安裝Redis數(shù)據(jù)庫(kù)過(guò)程
大家好,本篇文章主要講的是Linux系統(tǒng)下安裝Redis數(shù)據(jù)庫(kù)過(guò)程,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12