一种集成GeoHash和Quadtree的空间数据索引方法与流程

文档序号:22387429发布日期:2020-09-29 17:50阅读:201来源:国知局
本发明涉及空间数据索引
技术领域
:,具体涉及一种集成geohash和quadtree的空间数据索引方法。
背景技术
::在互联网、gnss(全球导航卫量系统)定位等技术迅速发展的背景下,空间数据的种类、规模及其产生速度都在迅速增加,海量的空间数据必然蕴含了诸多有用的信息,管理和检索这些海量空间数据经常需要进行大量的更新操作,如何管理这些海量空间数据,提供一个频繁更新的海量数据高效索引机制是目前迫切需要解决的关键问题。目前针对这一问题,国内外学者提出了许多空间数据存储和检索方法,如将空间范围不断四等分进而提高查询效率的四叉树索引(quad-treeindex)、能够支持高维空间搜索的r树索引(r-treeindex)、支持空间数据和非空间数据搜索的b+树索引(b+treeindex)以及基于哈希思想的网格索引(gridindex)等。而本发明的发明人经过研究发现,现有索引结构固有的自顶向下(top-down)更新模式,所带来的必需索引页面磁盘i/o以访问空间对象所在数据页面,如果用于管理海量且频繁更新的空间数据,会导致索引结构剧烈变化,造成较大的i/o代价,以及难以支持并发更新的特性,因而在许多应用中其动态更新性能往往不能满足实际需要。技术实现要素:针对现有索引结构固有的自顶向下更新模式,所带来的必需索引页面磁盘i/o以访问空间对象所在数据页面,如果用于管理海量且频繁更新的空间数据,会导致索引结构剧烈变化,造成较大的i/o代价,以及难以支持并发更新的特性,因而在许多应用中其动态更新性能往往不能满足实际需要的技术问题,本发明提供一种集成geohash和quadtree的空间数据索引方法。为了解决上述技术问题,本发明采用了如下的技术方案:一种集成geohash和quadtree的空间数据索引方法,所述索引方法包括改进四叉树索引结构创建和基于自底向上动态更新;其中,创建的改进四叉树索引结构包括改进四叉树、直接访问表和建立于空间对象之上的hash索引表;具体地,所述改进四叉树采用基于现有geohash和四叉树相似的区域划分规则,对空间区域按照geohash进行划分,并以此格网建立四叉树,该四叉树的节点与geohash编码一一对应;所述直接访问表用于指向改进四叉树中的所有中间节点,所述直接访问表的记录形式为<level,mbr,geohash,ptr>,其中level、mbr、geohash、ptr分别表示改进四叉树中间节点的所在层次、节点的最小包围矩形框、geohash编码、节点的磁盘页面地址,直接访问表中的所有记录是顺序排列的,根据它们对应中间节点的层次来进行组织;所述hash索引表的计量形式为<oid,ptr>,其中oid表示空间对象标识,ptr为指向空间对象记录所在叶子节点的磁盘页面偏移;基于自底向上动态更新的算法使用基于空间对象标识的hash索引表来访问改进四叉树叶子节点中对应的空间对象记录,具体包括当空间对象发出位置更新请求时,先通过hash索引表找到空间对象对应对象的原始坐标,并根据geohash编码原理将原始坐标经纬度坐标转化成一维的字符串,然后在直接访问表中通过geohash编码找到空间对象所属的叶子节点,判断空间对象更新后的新坐标是否超出了叶子节点的区域范围mbr,若未超出叶子节点的区域范围mbr,即空间对象更新后的位置仍然落在原叶子节点mbr之中,则直接用空间对象更新后的位置坐标替换原始坐标;超出了叶子节点的区域范围mbr,但空间对象更新后的位置落在原叶子节点的某个非满兄弟叶子节点mbr之中,则将空间对象从原叶子节点上删除,同时根据geohash编码原理将新坐标经纬度坐标转化成一维的字符串,在直接访问表中通过geohash编码找到新的空间对象所属的父节点,将新的空间对象插入父节点即前述某个非满兄弟叶子节点中,同时更新hash索引表;超出了叶子节点的区域范围mbr,但空间对象更新后的位置落在包含此对象的某个子树之下的新叶子节点中,则将空间对象从原叶子节点上删除,同时根据geohash编码原理将新坐标经纬度坐标转化成一维的字符串,在直接访问表中通过geohash编码找到新的空间对象所属的父节点,将新的空间对象插入父节点即前述某个子树下的新叶子节点中,同时更新hash索引表。与现有技术相比,本发明提供的集成geohash和quadtree的空间数据索引方法,首先创建包括改进四叉树、直接访问表和hash索引表在内的改进四叉树索引结构,然后通过自底向上动态更新算法来更新空间对象位置,在索引更新中通过引入一个直接访问表,该直接访问表中的geohash编码即为树节点的编码,给定一个空间对象的坐标,通过geohash编码可以找到包含该节点的叶子节点,同时通过geohash编码可以找到该节点的父节点和兄弟节点,而维护直接访问表这样一个内存概要结构代价相对来说非常小,因为只有当节点分裂或者节点mbr变化时,才会对直接访问表进行更新,即当节点由于mbr扩展而导致更新向上传播时,或者当中间节点由于上溢而发生裂变时必须插入新记录到直接访问表中去,才必须修改直接访问表,然而实际上由于四叉树的高扇区使得大部分节点分裂发生在叶子层,因此在直接访问表中插入记录并不是频繁发生,这样通过直接访问表可以快速访问四叉树中任意中间节点而不需要额外的磁盘i/o,由此可以支持索引的频繁更新操作,大大提高了数据管理效率。进一步,所述方法还包括用于在查询窗口q=([x1,y1],[x2,y2])找到所有在这个查询窗口q中的空间对象的范围查询,其中,[x1,y1],[x2,y2]分别表示q在二维空间中每一维的取值范围,所述范围查询具体包括面数据处理和查询处理:所述面数据处理使用二叉树表示geohash的划分结构,当前结点的左右子结点即表示对当前单元网格进行一次划分所得的两个子单元网格,通过geohash单元网格空间范围与面数据的空间范围的拓扑关系,采用geohash单元网格递归划分面数据,获得面数据覆盖的geohash单元网格编码,实现对面数据的处理;所述查询处理分成粗选和精选两个过程,粗选过程通过面数据处理将查询窗口q划分成geohash编码对应的多个区域,利用geohash编码在直接访问表中找到所有叶子节点和叶子节点中的空间对象;精选过程利用粗选过程已经查询找到的空间对象,与查询窗口q进行空间计算,判断空间对象是否在查询窗口q内。进一步,所述方法还包括添加数据:根据geohash编码原理将待添加空间对象的坐标经纬度坐标转化成一维的字符串,在直接访问表中通过geohash编码找到待添加空间对象所属的父节点,将待添加空间对象插入父节点中,同时更新hash索引表。进一步,所述方法还包括删除数据:通过hash索引表找到待删除空间对象所在叶子节点的磁盘页面偏移,根据geohash编码原理将待删除空间对象的坐标经纬度坐标转化成一维的字符串,在直接访问表中通过geohash编码找到待删除空间对象所属的父节点,从父节点中删除待删除空间对象的索引,同时将待删除空间对象从hash索引表删除。附图说明图1是本发明提供的改进四叉树索引结构示意图。图2是本发明提供的改进四叉树索引结构中改进四叉树的示意图。图3是现有技术提供的geohash示意图。图4是现有技术提供的四叉树示意图。图5是本发明提供的面数据处理示意图。具体实施方式为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体图示,进一步阐述本发明。请参考图1至图4所示,本发明提供一种集成geohash和quadtree的空间数据索引方法,所述索引方法包括改进四叉树索引结构创建和基于自底向上动态更新;其中,创建的改进四叉树索引结构包括改进四叉树(qg-tree)、直接访问表(direct-accesstable)和建立于空间对象之上的hash索引表;具体地,如图3所示的现有geohash是一种地理编码格式,它沿着经度和纬度的方向交替二分地球表面,并使用一个二进制数(geohash编码)表示所形成的互不重叠网格,对全球进行两次划分后形成4个编码长度为2的geohash编码(00、01、10、11),对应4个网格;以编码为11的网格为例,经度范围为[0,180°],纬度范围为[0,90°],若继续对此网格做两次划分,将形成4个编码长度为4的geohash编码(1100、1101、1110和1111)。geohash编码具有以下几个特点:唯一性,每个单元网格都有全球唯一的编码与之对应;一维性,geohash用一维数字或字符串表示二维空间区域;递归性,geohash下级单元网格由上级单元网格划分而得,其本质上是一种空间z曲线填充,一个z字型内的4个geohash网格属于同一个父网格,它们的二进制编码具有相同的前缀,geohash现已被应用在兴趣点快速搜索、面数据区域查询、空间数据组织等方面。现有四叉树索引的基本思想是将地理空间递归划分为不同层次的树结构,它将已知范围的空间等分成四个相等的子空间,如此递归下去,直至树的层次达到一定深度或者满足某种要求后停止分割,四叉树的结构比较简单,并且当空间数据对象分布比较均匀时,具有比较高的空间数据插入和查询效率,因此四叉树是gis中常用的空间索引之一。常规四叉树的结构如图4所示,地理空间对象都存储在叶子节点上,中间节点以及根节点不存储地理空间对象。改进四叉树索引基本原理:基于现有四叉树和geohash原理,利用geohash编码对四叉树进行改进,提出改进四叉树结构qg-tree,基于geohash和四叉树相似的区域划分规则,对空间区域按照geohash进行划分,并以此格网建立四叉树,该四叉树的节点与geohash编码一一对应,原理如图2所示,四叉树节点a、b、c、d分别对应geohash的编码为11、01、00、10,节点a的叶子节点a1、a2、a3、a4对应的geohash的编码分别为1111、1101、1100、1110,通过对四叉树节点的geohash编码,可以快速查找四叉树的叶节点、兄弟节点和父节点,而不需要频繁访问四叉树。如图1左侧所示的所述直接访问表用于指向改进四叉树中的所有中间节点,通过此结构可以快速访问四叉树中任意中间节点而不需要额外的磁盘i/o,所述直接访问表的记录形式为<level,mbr,geohash,ptr>,其中level、mbr、geohash、ptr分别表示改进四叉树中间节点的所在层次、节点的最小包围矩形框、geohash编码、节点的磁盘页面地址,直接访问表中的所有记录是顺序排列的,根据它们对应中间节点的层次来进行组织。如图1右侧所示的所述hash索引表的计量形式为<oid,ptr>,其中oid表示空间对象标识,ptr为指向空间对象记录所在叶子节点的磁盘页面偏移。基于自底向上动态更新(extendedbottom-upupdate,ebuu)的算法使用基于空间对象标识的hash索引表来访问改进四叉树叶子节点中对应的空间对象记录,具体包括当空间对象发出位置更新请求时,先通过hash索引表找到空间对象对应对象的原始坐标,并根据geohash编码原理将原始坐标经纬度坐标转化成一维的字符串,然后在直接访问表中通过geohash编码找到空间对象所属的叶子节点,判断空间对象更新后的新坐标是否超出了叶子节点的区域范围mbr,若未超出叶子节点的区域范围mbr,即空间对象更新后的位置仍然落在原叶子节点mbr之中,以oid=obj1的空间对象为例,该空间对象更新后的坐标为(x1,y1),通过hash表找到obj1对应的空间对象o1,其原始坐标为(x0,y0),根据geohash编码原理,将(x0,y0)经纬度坐标转化成一维的字符串,在图1所示的直接访问表中,通过geohash编码找到空间对象o1所属的叶子节点即父节点q5,判断(x1,y1)是否超出了叶子节点q5的区域范围mbr,如果没有超出叶子节点q5的区域范围mbr,则修改空间对象o1的坐标值为(x1,y1),即直接用空间对象更新后的位置坐标替换原始坐标;超出了叶子节点的区域范围mbr,但空间对象更新后的位置落在原叶子节点的某个非满兄弟叶子节点mbr之中,以oid=obj1的空间对象为例,该空间对象更新后的坐标为(x1,y1),落在了叶子节点q7的mbr中,通过hash表找到obj1对应的空间对象o1,其原始坐标为(x0,y0),根据geohash编码原理,将(x0,y0)经纬度坐标转化成一维的字符串,在图1的直接访问表中,通过geohash编码找到空间对象o1所属的叶子节点即父节点q5,判断(x1,y1)是否超出了叶子节点q5的区域范围mbr,如果超出了叶子节点q5的区域范围mbr,则将空间对象o1从原叶子节点q5上删除,同时根据geohash编码原理,将坐标(x1,y1)经纬度坐标转化成一维的字符串,在图1所示的直接访问表中通过geohash编码找到新的(因为坐标发了变化,所以称为新的)空间对象o1所属的叶子节点即父节点q7,将新的空间对象o1插入到父节点q7即前述某个非满兄弟叶子节点中,同时更新hash索引表;超出了叶子节点的区域范围mbr,但空间对象更新后的位置落在包含此对象的某个子树之下的新叶子节点中,以oid=obj1的空间对象为例,该空间对象更新后的坐标为(x1,y1),落在了叶子节点q10的mbr中,通过hash表找到obj1对应的空间对象o1,其原始坐标为(x0,y0),根据geohash编码原理,将(x0,y0)经纬度坐标转化成一维的字符串,在图1的直接访问表中,通过geohash编码找到空间对象o1所属的叶子节点即父节点q5,判断(x1,y1)是否超出了叶子节点q5的区域范围mbr,如果超出了叶子节点q5的区域范围mbr,则将空间对象o1从叶子节点q5上删除,同时根据geohash编码原理,将(x1,y1)经纬度坐标转化成一维的字符串,在图1的直接访问表中通过geohash编码找到新的空间对象o1所属的叶子节点即父节点q10,将新的空间对象o1插入到父节点q10即前述某个子树下的新叶子节点中,同时更新hash索引表。与现有技术相比,本发明提供的集成geohash和quadtree的空间数据索引方法,首先创建包括改进四叉树、直接访问表和hash索引表在内的改进四叉树索引结构,然后通过自底向上动态更新算法来更新空间对象位置,在索引更新中通过引入一个直接访问表,该直接访问表中的geohash编码即为树节点的编码,给定一个空间对象的坐标,通过geohash编码可以找到包含该节点的叶子节点,同时通过geohash编码可以找到该节点的父节点和兄弟节点,而维护直接访问表这样一个内存概要结构代价相对来说非常小,因为只有当节点分裂或者节点mbr变化时,才会对直接访问表进行更新,即当节点由于mbr扩展而导致更新向上传播时,或者当中间节点由于上溢而发生裂变时必须插入新记录到直接访问表中去,才必须修改直接访问表,然而实际上由于四叉树的高扇区使得大部分节点分裂发生在叶子层,因此在直接访问表中插入记录并不是频繁发生,这样通过直接访问表可以快速访问四叉树中任意中间节点而不需要额外的磁盘i/o,由此可以支持索引的频繁更新操作,大大提高了数据管理效率。作为具体实施例,所述方法还包括用于在查询窗口q=([x1,y1],[x2,y2])找到所有在这个查询窗口q中的空间对象的范围查询,其中,[x1,y1],[x2,y2]分别表示q在二维空间中每一维的取值范围,所述范围查询具体包括面数据处理和查询处理:所述面数据处理的目的是获得被面数据覆盖的geohash单元网格的编码(集)标识面数据;在对面数据处理时,使用二叉树表示geohash的划分结构,当前结点的左右子结点即表示对当前单元网格进行一次划分所得的两个子单元网格,通过geohash单元网格空间范围与面数据的空间范围的拓扑关系,采用geohash单元网格递归划分面数据,获得面数据覆盖的geohash单元网格编码,实现对面数据的处理;所述查询处理分成粗选和精选两个过程,粗选过程通过面数据处理将查询窗口q划分成geohash编码对应的如图5所示多个区域,利用geohash编码在图1所示的直接访问表中找到所有叶子节点和叶子节点中的空间对象;精选过程利用粗选过程已经查询找到的空间对象,与查询窗口q进行空间计算,判断空间对象是否在查询窗口q内,由此大大提高了数据空间查询效率。作为具体实施例,所述方法还包括添加数据:以oid为obj10的空间对象o10为例,其坐标为(x2,y2),根据geohash编码原理将待添加空间对象o10的坐标(x2,y2)经纬度坐标转化成一维的字符串,在图1所示的直接访问表中通过geohash编码找到待添加空间对象o10所属的父节点q12,将待添加空间对象o10插入父节点q12中,同时更新hash索引表。作为具体实施例,所述方法还包括删除数据:以oid为obj1的空间对象o1为例,其坐标为(x0,y0),通过hash索引表找到待删除空间对象o1所在叶子节点的磁盘页面偏移,根据geohash编码原理将待删除空间对象o1的坐标(x0,y0)经纬度坐标转化成一维的字符串,在图1所示的直接访问表中通过geohash编码找到待删除空间对象o1所属的父节点q5,从父节点q5中删除待删除空间对象o1的索引,同时将待删除空间对象o1从hash索引表删除。最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1