CN105824943A - 一种二维地图引擎海量矢量数据存储方法 - Google Patents
一种二维地图引擎海量矢量数据存储方法 Download PDFInfo
- Publication number
- CN105824943A CN105824943A CN201610160032.7A CN201610160032A CN105824943A CN 105824943 A CN105824943 A CN 105824943A CN 201610160032 A CN201610160032 A CN 201610160032A CN 105824943 A CN105824943 A CN 105824943A
- Authority
- CN
- China
- Prior art keywords
- node
- quaternary tree
- map element
- tree
- child
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种二维地图引擎海量矢量数据存储方法,本发明将地理实体信息存储在完全包含它的最小矩形节点中,每个地理实体只在树中存储一次,避免存储空间的浪费。首先生成满四叉树,避免在地理实体插入时需要重新分配内存,加快插入的速度,最后将空的节点所占内存空间释放掉。本发明能高效快速检索二维数据,提高地图引擎渲染、空间查询效率。
Description
技术领域
本方法属于数据存储技术领域,具体涉及一种二维地图引擎海量矢量数据存储方法,能有效提高地图引擎渲染、查询效率。
背景技术
一般二维数据都采用四叉树进行数据管理,相对于不建立空间索引来说查询效率会有所提升。但如果空间对象分布不均匀,随着地理空间对象的不断插入,四叉树的层次会不断地加深,将形成一棵严重不平衡的四叉树,那么每次查询的深度将大大的增多,从而导致查询效率的急剧下降。
常规四叉树的结构如图1所示,地理空间对象都存储在叶子节点上,中间节点以及根节点不存储地理空间对象,四叉树结构是自顶向下逐步划分的一种树状的层次结构。传统的四叉树索引存在着以下几个缺点:
(1)空间实体只能存储在叶子节点中,中间节点以及根节点不能存储空间实体信息,随着空间对象的不断插入,最终会导致四叉树树的层次比较深,在进行空间数据窗口查询的时候效率会比较低下。
(2)同一个地理实体在四叉树的分裂过程中极有可能存储在多个节点中,这样就导致了索引存储空间的浪费。
(3)由于地理空间对象可能分布不均衡,这样会导致常规四叉树生成一棵极为不平衡的树,这样也会造成树结构的不平衡以及存储空间的浪费。
发明内容
为了解决上述技术问题,本发明提供了一种能有效提高地图引擎渲染、查询效率二维地图引擎海量矢量数据存储方法。
本法所采用的技术方案是:一种二维地图引擎海量矢量数据存储方法,其特征在于,包括以下步骤:
步骤1:首先生成满四叉树,避免在地理实体插入时需要重新分配内存;
步骤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,nIndex=-1;变量nCorver为当前待插入四叉树的地图元素覆盖子节点的个数,变量nIndex为当前待插入四叉树的地图元素被哪个子节点完全包含的索引;
步骤2.3:判断,当前节点是否完全包含待插入四叉树的地图元素;
若否,则直接将待插入四叉树的地图元素数据挂接到当前节点上,本次流程结束;
若是,判断,其四个子节点中是否存在完全包含待插入四叉树的地图元素;
若否,则直接将待插入四叉树的地图元素数据挂接到当前节点上,本次流程结束;
若是,nCorver变量自增加1,将该子节点的索引赋值给nIndex变量,取出找到的子节点,并回转执行步骤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,nIndex=-1;变量nCorver为当前待插入四叉树的地图元素覆盖子节点的个数,变量nIndex为当前待插入四叉树的地图元素被哪个子节点完全包含的索引;
步骤2.3:判断,当前节点是否完全包含待插入四叉树的地图元素;
若否,则直接将待插入四叉树的地图元素数据挂接到当前节点上,本次流程结束;
若是,判断,其四个子节点中是否存在完全包含待插入四叉树的地图元素;
若否,则直接将待插入四叉树的地图元素数据挂接到当前节点上,本次流程结束;
若是,nCorver变量自增加1,将该子节点的索引赋值给nIndex变量,取出找到的子节点,并回转执行步骤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。元素1在y区域内,元素9在x区域内。由于元素2跨了2个区域(z、t),所有元素2只能挂在b区域,而不能挂在z或t区域。
插入完成后将a、c、d下的空节点删除即可。
应当理解的是,本说明书未详细阐述的部分均属于现有技术。
应当理解的是,上述针对较佳实施例的描述较为详细,并不能因此而认为是对本发明专利保护范围的限制,本领域的普通技术人员在本发明的启示下,在不脱离本发明权利要求所保护的范围情况下,还可以做出替换或变形,均落入本发明的保护范围之内,本发明的请求保护范围应以所附权利要求为准。
Claims (3)
1.一种二维地图引擎海量矢量数据存储方法,其特征在于,包括以下步骤:
步骤1:首先生成满四叉树,避免在地理实体插入时需要重新分配内存;
步骤2:将待插入四叉树的地图元素数据插入到四叉树中;
步骤3:将空的节点所占内存空间释放掉。
2.根据权利要求1所述的二维地图引擎海量矢量数据存储方法,其特征在于,步骤1的具体实现包括以下子步骤:
步骤1.1:初始化空四叉树中,确定四叉树中深度和根节点矩形范围;
步骤1.2:将根节点加入队列中;所述队列是作为满四叉树构建的辅助数据结构;
步骤1.3:判断,队列是否为空且是否达到最大深度;
若是,则满四叉树构建完成,本流程技术;
若否,则继续执行下述步骤1.4;
步骤1.4:从队列中取出节点,将取出的节点作为父节点;
步骤1.5:四等分步骤1.4中得到的父节点矩形范围;
步骤1.6:创建四个子节点,记录各子节点矩形范围,子节点与父节点分别相互链接;
步骤1.7:子节点加入队列中,并回转执行所述步骤1.3。
3.根据权利要求1所述的二维地图引擎海量矢量数据存储方法,其特征在于,步骤2的具体实现包括以下子步骤:
步骤2.1:判断,当前四叉树节点是否为叶子节点;
若是,则直接将待插入四叉树的地图元素数据挂接到该叶子节点上,本次流程结束;
若否,则继续执行下述步骤2.2;
步骤2.2:初始化变量nCorver=0,nIndex=-1;变量nCorver为当前待插入四叉树的地图元素覆盖子节点的个数,变量nIndex为当前待插入四叉树的地图元素被哪个子节点完全包含的索引;
步骤2.3:判断,当前节点是否完全包含待插入四叉树的地图元素;
若否,则直接将待插入四叉树的地图元素数据挂接到当前节点上,本次流程结束;
若是,判断,其四个子节点中是否存在完全包含待插入四叉树的地图元素;
若否,则直接将待插入四叉树的地图元素数据挂接到当前节点上,本次流程结束;
若是,nCorver变量自增加1,将该子节点的索引赋值给nIndex变量,取出找到的子节点,并回转执行步骤2.1。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610160032.7A CN105824943A (zh) | 2016-03-21 | 2016-03-21 | 一种二维地图引擎海量矢量数据存储方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610160032.7A CN105824943A (zh) | 2016-03-21 | 2016-03-21 | 一种二维地图引擎海量矢量数据存储方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105824943A true CN105824943A (zh) | 2016-08-03 |
Family
ID=56523509
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610160032.7A Pending CN105824943A (zh) | 2016-03-21 | 2016-03-21 | 一种二维地图引擎海量矢量数据存储方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105824943A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107644086A (zh) * | 2017-09-25 | 2018-01-30 | 咪咕文化科技有限公司 | 空间数据的分布方法 |
CN108228904A (zh) * | 2018-02-08 | 2018-06-29 | 百度在线网络技术(北京)有限公司 | 用于输出信息的方法和装置 |
CN110222136A (zh) * | 2019-06-10 | 2019-09-10 | 西北工业大学 | 一种基于四叉树的地图构建方法及导航方法 |
CN111695845A (zh) * | 2019-03-15 | 2020-09-22 | 北京京东尚科信息技术有限公司 | 确定拥堵区域的方法、装置、电子设备及可读介质 |
WO2021243862A1 (zh) * | 2020-06-02 | 2021-12-09 | 完美世界(北京)软件科技发展有限公司 | 数据处理方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101763422A (zh) * | 2010-01-12 | 2010-06-30 | 北京国信慧通科技有限责任公司 | 一种矢量数据的存储及空间索引方法 |
CN104142926A (zh) * | 2013-05-06 | 2014-11-12 | 北京四维图新科技股份有限公司 | 一种电子地图的处理方法及装置 |
-
2016
- 2016-03-21 CN CN201610160032.7A patent/CN105824943A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101763422A (zh) * | 2010-01-12 | 2010-06-30 | 北京国信慧通科技有限责任公司 | 一种矢量数据的存储及空间索引方法 |
CN104142926A (zh) * | 2013-05-06 | 2014-11-12 | 北京四维图新科技股份有限公司 | 一种电子地图的处理方法及装置 |
Non-Patent Citations (2)
Title |
---|
周旭光: "四叉树空间索引原理及其实现", 《CSDN博客HTTP://BLOG.CSDN.NET/ZHOUXUGUANG236/ARTICLE/DETAILS/12312099》 * |
董鹏 等: "一种基于改进四叉树的GIS空间选择查询算法", 《计算机工程与应用》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107644086A (zh) * | 2017-09-25 | 2018-01-30 | 咪咕文化科技有限公司 | 空间数据的分布方法 |
CN107644086B (zh) * | 2017-09-25 | 2019-05-10 | 咪咕文化科技有限公司 | 空间数据的分布方法 |
CN108228904A (zh) * | 2018-02-08 | 2018-06-29 | 百度在线网络技术(北京)有限公司 | 用于输出信息的方法和装置 |
CN108228904B (zh) * | 2018-02-08 | 2021-08-20 | 百度在线网络技术(北京)有限公司 | 用于输出信息的方法和装置 |
CN111695845A (zh) * | 2019-03-15 | 2020-09-22 | 北京京东尚科信息技术有限公司 | 确定拥堵区域的方法、装置、电子设备及可读介质 |
CN110222136A (zh) * | 2019-06-10 | 2019-09-10 | 西北工业大学 | 一种基于四叉树的地图构建方法及导航方法 |
WO2021243862A1 (zh) * | 2020-06-02 | 2021-12-09 | 完美世界(北京)软件科技发展有限公司 | 数据处理方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105824943A (zh) | 一种二维地图引擎海量矢量数据存储方法 | |
JP6998964B2 (ja) | ジオフェンスのインデックスグリッドを判断するための方法及び装置 | |
CN111563101B (zh) | 执行计划优化方法、装置、设备及存储介质 | |
KR101117709B1 (ko) | 공간 분할 트리의 최소 데이터-불균등 커버를 이용한 다차원 히스토그램 방법 및 이를 실행하기 위한 프로그램이 저장된 기록매체 | |
CN104408163B (zh) | 一种数据分级存储方法和装置 | |
US10068033B2 (en) | Graph data query method and apparatus | |
CN112765405B (zh) | 空间数据搜索结果的聚类和查询的方法及系统 | |
CN103186568A (zh) | 树型结构数据的访问方法及系统 | |
CN110191135B (zh) | Acl配置方法、装置、电子设备 | |
CN108717448B (zh) | 一种面向键值对存储的范围查询过滤方法和键值对存储系统 | |
CN102486379B (zh) | 一种导航地图处理方法及装置 | |
CN108920105B (zh) | 基于社区结构的图数据分布式存储方法及装置 | |
CN111009034B (zh) | 一种三维模型单体化方法、系统、存储介质及设备 | |
CN114510474B (zh) | 基于时间衰减的样本删除方法及其装置、存储介质 | |
CN117742312A (zh) | 应用于仓储系统中机器人的避让方法以及装置 | |
CN110569291B (zh) | 一种数字货币钱包的密钥数据查询获取方法及装置 | |
CN108268876A (zh) | 一种基于聚类的近似重复记录的检测方法及装置 | |
CN105912404B (zh) | 一种基于磁盘的大规模图数据中寻找强连通分量的方法 | |
CN110019783A (zh) | 属性词聚类方法及装置 | |
CN110489355B (zh) | 逻辑bram的映射方法及其系统 | |
CN104572420A (zh) | 一种信息处理方法及系统 | |
CN105573920B (zh) | 存储空间管理方法和装置 | |
CN108875401B (zh) | 一种基于改进kd树数据结构的隐私保护方法 | |
CN112269947A (zh) | 空间文本数据的缓存方法、装置、电子设备及存储介质 | |
CN111144622A (zh) | 用于规划快递员投递路线的方法、系统及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB03 | Change of inventor or designer information |
Inventor after: Guo Cheng Inventor after: Cao Shengqun Inventor after: Kang Xiaoguang Inventor after: Xu Li Inventor after: Ding Yong Inventor before: Xu Li Inventor before: Ding Yong |
|
CB03 | Change of inventor or designer information | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160803 |
|
RJ01 | Rejection of invention patent application after publication |