可能是专业限制吧,相对于索引算法,我更偏向于geohash是一种编码方式,但编码也是为了方便检索嘛;就像Rtree也算是一种索引算法,但我还是更偏向于它是一种数据组织形式。
我们了解geohash的原理就行,因为它毕竟是最常用的空间数据检索算法或编码方法。常用的空间数据库或程序包,很多都内嵌了geohash,例如postgis、jts、shapely等。Postgresql、MySQL等数据库,存储几何数据,用的也是geohash编码。
所以不要太纠结,geohash到底是一个索引算法,还是编码方式,它都是。
以下原理部分,我仅仅是从(https://halfrost.com/go_spatial_search/)做了个搬运,这个是我看写geohash比较清楚的了。
1. Geohash 算法简介
Geohash 是一种地理编码,由 Gustavo Niemeyer 发明的。它是一种分级的数据结构,把空间划分为网格。Geohash 属于空间填充曲线中的 Z 阶曲线(Z-order curve)的实际应用。
何为 Z 阶曲线?
上图就是 Z 阶曲线。这个曲线比较简单,生成它也比较容易,只需要把每个 Z 首尾相连即可。
Z 阶曲线同样可以扩展到三维空间。只要 Z 形状足够小并且足够密,也能填满整个三维空间。
Geohash算法的理论基础就是基于Z曲线的生成原理。继续说回 Geohash。
Geohash 能够提供任意精度的分段级别。一般分级从 1-12 级。