GeoHash算法解析马太航

GeoHash算法解析信息检索的过程,排序是非常重要的•一个环节,传统的一维数据排序,往往采用B树索引排序,它要求数据类型是nJ排序的,比如整型、字符串、浮点型数据;而对于二维的地理位置,B树索引便无能为力了,GeoHash便是为了解决二维地理位置排序而山现的一套算法技术。城区由于二维坐标不可排序,GeoHash解决此问题的思路是将二维数据转换为一维数据。GeoHash将二维的经纬度转换转挽为字符串,每个字符串不是代表一个点,而是代表了一个矩形区域,这个矩形区域内的所有点都亨有共同的GeoHash位置信息。GeoHash位置有如下4个特点:字符串长度与位賈精度对应;字符串相近表示距离相近,这样有利于使用字符串匹配来进行附近信息查询;由于位置表示的是一个矩形区域,有利于隐私信息保护;点在位置所表示的矩形区域内移动,位置信息不变,这样有利于做数据的缓存。GeoHash仅仅通过一个字符串來表示位置信息,GeoHash字符串的产生是通过确定的算法计算得來的。GeoHash有多种算法,算法根据空间曲线填充方式來确定。目前常用的几种空间曲线有3种:Peano曲线、Hilbert曲线、Z-order曲线。下而以Peano曲线来说明GeoHash字符串的H•算方式,步骤可分为:二进制转换、组码、base32编码。二进制转换:以GPS坐标(39.928167,116.389550)来计算。下面是经度的计算步骤:1)将纬度区间[-90,90】二分为[-90,0),[0,90](称为左右区间),可以确定39.928167属于右区间[0,90],给标记为1;2)继续将区间[0,90]二分为[0,45),[45,901,可以确定39.928167属于左区间丨0,45),给标记为0;3)递归上述过程,39.928167总是属于某个区间[a,b】。随着每次迭代区间[a,b]总在缩小,并越来越逼近39.928167;给定的纬度x(39.928167)属于左区间,则记录0,如果属于右区间则记录1,这样随着算法的进行会产生一个序列1011100011,序列的长度跟给定的区间划分次数有关,划分次数依需求精度而定。经度的计算方式与维度类似,产生序列1101001011。组码:将维度和经度产生的序列依次交叉组合,偶数位放经度,奇数位放偶数,生成新的二进制序列:11100111010010001111。base32编码:首先将11100111010010001111转成十进制,对应着28、29、4、15,十进制对应的编码就是wx4gowx4g既是需要的GeoHash字符串。1东ft多十八譖a多4EPWX4G0WX4CV:練’::RWX4G2WX4O3249tdi•木確渴郊区GeoHash将二维坐标信息转换成了一维的字符串,实现了距离的排序,可以应用于LBS检索过程。比如检索天安门附近的餐厅,可以先将天安门的坐标转换为GeoHash字符串(w34g6f7k),然后通过数据库模糊來对查询数据的位置信息进行限制(比如SQL可使用like‘w34g6f%’来实现),查询范围可以通过字符串的长度来进行控制,如果要扩大查询范阑,则只需去掉末位字符缩短字符串长度。实际业务巾使用GeoHash算法时,可能会出现以下几个问题:1.由于GeoHash将矩形区域编码为一个字符串,这会导致以矩形边界上的点为中心时,可能距离很近的信息却在不同的矩形区域里。这个问题可以通过手动扩大查找范围来优化。2.GeoHash算法使用了空间填充曲线,这种曲线会导致矩形编码突变,使附近信息查询不能完全依靠模糊匹配进行。这个问题,可以通过手动计算周围8个矩形区域,然后通过绝对匹配來解决。3.GeoHash不能计算距离,这对距离要求较高或要求直接显示距离的业务无能为力,这时可以将GeoHash视为缩小查询范闱的辅助工具,距离的计算采用其他的方式(比如SQL计算)。

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

笔杆子文秘
机构认证
内容提供者

为您提供优质文档,供您参考!

确认删除?