Redis地理演算法GEO解析和應用

2021-10-08 04:11:12 字數 3928 閱讀 3342

獲取周邊資訊;附近人?附近的公司?附近的餐廳?附近的星巴克?

獲取兩個座標位置的距離?

可以使用redis、mongo、mysql進行座標檢索換算實現,redis適用版本: >= 3.2.0

redis使用通用的geohash演算法進行處理,首先假設有上海站座標(121.455708,31.249574),然後根據二分法(左標記0;右標識1)

經度pv劃分計算:pv

minmid

max1

-900900

045901

0.000 

22.5450

22.5

33.75451

22.5

28.125

33.75

128.125

30.9375

33.75

030.9375

32.34375

33.75

030.9375

31.640625

32.34375

030.9375

31.2890625

31.640625

130.9375

31.11328125

31.2890625

緯度pv劃分計算:pv

minmid

max1

-180

018010

90180090

135180190

112.5

1350

112.5

123.75

1351

112.5

118.125

123.75

1118.125

120.9375

123.75

0120.9375

122.34375

123.75

0120.9375

121.640625

122.34375

1120.9375

121.2890625

121.640625

base32位編碼參照

注:時間複雜度: 每新增乙個元素的複雜度為 o(log(n)) , 其中 n 為鍵裡面包含的位置元素數量。

1、geoadd -----新增座標命令(先經度, 後緯度

geoadd key longitude latitude member [longitude latitude member …]
eg: 

192.168.0.102:4>geoadd coordinate 121.455708 31.249574 "上海站" 121.475164 31.228816 "上海人民廣場"

"2"192.168.0.102:4>geoadd coordinate 121.499717 31.239702 "東方明珠塔"

"1"

2、geopos -----查詢座標資訊

geopos key member [member …]
eg:

192.168.0.102:4>geopos coordinate "東方明珠塔"

1) 1) "121.49971514940261841"

2) "31.23970195235578018"

192.168.0.102:4>geopos coordinate "東方明珠塔" "上海站"

1) 1) "121.49971514940261841"

2) "31.23970195235578018"

2) 1) "121.45570546388626099"

2) "31.24957469127141252"

3、geodist ----- 查詢給定位置之間的距離注:指定單位的引數unit必須是以下單位的其中乙個,預設為m:

geodist key member1 member2 [unit]
eg:

192.168.0.102:4>geodist coordinate "上海站" "東方明珠塔"

"4326.7279"

192.168.0.102:4>geodist coordinate "上海站" "東方明珠塔" km

"4.3267"

4、georadius ----- 查詢周圍資訊注:以給定的經緯度為中心, 返回鍵包含的位置元素當中, 與中心的距離不超過給定最大距離的所有位置元素。

georadius key longitude latitude radius m|km|ft|mi [withcoord] [withdist] [withhash] [asc|desc] [count count]
eg:

192.168.0.102:4>georadius coordinate 121.458175 31.242564 3 km withdist asc count 5

1) 1) "上海站"

2) "0.8144"

2) 1) "上海人民廣場"

2) "2.2245"

192.168.0.102:4>georadius coordinate 121.458175 31.242564 5 km withdist asc count 5

1) 1) "上海站"

2) "0.8144"

2) 1) "上海人民廣場"

2) "2.2245"

3) 1) "東方明珠塔"

2) "3.9632"

192.168.0.102:4>

5、georadiusbymember  ----- 查詢周圍資訊注:和georadius 類似只是將座標換位具體元素

georadiusbymember key member radius m|km|ft|mi [withcoord] [withdist] [withhash] [asc|desc] [count count]
eg:

192.168.0.102:4>georadiusbymember coordinate "上海站" 5 km withdist asc count 5

1) 1) "上海站"

2) "0.0000"

2) 1) "上海人民廣場"

2) "2.9589"

3) 1) "東方明珠塔"

2) "4.3267"

6、geohash ----- 查詢hash值注:一般只用於開發除錯

geohash key member [member …]
eg:

192.168.0.102:4>geohash coordinate "上海站"

1) "wtw3gbc3gn0"

redis特殊資料型別Geo(地理位置)

常用命令 命令說明 geoadd 新增地理位置的座標 geopos 獲取地理位置的座標 geodist 計算兩個位置之間的距離 georadius 根據使用者給定的經緯度座標來獲取指定範圍內的地理位置集合 georadiusbymember 根據儲存在位置集合裡面的某個地點獲取指定範圍內的地理位置集...

redis3 2新功能 GEO地理位置命令介紹

本文 發表於 2016 03 28 分類於 redis redis3.2發布rc版本已經有一段時間了,估計redisconf 2016左右,3.2版本就能release了。3.2版本中增加的最大功能就是對geo 地理位置 的支援。說起redis的geo特性,最大的貢獻還是咱們中國人。redis作者在...

redis3 2新功能 GEO地理位置命令介紹

redis3.2發布rc版本已經有一段時間了,估計redisconf 2016左右,3.2版本就能release了。3.2版本中增加的最大功能就是對geo 地理位置 的支援。說起redis的geo特性,最大的貢獻還是咱們中國人。redis作者在對3.2引進新特性的部落格中介紹了為什麼支援geo。ge...