您好、欢迎来到现金彩票网!
当前位置:秒速牛牛投注 > 桶链算法 >

基于地理位置算法GeoHash核心原理解析

发布时间:2019-09-12 18:56 来源:未知 编辑:admin

  GeoHash将二维的经纬度转换成字符串,如北京9个区域的GeoHash字符串,分别是WX4ER,WX4G2、WX4G3等等,每一个字符串代表了某一矩形区域

  因此这个矩形区域内所有的点(经纬度坐标)都共享相同的GeoHash字符串,

  左上角这个区域内的用户不断发送位置信息请求餐馆数据,由于这些用户的GeoHash字符串都是WX4ER,所以可以把WX4ER当作key,把该区域的餐馆信息当作value来进行缓存,而如果不使用GeoHash的话,由于区域内的用户传来的经纬度是各不相同的,很难做缓存。

  字符串越长,表示的范围越精确。如图所示,5位的编码能表示10平方千米范围矩形区域,而6位编码能表示更精细的区域(约0.34平方千米)

  字符串相似的表示距离相近(特殊情况后文阐述),这样可以利用字符串的前缀匹配来查询附近的POI信息。如下两个图所示,一个在城区,一个在郊区,城区的GeoHash字符串之间比较相似,郊区的字符串之间也比较相似,而城区和郊区的GeoHash字符串相似程度要低些。

  通过上面的介绍我们知道了GeoHash就是一种将经纬度转换成字符串的方法,并且使得在大部分情况下,字符串前缀匹配越多的距离越近,回到我们的案例,根据所在位置查询来查询附近餐馆时,只需要将所在位置经纬度转换成GeoHash字符串,并与各个餐馆的GeoHash字符串进行前缀匹配,匹配越多的距离越近。

  地球纬度区间是[-90,90], 北海公园的纬度是39.928167,可以通过下面算法对纬度39.928167进行逼近编码:

  3)递归上述过程39.928167总是属于某个区间[a,b]。随着每次迭代区间[a,b]总在缩小,并越来越逼近39.928167;

  4)如果给定的纬度x(39.928167)属于左区间,则记录0,如果属于右区间则记录1,这样随着算法的进行会产生一个序列1011100,序列的长度跟给定的区间划分次数有关。

  同理,地球经度区间是[-180,180],可以对经度116.389550进行编码。根据经度算编码

  通过上述计算,纬度产生的编码为10111 00011,经度产生的编码为11010 01011。偶数位放经度,奇数位放纬度,把2串编码组合生成新串:11100 11101 00100 01111。

  最后使用用0-9、b-z(去掉a, i, l, o)这32个字母进行base32编码,首先将11100 11101 00100 01111转成十进制,对应着28、29、4、15,十进制对应的编码就是wx4g。同理,将编码转换成经纬度的解码算法与之相反,具体不再赘述。

  可以看出,当geohash base32编码长度为8时,精度在19米左右,而当编码长度为9时,精度在2米左右,编码长度需要根据数据情况进行选择。

  如图所示,我们将二进制编码的结果填写到空间中,当将空间划分为四块时候,编码的顺序分别是左下角00,左上角01,右下脚10,右上角11,也就是类似于Z的曲线,当我们递归的将各个块分解成更小的子块时,编码的顺序是自相似的(分形),每一个子快

  这种类型的空间填充曲线的优点是将二维空间转换成一维曲线(事实上是分形维),对大部分而言,编码相似的距离也相近, 但Peano空间填充曲线最大的缺点就是突变性,有些编码相邻但距离却相差很远,比如0111与1000,编码是相邻的,但距离相差很

  除Peano空间填充曲线外,还有很多空间填充曲线,如图所示,其中效果公认较好是Hilbert空间填充曲线,相较于Peano曲线而言,Hilbert曲线没有较大的突变。为什么GeoHash不选择Hilbert空间填充曲线呢?可能是Peano曲线思路以及计算上比较简单吧,事实上,Peano曲线就是一种四叉树线性编码方式。

  近期读了几篇关于LBS数据的分析贴,并大体了解了一下原理。中学地理课上我们都学过地球坐标的表示方法:经纬度。在我国通用的坐标体系有两种:WGS-84和GCJ-02(又称火星)。其中,84即GPS标准,...博文来自:zhanghaichuan08的专栏

  Redis在3.2版本以后增加了地理位置GEO模块,意味着我们可以使用Redis来实现摩拜单车「附近的Mobike」、美团和饿了么「附近的餐馆」这样的功能了。业界比较通用的地理位置距离排序算法是Geo...博文来自:张伯毅的专栏

  应用场景最近的APP开发需求涉及到一个类似微信附近人的功能。APP是采集数据应用,当发布的任务绑定店铺的时候,如果用户在店铺附近,则可以浏览该题目,并且答题,得到相应的奖励。为什么不直接使用经纬度如果...博文来自:大道至简,知易行难

  本文最后修改于2018-03-26,文章有问题或者转载请及时联系本人,如果对你有帮助,别忘了点下关注和喜欢,感谢!本文文字内容,图片参考整理自:博文来自:但行好事,莫问前程。

  1.基于空间位置的服务基于位置的服务型电商席卷而来,搭乘网约车去到目的地、搜索附近的餐馆酒旅,无不让人们感觉到便捷。比如打开滴滴APP,我们看到附近的车辆如下那么问题来了,滴滴是怎么快速的匹配出乘客附...博文来自:zhufenghao

  geohash在个人目前的工作中用到的频率非常高,所以写一篇文章进行一些相关知识点的整理。1定义geohash是由GustavoNiemeyer发明的一套空间地理信息编码系统,能够将一个地理位置的经纬...博文来自:的博客

  最近公司项目在探究怎么找到附近的用户这个功能说到了redis里面新增了空间索引,能够不计算在某个范围内最近的点这种问题底层是用geohash算法实现的,所以就顺着去学习了下geohash算法的原理总而...博文来自:的博客

  参加摩拜单车举行的数据单车停放点位置预测数据挖掘竞赛,发现他的起始位置和终止位置是经过geohash算法编码的(相信如美团,百度等等也是如此吧)。经过geohash之后的地理位置是一个字符串,无法直接...博文来自:呵呵

  今天被问到一道题目,感觉挺有意思,这里记录一下:给定一个m*m的矩形区域,已知一点的(x,y)坐标,如何找到离周围xkm的所有店家?这里需要用到一个叫做GeoHash的算法。这个算法是什么作用呢?将一...博文来自:记忆碎片

  看到这篇文章()之后,就按这个算法和自己的想法分别编程实现了一下,并记录下自己的所得。一、背景二、GeoHash原...博文来自:Ilovesummer1991的博客

  Ioc—InversionofControl,即“控制反转”。在传统面向对象编程中,我们往往会在客户类里主动去创建、配置我们需要用到的依赖。比如,我们有一个客户类userDao需要完成数据库的增删改查...博文来自:weixin_33991727的博客

  在每个角色-发起方,参与方都有事物service层注解1,一个线程去执行切点任务,扫master的协调操作信息  ----第一阶段:操作session持久化状态2,主线的线程返回指令...博文来自:y666666y的博客

  前言现在前端开发中vuejs是大部分前端工程师的首选,只要不是很小的项目都会引用vuex来进行状态管理。最近新开展的项目比较复杂,使用vuex的地方也比较多。在此过程中也遇到了不少问题。如今有时间正好...博文来自:pro_monkeyking的博客

  一、前言最近有个需求,要计算出客户坐标附近5公里的所有门店,并按照步行距离排序。最直接的方法就是遍历该城市下的所有门店,但是该方法明显不可取,因为在门店数量巨大,且还需要计算步行距离并排序的情况下,时...博文来自:Patrick_Lam的博客

  基本概念和Apriori算法相比,FP-growth算法只需要对数据库进行两次遍历,从而高效发现频繁项集。FP-growth算法是基于Apriori原理的,通过将数据集存储在FP(FrequentPa...博文来自:罗小辉的专栏

  我们有时候,希望可以根据当前所在的位置,找到自己身边的符合条件的一些商店,酒店之类的。它主要支持两种类型的地理查询:一种是地理点(geo_point),即经纬度查询,另一种是地理形状查询(geo_sh...博文来自:happy19870612s blog

  查询结果按照到某一点的距离排序博文来自:wmzy1067111110的专栏

  最近想做一个简单的地理位置分析,比如获取一些城市公交站点对应的geohash,geohash其实是将平时常见的经纬度进行了降维,这样可以进行类似附近的餐馆等内容的分析。1.正逆地理编码博文来自:shiter编写程序的艺术

  【搬砖笔记】利用GeoHash为地理位置编码——实现篇一、前言本篇介绍采用Java实现GeoHash算法,理论介绍见【搬砖笔记】利用GeoHash为地理位置编码——理论篇。若有任何错误或建议,望不吝赐...博文来自:Patrick_Lam的博客

  通过坐标实现附件地图的搜索。 可以参考这位仁兄的 码农SW 的转帖 。rn大概内容是坐标点根据geohash加密获取一块字符串块。 这个字符串表示一块区域里的所有坐标串。rn但是为了解决边缘问题,需要计算这个块周围的八个格子。 请问计算周围8个格子的原理是什么。论坛

  想写这个系列很久了,对自己也是个总结与提高。原来在学JAVA时,那些JAVA入门书籍会告诉你一些规律还有法则,但是用的时候我们一般很难想起来,因为我们用的少并且不知道为什么。知其所以然方能印象深刻并学...博文来自:张哈希的博客

  1、计算器核心算法1.将中缀表达式进行数字和运算符的分离2.将中缀表达式转换为后缀表达式3.通过后缀表达式计算最终结果2、分离算法思想初始num变量为空,遍历字符串每个字符(用字符串表示数字)若遇到数...博文来自:洋葱汪的博客

  上节我们说到计算机默认的是后缀表达式,那么中缀表达式转后缀表达式的过程就类似于编译过程。必须得注意这么几个问题:四则运算表达式中的括号必须匹配;根据运算符优先级进行转换;转换后的表达式...博文来自:上帝之子

  基于累加的PDM算法的原理- 基于累加的PDM算法(2)PDM编码原理如下:单片机能输出Sin(t)吗?能,DA。没有DA怎么办?PWM。没有PWM怎么办?事情就是这么来的。20多年...博文来自:wzying25的博客

  【应用】基于IPFS和GeoHash构建具有地理位置价值服务的DDApp(理论篇)作者简介:戴嘉乐(Mr.Maple)前百度地图高级研发工程师《中国IPFS开发者圆桌沙龙》活动主办人IPFS应用...博文来自:weixin_34336292的博客

  作者简介:戴嘉乐(Mr.Maple) 前百度地图高级研发工程师社区布道师个人网站:联系方式:微信号(daijiale6239)...博文来自:圆方圆学院的博客

  geohash的使用背景从地理信息学角度来来分析,在地球中纬度的区间范围为[-90,90],而经度的区间范围为[-180,180]。当将指定位置经纬度获取,转换为geohash再与相应范围geohas...博文来自:皮皮猪的博客

  五子棋是一种受大众广泛喜爱的游戏,其规则简单,变化多端,非常富有趣味性和消遣性。这里设计和实现了一个人机对下的五子棋程序,采用了博弈树的方法,应用了剪枝和最大最小树原理进行搜索发现最好的下子位置。介绍五子棋程序的数据结构、评分规则、胜负判...

  俄罗斯方块核心算法俄罗斯方块核心算法俄罗斯方块核心算法俄罗斯方块核心算法俄罗斯方块核心算法俄罗斯方块核心算法

  大家在开发游戏或者虚拟现实的时候,都会遇到3D引擎的使用,为了深入学习,首先要清楚3D引擎是做什么的,其内部是如何实现的,本课程首先从基本的3D引擎介绍入手,以及3D里面的一些基础知识讲解,GPU基础编程,算法,逐步深入的讲解,由浅入深让学习者更容易掌握。n咨询 咨询群:462917576 n付费学员答疑群:446896569

http://duchtech.com/tongliansuanfa/517.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有