由于GeoHash是用的Peano空间填充曲线实现的,因此会存在突变。如下图所示,很近的两个点分布在不同矩形区域,而两个较远的点缺分布在相同的区域,为了解决这问题,我们需要计算出该hash值附近的8个区域,再计算距离。
参考 Geohash
这种方式比较好理解,贴下例子就行了。
[116.3967,44.9999]和[116.3967,45.0009]分别出现在各自附近的区域中,周围8个区域的Geohash怎么计算得到呢?很简单,当Geohash长度是8时,对应的每个最小单元
1 | double latUnit = (Max_Lat - Min_Lat) / (1 << 20); |
其中20是因为二进制拆分了20次,对应长度为8.
这样可以计算出8个分别分布在周围8个区域的地点,根据地点便可以计算出周围8个区域的Geohash.
1 | [lat + latUnit, lng] |