基于地理位置的大数据分析

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如果属于右区间则记录1,这样随着算法的进行会产生 一个序列1011100,序列的长度跟给定的区间划分次数 有关。
Geo Hash 算 法 的 步骤
ຫໍສະໝຸດ Baidu
Geo Hash 算 法 的 步骤
Geo Hash核 心 原 理解 析
奇 数 位 放 纬 度 10111 00011 , 偶 数 位 放 经 度 11010 01011 , 把 2 串 编 码 组 合 生 成 新 串 : 11100 11101 00100 01111 。
基于地理位置的应用实现
• 方法三:B树对经度或纬度建立 索引
○ 方法二耗时的原因在于执行了遍历操
作,为了不进行遍历,我们自然想到 了索引。我们对纬度进行了B树索引。
• 执行SQL查询(图7),发现时间已 经大大降低,从方法2的0.36秒下降 到0.01秒。
基于地理位置的应用实现
基于地理位置的应用实现
基于地理位置的应用实现
该方法的复杂度为:40万*距离函数。 我们将球体距离函数写为mysql存储 过程distance,之后我们执行查询操 作(图3),发现花费了4.66秒。
www.mchz.com.cn © 20 1
该方法耗时的原因显而易见,执行了 40万次复杂的距离计算函数。
基于地理位置的应用实现
矩形过滤方法的复杂度为:40万*矩形过滤函数 + n*距离函数(n<<40万)。
基于地理位置的应用实现
根据这个思路我们执行SQl查询( 图5)( 注: 经 度或纬度每隔0.001 度,距离相差约100 米,由此 推算出矩形左下角和右上角坐标), 发现过滤后 正好剩下两个POI。 此查询花费了0.36秒,相比于方法一查询时间大大降低, 但是对于一次查询来说还是很长。时间长的原因在于遍 历了40万次。
回到这个例子:
基于地理位置的应用实现
一提到索引, 大家脑子里马上浮现出B树索引, 因为大量的数据库( 如My SQL、oracle、 Postgre SQL等)都在使用B树。B树索引本质上是对索引字段进行排序,然后通过类似二 分查找的方法进行快速查找,即它要求索引的字段是可排序的,一般而言,可排序的是一 维字段,比如时间、年龄、薪水等等。但是对于空间上的一个点(二维,包括经度和纬 度), 如何排序呢? 又如何索引呢? 思想:如果能通过某种方法将二维的点数据转换成一维的数据,那样不就可以继续使用B树索引了嘛。 那这种方法真的存在嘛,答案是肯定的。目前很火的GeoHash算法就是运用了上述思想,下面我们就 开始GeoHash之旅吧。
Geo Hash 核 心 原 理解 析
通过上面的介绍我们知道了Geo Hash 就是一种将经纬度转换成字符串的方法,并 且使得在大部分情况下,字符串前缀匹配越多的距离越近,回到我们的案例,根 据所在位置查询来查询附近餐馆时,只需要将所在位置经纬度转换成Geo Hash 字 符串,并与各个餐馆的Geo Hash字符串进行前缀匹配,匹配越多的距离越近。
Geo Hash核 心 原 理解 析
Geo Hash 核 心 原 理解 析
Geo Hash 核 心 原 理解 析
字符串越长,表示的范围越精确。如图所示,5位的编 码能表示10 平方千米范围的矩形区域, 而6 位编码能 表 示更精细的区域( 约0.34 平方千米)。
Geo Hash 核 心 原 理解 析
技术创新,变革未来
基于地理位置的大数据分析
基于地理位置的应用实现
楠哥是个好动又好学的孩子,平日里就喜欢拿着手机地图点点按按来查询 一些好玩的东西(XJJ)。某一天楠哥到北海公园游玩,肚肚饿了,于是乎打
开手机地图,搜索北海公园附近的餐馆,并选了其中一家用餐。
基于地理位置的应用实现
引申出一个问题: 如何根据自己所在位置查询来查询附近50 米的POI( point of interest, 比如商家、景点等)呢(图1a)? 每个POI都有经纬度信息,我用图 1b的SQL语句在数据库中建立了POI_ spatial的表,其中lat和lng两个字段来代 表纬度和经度。为后续分析方便起见, 我人造了40 万个POI数据。
生成 1 1 1 0 0 1 1 1 0 1 0 0 1 0 0 0 1 1 1 1 码
方法二:矩形过滤方法 该方法分为两部:
1. 先用矩形框过滤(图4a),判断一个点在矩形框内很简单,只要进行两次判断(LtMin<lat<LtMax;
LnMin<lng<LnMax),落在矩形框内的POI个数为n(n<<40万);
2. 用球面距离公式计算位置与矩形框内n个POI的距离(图4b),并保留距离小于50米的POI
2. 接着将区间[0,90]进行二分为 [0,45),[45,90],可以确定 39.928167属于左区间 [0,45),给标记为0;
3. 递归上述过程39.928167总是属于某个区间[a,b]。随着
每次迭代区间[a,b]总在缩小,并越来越逼近39.928167;
4. 如果给定的纬度x(39.928167)属于左区间,则记录0,
饭饱之后楠哥开始想一个类似的问题,地图后台如何根据自己所在位置查询来查询附近餐馆的呢?苦 思冥想了半天,先计算所在位置P与北京所有餐馆的距离,然后返回距离<= 1000 米的餐馆。(暴力) 小得意了一会儿,楠哥发现北京的餐馆何其多啊,这样计算不得了,于是想了,既然知道经纬度了, 那它应该知道自己在西城区, 那应该计算所在位置P与西城区所有餐馆的距离啊.( 画个区域) 楠哥运用了递归的思想,缩小这个区域, 西城区也很多餐馆啊,太大了,把方框缩小, 应该计算他的位 置P与西城区下面他在的这个街道的所有餐馆的距离,这样计算量又小了,效率也提升了。 楠哥的计算思想就是通过过滤的方法来减小参与计算的餐馆数目,从某种角度上讲,这是一种索引技 术
Geo Hash 算 法 的 步骤
地球纬度区间是[-90,90], 北海公园的纬度是39.928167,可以通 过下面算法对纬度39.928167进行逼近编码:
1. 区间[-90,90]进行二分为[-90,0),[0,90],称为左右区间, 可以确定39.928167属于右区间[0,90],给标记为1;
相关文档
最新文档