空间搜索geohash概述

概述

通常在一些2C业务场景中会根据用户的位置来搜索一些内容。通常提供位置搜索的都是直接通过redis/mongodb/es等中间件实现的。

但是这些中间件又是怎么实现位置搜索的呢;

查了一番资料,发现背后一个公共的算法Geohash。

Geohash

经度和纬度是2个值,如果能变成一个值,那对搜索莱索就方便很多了。

geohash本质其实是一个二分法,将定位的经纬度,在整个经纬度刻度中不断地二分。

经度和纬度的二进制编码转换

目标经纬度为 123.123456, 12.123456

地球纬度区间是[-90,90]

  1. 区间[-90,90]进行二分为[-90,0),[0,90],称为左右区间,可以确定12.123456属于右区间[0,90],给标记为1
  2. 然后再将区间[0,90]进行二分, [0,45),[45,90],可以确定12.123456属于左区间 [0,45),给标记为0
  3. 递归上述过程12.123456总是属于某个区间[a,b]。 随着每次迭代区间[a,b]总在缩小,并越来越逼近12.123456

定的纬度x(12.123456)属于左区间,则记录0,如果属于右区间则记录1,序列的长度跟给定的区间划分次数有关;

经度的计算也是同理;

交叉合并经度和纬度的二进制编码

从第 0 位开始,偶数位放经度,奇数位放纬度,得到完整的二进制编码;

然后将二进制编码分组并计算出对应的 Base32 编码

参考文案
https://segmentfault.com/a/1190000042971576

相关推荐
HackTwoHub8 小时前
AI大模型网关存在SQL注入、附 POC 复现、影响版本LiteLLM 1.81.16~1.83.7(CVE-2026-42208)
数据库·人工智能·sql·网络安全·系统安全·网络攻击模型·安全架构
l1t8 小时前
DeepSeek总结的DuckLake构建基于 SQL 原生表格式的下一代数据湖仓
数据库·sql
KmSH8umpK8 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第八篇
数据库·redis·分布式
TDengine (老段)9 小时前
从施工监测到运营预警,桥科院用 TDengine 提升桥梁数据管理能力
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
callJJ10 小时前
Spring Data Redis 两种编程模型详解:同步 vs 响应式
java·spring boot·redis·python·spring
S1998_1997111609•X10 小时前
论mysql国盾shell-sfa犯罪行为集团下的分项工程及反向注入原理尐深度纳米算法下的鐌檵鄐鉎行为
网络·数据库·网络协议·百度·开闭原则
KmSH8umpK11 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第七篇
数据库·redis·分布式
0xDevNull12 小时前
Linux 中 Nginx 代理 Redis 的详细教程
redis·后端
倒霉蛋小马12 小时前
【Redis】什么是缓存穿透?
缓存
BU摆烂会噶12 小时前
【LangGraph】持久化实现的三大能力——时间旅行
数据库·人工智能·python·postgresql·langchain