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 网站上解析,就可以看到地址是在哪了。
1.添加地址
geoadd city 116.332906 39.892695 beijing
geoadd city 114.064552 22.548457 shenzhen
geodist city beijing shenzhen km
geopos city beijing
geohash city beijing
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
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_41359273/article/details/120753484
内容来源于网络,如有侵权,请联系作者删除!