原理参考: http://blog.jobbole.com/80633/,其实就是有限二分法而已
一般用于查找周边,具体可以网上百度
个人认为的局限性有以下几点: 1. 不能做排序,真要做排序,而且还用geohash,那只能查出来,然后对查出来的部分做排序 2. 由于用的是经纬度的有限二分,并且使用的是5个bit位做一个base32编码,那么geohash的精度问题就比较固定。官方的经纬度 当然这个精度可以进行改进,只需要控制好经纬度的位数,就可以控制好经纬度的误差,当然就能控制km的误差,参考这篇文章的改进: https://my.oschina.net/shipley/blog/704964 当然,基于这篇文章,还可以根据自己的需求进一步进行改进,比如前几位用5位进行base32编码,后几位可以用三位,或者二位进行base32编码,这需要看自己的精度控制。但是整体说来,精度还是如下: 现在的每一位,可以更精确了。 3. 求的周边并不是一个圆,也不是一个正方形,大多数情况是一个长方形,具体参考上面的两个表
部分点不准确 位于格子边界两侧的两点, 虽然十分接近,但编码会完全不同,可以同时搜索当前格子周围的8个格子,即可解决这个问题栅格法: 其实geohash就类似于一种栅格法: 下面介绍自己曾用过的两种栅格的方法 方法1: 例如对桂林进行栅格化,那么找出桂林左下角纬经度为原点,lat0,lng0, 对整个北京进行栅格的划分,比如10m作为一个栅格,我们可以计算出每10米的纬度为0.00009°,经度大约为0.0001°,那么按照这个经纬度进行划分栅格即可。如果有一个点,需要计算落在哪个经纬度内,那么x=(lat-lat0)/0.00009,y=(lng-lng0)/(0.0001) 方法二:对每一个经纬度*1000000,例如32.1256232,114.2135123 乘以1000000为 321256232,1142135123, 对于纬度,我们圆整900,经度,圆整1000,计算出栅格的左下角经纬度 例如 (321256232/900)*900, (1142135123*1000)/1000,算出的就是左下角的经纬度了,对于一个栅格内的,圆整后,都属于这个左下角的经纬度
原理很简单,代码更简单,直接去github上搜索geohash就行了,各种语言的都有