geohash算法

来源:互联网 发布:淘宝 手电大家谈 编辑:程序博客网 时间:2024/06/07 02:32

geohash算法


       geohash算法的原理是将区域进行4分,让后将每一块区域继续进行四分,直到符合精度要求停止,这样得到一个二进制的数据,然后将这二进制的数据进行base32转换得到一个字符串。如下图:


      首先将一整块区域将其分成4份,然后给其编号00、01、10和11。然后取出一块,继续分成四份,在上次编号的基础上后面按同样的规则增加00、01、10和11编号。每块继续分,直到符合误差要求,最终得到一个编号,该编号为一个二进制数。例如得到:0110101100011011001110010101。将该二进制数经过base32转换成一个字符串,转换时每5b对应一个字母。由上面的划分算法可知道,二进制的前缀代表更大的区域。经base32转换后,其前面的字母就同样代表着更大的区域(base32转换的本质是替换)。所以经过geohash算法,可以通过前缀判断是否在同一个区域内。通过区域算法,可以判断两点是否在相差在一定的范围内,但由于在边缘的两点,其编码会有很大差异,所以在判断周围点时需要遍历周围8个区域的点。



geohash进行base32转换的优缺点

       将一个二进制数进行base32转换后,便于阅读与理解,可以用字符串相关处理的接口,方便处理。但进行base32转换后一个字母代表2.5次划分,在区间比较时缩放速度比较快,在一定程度上影响查找算法。

      若不为阅读与理解,我们可以直接用二进制数据进行处理。



geohash编码排序

       geohash编码得到的数据是二进制数据,可以进行排序。我们将geohash编码的点建立搜索二叉树,在查找时通过区域搜索,能够快速从搜索二叉树中找到指定前缀的点。

改进Geohash的测试可以参考:快速全球索引

1 0