redis中使用GeoHash

本文详细解读了Redis 3.2后引入的GeoHash算法,介绍了其将经纬度编码为一维字符串的原理,并展示了如何添加地址、计算距离、定位坐标及周边搜索等基础操作。通过实例演示,探讨了如何利用GeoHash进行精确地理位置查询和高精度区域搜索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

redis中使用GeoHash

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值