本文主要是介绍GeoHash 地图算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
之前接手了学长的一个地图项目,学长说可以把地图的经纬度用Geohash算法换成字符串,下来了解了一下
Geohash算法是将二维的经纬度转换为了一维的字符串,这样相近的点字符串相似的前缀就越多,这样充分利用了数据库的B树索引,速度大大提高
GeoHash的算法
字符串位数越长代表精度越高,8位误差约为19M
字符串的由来:
1、根据经纬度计算出GeoHash的二进制编码
将纬度 分成 [ - 90 , 0) 和 (0 , 90] ,如果位于左区间则取 0 ,右区间取 1 ,分的次数越多,代表的精度越高
经度 则 分成 [ - 180 , 0) 和 (0 , 180 ] 同上。
2、我们将计算出的经纬度二进制编码进行 组码 ,偶数位放经度,奇数位放纬度。
然后每 5 位一组,转为 十进制 ,对照 base32编码,得出字符串。
GeoHash 的缺点:
我们将二维经纬度转为一维字符串,根据经纬度二分 左 0 右 1 的原则绘制如下图N型曲线,这种曲线被称为Peano空间填充曲线
这种曲线的缺点就是有突变性,0111与 1000编码相邻,但是实际距离却相差甚远,因此我们需要根据GeoHash字符串先选出临近的点,然后进行实际距离的计算。
这篇关于GeoHash 地图算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!