介紹
Redis3.2版本提供了GEO(地理資訊定位)功能,支援存儲地理位置資訊用來實作諸如附近位置、搖一搖這類依賴于地理位置資訊的功能,對于需要實作這些功能的開發者來說是一大福音
因為GEO的底層實作是zset,是以支援zset的相關指令。
指令
增加地理位置資訊
geoadd key longitude latitude member [longitude latitude member ...]
longitude、latitude、member分别是該地理位置的經度、緯度、成員。
擷取地理位置資訊
geopos key member [member ...]
擷取兩個地理位置的距離
geodist key member1 member2 [unit]
其中unit代表傳回結果的機關,包含以下四種:
- m(meters)代表米。
- km(kilometers)代表公裡。
- mi(miles)代表英裡。
- ft(feet)代表尺。
擷取指定位置範圍内的地理資訊位置集合
georadius key longitude latitude radiusm|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key]
georadiusbymember key member radiusm|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key]
- withcoord:傳回結果中包含經緯度。
- withdist:傳回結果中包含離中心節點位置的距離。
- withhash:傳回結果中包含geohash。
- COUNT count:指定傳回結果的數量。
- asc | desc:傳回結果按照離中心節點的距離做升序或者降序。
- store key:将傳回結果的地理位置資訊儲存到指定鍵。
- storedist key:将傳回結果離中心節點的距離儲存到指定鍵。
擷取geohash
geohash key member [member ...]
- GEO的資料類型為zset,Redis将所有地理位置資訊的geohash存放在zset中。
- 字元串越長,表示的位置更精确。
geohash長度 | 精确度 |
---|---|
1 | 2,500 |
2 | 630 |
3 | 78 |
4 | 20 |
5 | 2.4 |
6 | 0.61 |
7 | 0.076 |
8 | 0.019 |
9 | 0.002 |
- 兩個字元串越相似,它們之間的距離越近,Redis利用字元串字首比對算法實作相關的指令。
- geohash編碼和經緯度是可以互相轉換的。
删除地理位置資訊
zrem key member