一种二维地图引擎海量矢量数据存储方法技术

技术编号:13461725 阅读:64 留言:0更新日期:2016-08-04 13:10
本发明专利技术公开了一种二维地图引擎海量矢量数据存储方法,本发明专利技术将地理实体信息存储在完全包含它的最小矩形节点中,每个地理实体只在树中存储一次,避免存储空间的浪费。首先生成满四叉树,避免在地理实体插入时需要重新分配内存,加快插入的速度,最后将空的节点所占内存空间释放掉。本发明专利技术能高效快速检索二维数据,提高地图引擎渲染、空间查询效率。

【技术实现步骤摘要】
【专利摘要】本专利技术公开了,本专利技术将地理实体信息存储在完全包含它的最小矩形节点中,每个地理实体只在树中存储一次,避免存储空间的浪费。首先生成满四叉树,避免在地理实体插入时需要重新分配内存,加快插入的速度,最后将空的节点所占内存空间释放掉。本专利技术能高效快速检索二维数据,提高地图引擎渲染、空间查询效率。【专利说明】
本方法属于数据存储
,具体涉及,能有效提高地图引擎渲染、查询效率。
技术介绍
—般二维数据都采用四叉树进行数据管理,相对于不建立空间索引来说查询效率会有所提升。但如果空间对象分布不均匀,随着地理空间对象的不断插入,四叉树的层次会不断地加深,将形成一棵严重不平衡的四叉树,那么每次查询的深度将大大的增多,从而导致查询效率的急剧下降。常规四叉树的结构如图1所示,地理空间对象都存储在叶子节点上,中间节点以及根节点不存储地理空间对象,四叉树结构是自顶向下逐步划分的一种树状的层次结构。传统的四叉树索引存在着以下几个缺点:(I)空间实体只能存储在叶子节点中,中间节点以及根节点不能存储空间实体信息,随着空间对象的不断插入,最终会导致四叉树树的层次比较深,在进行空间数据窗口查询的时候效率会比较低下。(2)同一个地理实体在四叉树的分裂过程中极有可能存储在多个节点中,这样就导致了索引存储空间的浪费。(3)由于地理空间对象可能分布不均衡,这样会导致常规四叉树生成一棵极为不平衡的树,这样也会造成树结构的不平衡以及存储空间的浪费。
技术实现思路
为了解决上述技术问题,本专利技术提供了一种能有效提高地图引擎渲染、查询效率二维地图引擎海量矢量数据存储方法。本法所采用的技术方案是:,其特征在于,包括以下步骤:步骤1:首先生成满四叉树,避免在地理实体插入时需要重新分配内存;步骤2:将待插入四叉树的地图元素数据插入到四叉树中;步骤3:将空的节点所占内存空间释放掉。作为优选,步骤I的具体实现包括以下子步骤:步骤1.1:初始化空四叉树中,确定四叉树中深度和根节点矩形范围;步骤1.2:将根节点加入队列中;所述队列是作为满四叉树构建的辅助数据结构;步骤1.3:判断,队列是否为空且是否达到最大深度;若是,则满四叉树构建完成,本流程技术;若否,则继续执行下述步骤1.4;步骤1.4:从队列中取出节点,将取出的节点作为父节点;步骤1.5:四等分步骤1.4中得到的父节点矩形范围;步骤1.6:创建四个子节点,记录各子节点矩形范围,子节点与父节点分别相互链接;步骤1.7:子节点加入队列中,并回转执行所述步骤1.3。作为优选,步骤2的具体实现包括以下子步骤:步骤2.1:判断,当前四叉树节点是否为叶子节点;若是,则直接将待插入四叉树的地图元素数据挂接到该叶子节点上,本流程结束;若否,则继续执行下述步骤2.2;步骤2.2:初始化变量nCorver = 0,nlndex =-1;变量nCorver为当前待插入四叉树的地图元素覆盖子节点的个数,变量nlndex为当前待插入四叉树的地图元素被哪个子节点完全包含的索引;步骤2.3:判断,当前节点是否完全包含待插入四叉树的地图元素;若否,则直接将待插入四叉树的地图元素数据挂接到当前节点上,本次流程结束;若是,判断,其四个子节点中是否存在完全包含待插入四叉树的地图元素;若否,则直接将待插入四叉树的地图元素数据挂接到当前节点上,本次流程结束;若是,nCorver变量自增加I,将该子节点的索引赋值给nlndex变量,取出找到的子节点,并回转执行步骤2.1。本专利技术的有益效果是:1、相比传统方法,改进的四叉树不仅能将空间实体数据存储在叶子点上,还能存储到根和中间节点上,提高了四叉树数据存储率,避免树的层次过深,提升查询效率。2、减少索引存储空间浪费,避免空间实体数据在四叉树的分裂过程中可能存储在多个节点中。3、避免空间实体数据分布不均匀,导致四叉树极不平衡。【附图说明】图1:本专利技术现有技术中四叉树的结构图;图2:本专利技术实施例的构建满四叉树流程图;图3:本专利技术实施例的将待插入四叉树的地图元素数据插入到四叉树流程图;图4:本专利技术实施例的四叉树的结构图。【具体实施方式】为了便于本领域普通技术人员理解和实施本专利技术,下面结合附图及实施例对本专利技术作进一步的详细描述,应当理解,此处所描述的实施示例仅用于说明和解释本专利技术,并不用于限定本专利技术。本专利技术将地理实体信息存储在完全包含它的最小矩形节点中,每个地理实体只在树中存储一次,避免存储空间的浪费。首先生成满四叉树,避免在地理实体插入时需要重新分配内存,加快插入的速度,最后将空的节点所占内存空间释放掉。请见图2和图3,本专利技术提供的,其特征在于,包括以下步骤:步骤1:首先生成满四叉树,避免在地理实体插入时需要重新分配内存;其具体实现包括以下子步骤:步骤1.1:初始化空四叉树中,确定四叉树中深度和根节点矩形范围;步骤1.2:将根节点加入队列中(队列是作为满四叉树构建的辅助数据结构,可以直接使用现有的方法生成);步骤1.3:判断,队列是否为空且是否达到最大深度;若是,则满四叉树构建完成,本流程技术;若否,则继续执行下述步骤1.4;步骤1.4:从队列中取出节点,将取出的节点作为父节点;步骤1.5:四等分步骤1.4中得到的父节点矩形范围;步骤1.6:创建四个子节点,记录各子节点矩形范围,子节点与父节点分别相互链接;步骤1.7:子节点加入队列中,并回转执行所述步骤1.3。步骤2:将待插入四叉树的地图元素数据插入到四叉树中;其具体实现包括以下子步骤:步骤2.1:判断,当前四叉树节点(流程第一次进来时这里是根节点,随着递归会是其子节点)是否为叶子节点;若是,则直接将待插入四叉树的地图元素数据挂接到该叶子节点上,本流程结束;若否,则继续执行下述步骤2.2;步骤2.2:初始化变量nCorver = 0,nlndex =-1;变量nCorver为当前待插入四叉树的地图元素覆盖子节点的个数,变量nlndex为当前待插入四叉树的地图元素被哪个子节点完全包含的索引;步骤2.3:判断,当前节点是否完全包含待插入四叉树的地图元素;若否,则直接将待插入四叉树的地图元素数据挂接到当前节点上,本次流程结束;若是,判断,其四个子节点中是否存在完全包含待插入四叉树的地图元素;若否,则直接将待插入四叉树的地图元素数据挂接到当前节点上,本次流程结束;若是,nCorver变量自增加I,将该子节点的索引赋值给nlndex变量,取出找到的子节点,并回转执行步骤2.1。步骤3:将空的节点所占内存空间释放掉。请见图4,是本专利技术实施例的四叉树的结构图,总共有9个地图元素,确定四叉树深度为3。根节点为9个元素的外接矩形范围,将根的范围划分为四个矩形为a、b、c、d。依照上面方法元素4与c、d区域相交,所有只有根节点所在区域可以最小外包该元素,同样元素8也是挂在根节点下。a区域是最小包含元素3的矩形(假设a区域继续四分,没有一个子节点的范围可以包含元素3),c区域是最小包含元素6的矩形,d区域是最小包含元素7、5的矩形。将b区域继续4分,形成新的四个区域y、x、z、t。元素I在y区域内,元素9在X区域内。由于元素2跨了 2个区域(z、t),所有元素2只能挂在b区域,而不能挂在z或t区域。插入完成后将a、c、d下的空节点删除即可。应当理解的是,本文档来自技高网...

【技术保护点】
一种二维地图引擎海量矢量数据存储方法,其特征在于,包括以下步骤:步骤1:首先生成满四叉树,避免在地理实体插入时需要重新分配内存;步骤2:将待插入四叉树的地图元素数据插入到四叉树中;步骤3:将空的节点所占内存空间释放掉。

【技术特征摘要】

【专利技术属性】
技术研发人员:徐力丁勇
申请(专利权)人:立得空间信息技术股份有限公司
类型:发明
国别省市:湖北;42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1