基于地理位置的大数据分析_第1页
基于地理位置的大数据分析_第2页
基于地理位置的大数据分析_第3页
基于地理位置的大数据分析_第4页
基于地理位置的大数据分析_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、技术创新,变革未来基于地理位置的大数据分析基于地理位置的应用实现楠哥是个好动又好学的孩子, 平日里就喜欢拿着手机地图点点按按来查询 一些好玩的东西( XJJ)。某一天楠哥到北海公园游玩, 肚肚饿了, 于是乎打 开手机地图, 搜索北海公园附近的餐馆, 并选了其中一家用餐。引申出一个问题: 如何根据自己所在位置查询来查询附近50 米的POI( point of interest, 比如商家、景点等) 呢( 图1 a)? 每个POI都有经纬度信息, 我用图 1 b的SQL语句在数据库中建立了POI_ spatial的表, 其中lat和lng两个字段来代 表纬度和经度。为后续分析方便起见, 我人造了4

2、0 万个POI数据。基于地理位置的应用实现 20该方法的复杂度为:40万*距离函数。 我们将球体距离函数写为mysql存储 过程distance,之后我们执行查询操 作(图3),发现花费了4.66秒。该方法耗时的原因显而易见,执行了40万次复杂的距离计算函数。1基于地理位置的应用实现方法二: 矩形过滤方法该方法分为两部:先用矩形框过滤(图4a),判断一个点在矩形框内很简单,只要进行两次判断(LtMinlatLtMax; LnMinlngLnMax),落在矩形框内的POI个数为n(n40万);用球面距离公式计算位置与矩形框内n个POI的距离(图4b),并保留距离小于50米的POI矩形过滤方法的复

3、杂度为: 4 0 万* 矩形过滤函数 + n * 距离函数( n 4 0 万) 。基于地理位置的应用实现根据这个思路我们执行SQl查询( 图5 )( 注: 经 度或纬度每隔0 . 001 度, 距离相差约100 米, 由此 推算出矩形左下角和右上角坐标), 发现过滤后 正好剩下两个POI。此查询花费了0.36秒,相比于方法一查询时间大大降低, 但是对于一次查询来说还是很长。时间长的原因在于遍 历了40万次。基于地理位置的应用实现方法三:B树对经度或纬度建立索 引方法二耗时的原因在于执行了遍历操 作,为了不进行遍历,我们自然想到了索引。我们对纬度进行了B树索引。执行SQL查询(图7),发现时间已

4、 经大大降低,从方法2的0.36秒下降 到0.01秒。基于地理位置的应用实现基于地理位置的应用实现回到这个例子:饭饱之后楠哥开始想一个类似的问题, 地图后台如何根据自己所在位置查询来查询附近餐馆的呢? 苦 思冥想了半天, 先计算所在位置P与北京所有餐馆的距离, 然后返回距离= 1000 米的餐馆。( 暴力)小得意了一会儿, 楠哥发现北京的餐馆何其多啊, 这样计算不得了, 于是想了, 既然知道经纬度了, 那它应该知道自己在西城区, 那应该计算所在位置P与西城区所有餐馆的距离啊.( 画个区域)楠哥运用了递归的思想, 缩小这个区域, 西城区也很多餐馆啊, 太大了, 把方框缩小, 应该计算他的位 置P

5、与西城区下面他在的这个街道的所有餐馆的距离, 这样计算量又小了, 效率也提升了。楠哥的计算思想就是通过过滤的方法来减小参与计算的餐馆数目, 从某种角度上讲, 这是一种索引技 术基于地理位置的应用实现一提到索引, 大家脑子里马上浮现出B树索引, 因为大量的数据库( 如My SQL、oracle、 Postgre SQL等) 都在使用B树。B树索引本质上是对索引字段进行排序, 然后通过类似二 分查找的方法进行快速查找, 即它要求索引的字段是可排序的, 一般而言, 可排序的是一 维字段, 比如时间、年龄、薪水等等。但是对于空间上的一个点( 二维, 包括经度和纬度), 如何排序呢? 又如何索引呢?思想

