文档介绍:基于地址进行数据的检索,这个貌似有点难度,如果是小的应用的话,可以根据经纬度信息来直接进行查询或者通过数据库本身的空间数据检索方案,但是如果数据量以及访问请求变大时,这中方案就显然不是很合适,往往会使请求变的很慢。经过一系列的沟通下来,可以通过geohash的方案来解决这个问题。  基本流程可以是这样:(1)原始详细地址数据--->经纬度数值--->geohash字符串编码--->数据冗余保存,主键换为geohash,然后原始数据后置保存(2)请求接口,参数为详细地址,详细地址进行转换成geohash,然后基于geohash编码来进行搜索和排序,返回结果 详细地址转换为经纬度这个可以直接调取成熟的geocoding服务来进行解决,地址规范的情况下,定位到街道应该不会很大,虽然有时候有一定的偏差,但是民用的话基本可以接受呵呵。所以目前的流程的话卡在了geohash算法这里,所以写这篇文章详细的介绍一下。 geohash的最简单解释:将一个经纬度信息,转换成一个可排序、可比较的字符串编码。 将经纬度的信息,按照(-90,90)(-180,180)来转换成平面坐标系。 借用一篇文章中的例子来说明一下编码生成的过程:  首先将纬度范围(-90,90)平分成两个区间(-90,0)、(0,90), 如果目标纬度位于前一个区间,则编码为0,否则编码为1。(0,90),所以取编码为1。然后再将(0,90)分成 (0,45),(45,90)两个区间,(0,45),所以编码为0。以此类推,直到精度符合要求为止,得到纬度编码为101110001**********。 (-90,90)(-90,)(,90)1(,90)(,)(,90)0(,)(,)(,)1(,)(,)(,)1(,)(,)(,)1(,)(,)(,)0(,)(,)(,)0(,)(,)(,)0(,)(,)(,)1(,)(,)(,)1(,)(,)(,)0(,)(,)(,)0(,)(,)(,)0(,)(,)(,)1(,)(,)(,