![c7777ed81600beb1c7db81e4e786f9ed.png](https://i-blog.csdnimg.cn/blog_migrate/1bd45edcf781bb6533fade1cfa824d58.jpeg)
在日常生活中,我们经常会有很多和地理相关的一些应用,比如:地图导航,附近的人,查找某些地标等等,以前我们会选择问路,而随着智能设备的更新和升级,现在我们仅仅只需要一个手机,打开一个地图APP,即可快速查找自己想要的路线或者信息了。
那么,附近的一个建筑或者商店,是通过怎样的形式,让其可以在手机上展示出来的呢?
比如:周末了,躺在床上,使用手机下单,寻找外卖美食...这些美食店信息是怎么在手机上进行展示的呢,它和我所在的距离是怎么计算出来的呢? 这时候,可能就需要用到GeoHash这种算法了。前段时间一个朋友问到过我关于GeoHash的相关知识,但是对这种算法,只是有所了解,并没有深入去探索内部的实现,在此,给它进行自我解析与记录。
![3da939decea0268855f547371eec1ed4.png](https://i-blog.csdnimg.cn/blog_migrate/fcc9ece21901fa5f44ece22d44cffc34.jpeg)
先简单介绍一下GeoHash算法,在日常生活中,我们对某一坐标的定位,一半都是使用经纬度来进行标记的。比如:常营地铁站(lat:39.9257460000,lng:116.5998310000),我们获取一个区域的位置,是使用一个二维数组对其进行标记的,它表示的不是一个具体的点,而是泛指一片区域,区域的范围与经纬度的取值精度直接相关。
当我拿到常营地铁站的经纬度后,通过GeoHash这种算法进行计算后,获取到一个可比较的字符串,具体计算过程如下:
![0a77f7c07113206883253fbc700f7452.png](https://i-blog.csdnimg.cn/blog_migrate/20691e90bffa5e672b2b720540fff682.jpeg)
同样,对纬度也进行相对应的算法进行计算得到一个二进制值(对经纬度取值范围越小,精度越高,所表示区域范围越小),在此省去计算过程。
![d61f18c8bbff953d12f236b8f4826948.png](https://i-blog.csdnimg.cn/blog_migrate/4d92c213746a6332f6aaf6d48850b680.jpeg)