6、:如果能通过某种方法将二维的点数据转换成一维的数据,那样不就可以继续使用B树索引了嘛。 那这种方法真的存在嘛,答案是肯定的。目前很火的GeoHash算法就是运用了上述思想,下面我们就 开始GeoHash之旅吧。基于地理位置的应用实现Geo Hash核心原理解析Geo Hash核心原理解析字符串越长, 表示的范围越精确。如图所示, 5 位的编 码能表示10 平方千米范围的矩形区域, 而6 位编码能表 示更精细的区域( 约0 . 34 平方千米)。Geo Hash核心原理解析Geo Hash核心原理解析通过上面的介绍我们知道了Geo Hash就是一种将经纬度转换成字符串的方法, 并 且使得在大部分

7、情况下, 字符串前缀匹配越多的距离越近, 回到我们的案例, 根 据所在位置查询来查询附近餐馆时, 只需要将所在位置经纬度转换成Geo Hash字 符串, 并与各个餐馆的Geo Hash字符串进行前缀匹配, 匹配越多的距离越近。Geo Hash核心原理解析Geo Hash算法的步骤地球纬度区间是-90,90, 北海公园的纬度是39.928167,可以通 过下面算法对纬度39.928167进行逼近编码:1.区间-90,90进行二分为-90,0),0,90,称为左右区间, 可以确定39.928167属于右区间0,90,给标记为1;2.接着将区间0,90进行二分为 0,45),45,90,可以确定39

8、.928167属于左区间 0,45),给标记为0;递归上述过程39.928167总是属于某个区间a,b。随着 每次迭代区间a,b总在缩小,并越来越逼近39.928167;如果给定的纬度x(39.928167)属于左区间,则记录0, 如果属于右区间则记录1,这样随着算法的进行会产生 一个序列1011100,序列的长度跟给定的区间划分次数 有关。Geo Hash算法的步骤Geo Hash算法的步骤奇数位放纬度10111 00011 , 偶数位放经度11010 01011 , 把2 串编码组合生成 新串: 11100 11101 00100 01111 。Geo Hash核心原理解析生成 码1110

9、0111010010001111纬度1101001011经度10111000112829415wx4gGeo Hash核心原理解析Geo Hash算法的步骤当geohash base 32 编码长度为8 时, 精度在19 米左右, 而当编码长度为9 时, 精度在2 米左右, 编码长度需要根 据数据情况进行选择。Geo Hash核心原理解析Geo Hash缺陷这种类型的空间填充曲线的优点是将二维空间转换成一维曲线(事实上是分 形维),对大部分而言,编码相似的距离也相近, 但Peano空间填充曲线最 大的缺点就是突变性,有些编码相邻但距离却相差很远,比如0111与1000, 编码是相邻的,但距离相

10、差很大。Geo Hash缺陷由于Geo Hash是将区域划分为一个个规则矩形, 并对每个矩形进行编码, 这样在查询附近POI信 息时会导致以下问题, 比如红色的点是我们的位 置, 绿色的两个点分别是附近的两个餐馆, 但是 在查询的时候会发现距离较远餐馆的Geo Hash编 码与我们一样( 因为在同一个Geo Hash区域块上), 而较近餐馆的Geo Hash编码与我们不一致。 这个问题往往产生在边界处。Geo Hash缺陷解决解决的思路很简单, 我们查询时, 除了使 用定位点的Geo Hash编码进行匹配外, 还 使用周围8 个区域的Geo Hash编码, 这样 可以避免这个问题。Geo Hash缺陷解决如何获取周围八个区域的G e o H a s h 值这个问题我们可以做 如下转化:我们已经知道当前点的经纬度值, 我们也知道每一个区域内 的经度、纬度的宽度,如果

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论