redis中使用GeoHash

x33g5p2x  于2021-10-14 转载在 Redis  
字(0.9k)|赞(0)|评价(0)|浏览(316)

redis中使用GeoHash

  • 1.GeoHash底层原理
    1. 基本使用

1.GeoHash底层原理

1.Redis3.2开始提供GEO模块,该模块使用了GeoHash算法

2.核心思想:GeoHash是一种地址编码方式,其将二维的空间经纬度数据编码成一个一维字符串。我们大致可以将大致划分如下图这个范围。GeoHash算法就是基于这种思想,不断地去划分区域,划分次数越多,精度越高。

3.具体算法:
这里以广州的经纬度为例子,113.229259,23.17652

这里就拿纬度23.17652来说,纬度的范围为【-90,90】,23.17652在【0,90】之间,故可以得到一个值1,再次划分,【0,90】的中间值为45,23.17652落在【0,45】之间,故得到一个0,【0,45】的中间值为22.5,23.17652落在【22.5,45】之间,故可以得到一个1…假设最后得到的结果为101,经度算出的结果为110,合并这两个值,规律为经度占偶数位,纬度占奇数位,这样可以得到一个结果111001,按照Base32对合并后的结果集进行编码,得到一个字符串,这个字符串可以到可以拿去 geohash.org 网站上解析,就可以看到地址是在哪了。

2. 基本使用

1.添加地址

geoadd city 116.332906 39.892695 beijing
geoadd city 114.064552 22.548457 shenzhen
  1. 算出两个地址的距离
geodist city beijing shenzhen km
  1. 获取元素的位置,有可能会有误差
geopos city beijing
  1. 获取元素的hash值
geohash city beijing
  1. 以北京为中心,方圆2000km的城市由近到远列出4个,不排除北京本身
georadiusbymember city beijing 2000 km withdist withhash withcoord count 4 asc

6.也可以根据经纬度来查询附近城市

georadius city 116.332906 39.892695 2000 km withdist withhash withcoord count 4 asc

相关文章

微信公众号

最新文章

更多