地理空间索引:GeoHash原理
保持好奇心,想出问题,自己寻找答案!
1.基于空间位置的服务
网约车、附近的餐饮
经纬度坐标 —— 计算距离
先按照经纬度坐标范围粗略筛选掉距离过远的车辆,然后再计算进行精确筛选。
大量的时间开销 遍历的解法 时间复杂度高
哈希散列
经度、纬度分开处理,形成网格,并且具有层次,由高到低,代表空间范围由大到小。
采用B树等高效算法实现
GeoHash的思路
2.GeoHash基本原理
地理编码算法
将地理经纬度坐标编码为由字母和数字所构成的短字符串。
矩形网格
采用二分法不断缩小经度和纬度的区间来进行二进制编码,最后将经纬度分别产生的编码奇偶位交叉合并,再用字母数字表示。
递归二分过程,直到所需的精度,经度得到一串二进制编码11010 01010 11001。
纬度同理。
生成新的二进制数,它的偶数位放经度,奇数位放纬度,得到11100 11101 00100 01101 11110 00110。
使用32个数字和字母(字母去掉a、i、l、o这4个)进行32进制编码。
每5位转化为十进制,对应编码。
填充曲线
Z形曲线
3.代码实现
python-geohash
移位操作代替二分区间
4.总结
GeoHash的主要价值在于将二维的经纬度坐标信息编码到一维的字符串中。
地理位置索引 匹配字符串
便于缓存、信息压缩
在使用大数据工具(例如Spark)进行数据挖掘聚类时,GeoHash更加快捷高效。
Z形曲线,突变。
适当增加Geohash编码长度,并使用周围8个近邻编码参与。
参考链接:地理空间索引:GeoHash原理
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· DeepSeek “源神”启动!「GitHub 热点速览」
· 上周热点回顾(2.17-2.23)
2019-05-06 LeetCode 172:阶乘后的零