CN110083670B - 一种基于路段密度的地图网格划分方法 - Google Patents
一种基于路段密度的地图网格划分方法 Download PDFInfo
- Publication number
- CN110083670B CN110083670B CN201910231199.1A CN201910231199A CN110083670B CN 110083670 B CN110083670 B CN 110083670B CN 201910231199 A CN201910231199 A CN 201910231199A CN 110083670 B CN110083670 B CN 110083670B
- Authority
- CN
- China
- Prior art keywords
- node2
- node
- road section
- data
- section data
- 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.)
- Active
Links
Images
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/2282—Tablespace storage structures; Management thereof
-
- 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/29—Geographical information databases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Remote Sensing (AREA)
- Processing Or Creating Images (AREA)
- Instructional Devices (AREA)
Abstract
本发明涉及地图匹配领域,具体涉及一种基于路段密度来划分地图网格的方法,该方法在道路密度不同的地区划分不同大小的网格,保证每个网格内的路段数量有一定的上限,使得每个网格内的路段数量相接近,每个网格内路段数据与全部网格中路段数据的均值相差较小,全部网格中路段数据的方差较小,在大规模路段数据进行搜索时,有很好的负载均衡。本发明基于路段密度划分网格,路段密集的地方网格划分的多且小,路段稀疏的地方网格划分的少且大,网格内路段数量有上限,遍历一个网格内的路段数据更加快捷。适用于采用网格法构建数字地图的软件设计,在地图匹配领域有重要的应用价值。
Description
技术领域
本发明涉及地图匹配领域,具体涉及一种基于路段密度来划分地图网格的方法。
背景技术
数字地图基于网格的划分,就是将大比例尺的地图,根据不同的地理环境、城市属性用更小的网格来划分。现有的数字地图网格划分方法通常是以等面积的网格来划分的,即每个网格的长、宽相同,这种网格的长、宽划分通常是根据数字地图的制作人员的经验来划分的,这种划分方法划分出来的网格里面的路段数量差异非常大,对于那些路段稀疏的地区,网格里面包含的路段数量非常少,甚至有的网格里面没有路段数据,而对于路段密集的地区,网格里面包含的路段数量非常多。对于在那些路段密集的网格内进行复杂的操作时会极大的降低处理的效率。
发明内容
针对现有技术中存在的均匀划分网格使得网格内路段数量有极大的差异,从而导致地图匹配时处理效率低下的问题,本发明提供了一种基于路段密度来划分地图网格的方法,采用以下技术方案实现:
一种基于路段密度划分地图网格的方法,包括如下步骤:
步骤1:获得所有路段的路段数据,在地图上得到能包含所有路段数据的外包矩形,将能包含所有路段数据的外包矩形设置为根节点,所述根节点为最大的网格;
步骤2:设置所划分网格中的路段数目最大值MaxNumber,将步骤1中所有的路段数据分别作为节点,逐个插入根节点中,对于插入的每个路段数据有如下判断:
若插入当前的路段数据后,该路段数据所属网格中的路段数目不大于MaxNumber,则继续插入下一路段数据;若插入当前的路段数据后,该路段数据所属网格中的路段数目大于MaxNumber,则对所属网格利用网格分割方法进行分割,使得分割后的每个网格都满足网格中的路段数目不大于MaxNumber,然后继续插入下一路段数据;
步骤3:判断步骤1中所有路段数据是否全部使用完毕,若全部使用完毕则网格构建完毕,若还有路段数据剩余则继续执行步骤2。
进一步的,所述节点包含以下属性:外包矩形左下角坐标、外包矩形右上角坐标、父亲节点、孩子节点序列、原始路段数据、是否包含原始路段数据的标签Flag,其中,当Flag的值为“True”时表示该节点只包含原始路段数据,当Flag的值为“Flase”时表示该节点包含网格且网格内包含原始路段数据。
更进一步的,所述步骤2包括如下子步骤:
步骤2.1:从步骤1中所有的路段数据中随机抽取一条路段数据,以这条路段数据创建节点Node1,根据Node1的原始路段数据得到该路段两个端点,以这两个端点构建线段line1,并创建存储Node型数据的列表List;
步骤2.2:创建节点CurrentNode,将根节点赋值给CurrentNode,判断CurrentNode节点的外包矩形与步骤2.1中Node1的外包矩形是否相交,若相交则进一步判断CurrentNode节点的Flag值,若Flag值为True,则将CurrentNode节点添加进所述List中,并执行步骤2.3;若Flag值为Flase,将CurrentNode节点的孩子节点依次赋值给CurrentNode,并返回执行步骤2.2;
步骤2.3:判断List列表是否为空,若List列表为空则执行步骤2.1,若List列表不为空,则从步骤2.1构建的List中取出第一个元素记为Node2,并将List中的第一个元素删除,计算Node2构成的矩形和line1相交部分记为线段line2,将line2插入到Node2的孩子节点序列中,执行步骤2.4;
步骤2.4:判断Node2的孩子节点数量是否大于MaxNumber,所述Node2的孩子节点序列的孩子数量等于Node2所对应网格的路段数量,若不大于MaxNumber则继续执行步骤2.3,若是大于MaxNumber则利用网格分割方法进行分割,直至插入最后一个路段数据。
更进一步的,步骤2.4中Node2的孩子节点数量若是大于MaxNumber,则所述网格分割方法包括如下步骤:
步骤2.4.1:将Node2的所有孩子节点利用计算Hausdorff距离的方式进行分配,直到Node2的所有孩子节点都分配到新构建的两个列表List1和List2中;
步骤2.4.2:分别计算两个列表内所有节点的外包矩形,然后依次遍历两个列表中所有的外包矩形的左下角端点和右上角端点的经纬度坐标,分别向坐标轴作垂线,获得能将List1中的所有元素和List2中的所有元素分别列在两侧且与外包矩形中的路段数据的相交次数最少的垂线,将该垂线存入List3;
步骤2.4.3:根据List3中存入的垂线将Node2的外包矩形沿垂线进行分割,保存Node2的所有孩子节点所代表的路段数据,将Node2中的孩子节点列表清空,新建节点Node3,令此时Node2的外包矩形为原外包矩形分割后的一半和Node3的外包矩形为原外包矩形分割后的另一半,将Node2的所有孩子节点所代表的路段数据分别存入Node2和Node3中,若Node2的父亲节点不为空,则将Node3插入到Node2的父亲节点的孩子节点序列中,若为空,则直接执行步骤2.4.4;
步骤2.4.4:判断Node2是否是根节点,若Node2是根节点,判断Node3是否为空,若Node3不为空,则新建节点Node4,将Node4的Flag设置为’False’,将最大外包矩形的左下角坐标和右上角坐标设置为Node4的属性,将Node2和Node3插入到Node4节点的孩子列表中,将Node4节点赋值给根节点,若Node3为空则执行步骤3;
若Node2不是根节点,判断Node3是否为空,若不为空,判断Node2的父亲节点中孩子数量是否大于MaxNumber,若是大于MaxNumber,则将Node2的父亲节点赋值给Node2,执行步骤2.4.1;若是不大于MaxNumber,则将Node2节点的父亲节点赋值给Node2节点,Node3赋值为空,返回执行步骤2.4.4;
更进一步的,步骤2.4.1包括如下子步骤:
根据Node2的所有孩子节点的原始路段数据,获得每个孩子节点包含路段的两个端点,分别以每条路段的两个端点构建线段,依次计算任意两条线段之间的Hausdorff距离,令Hausdorff距离最大的两个孩子节点分别作为新构建的列表List1和List2的首元素,然后依次遍历其他的孩子节点所对应的线段与两个首元素的Hausdorff距离,若距离List1的首元素Hausdorff距离更大,则将当前孩子节点插入到List2的列表中,反之则插入List1的列表中,直到将所有的孩子节点都分配到两个列表中为止;
更进一步的,步骤2.4.2包括如下子步骤:
首先分别获得两个列表内所有元素的外包矩形,首先从所有外包矩形中左下角端点经度坐标最小的开始,以该端点的经度坐标向经度坐标轴做垂线,判断List1中的所有元素和List2中的所有元素的路段数据是否分别列在垂线的两侧,若不是则依次遍历所有外包矩形的左下角端点和右上角端点的经度坐标,直到一条垂线能将List1中的所有元素和List2中的所有元素分别列在垂线的两侧,此时计算这条垂线与外包矩形中的路段数据的相交次数;
然后从所有外包矩形中左下角端点纬度坐标最小的开始,以该端点的纬度坐标向纬度坐标轴做垂线,判断List1中的所有元素和List2中的所有元素是否分别列在垂线的两侧,若不是则依次遍历所有外包矩形的左下角端点和右上角端点的纬度坐标,直到一条垂线能将List1中的所有元素和List2中的所有元素分别列在垂线的两侧,此时计算这条垂线与外包矩形中的路段数据的相交次数;
最后构建Double型的列表List3,将获得的垂线中与外包矩形中的路段数据的相交次数最少的垂线存入List3中,所述List3存放两个数据,第一个数据存放0或者1,存放0则代表垂线垂直经度坐标轴,存放1则代表垂线垂直纬度坐标轴,第二个数据存放垂线垂直于坐标轴的坐标数据。
更进一步的,步骤2.4.3包括如下子步骤:
根据List3中存入的垂线将Node2的外包矩形沿垂线进行分割,保存Node2的所有孩子节点所代表的路段数据,将Node2中的孩子节点列表清空,新建节点Node3,令此时Node2的外包矩形为原外包矩形分割后的一半和Node3的外包矩形为原外包矩形分割后的另一半;
若List3第一个元素为0,则将垂直于经度坐标轴的垂线一侧对应于Node2节点的路段数据插入到Node2中,垂线另一侧对应于Node3节点的路段数据插入Node3中,对于被垂线贯穿的路段数据,则将贯穿得到的两段路段数据分别插入到两侧矩形所对应的节点中;
若List3第一个元素为1,则在垂直于纬度坐标轴的垂线一侧对应于Node2节点的路段数据插入到Node2中,垂线另一侧对应于Node3节点的路段数据插入到Node3中,对于被垂线贯穿的路段数据,则将贯穿得到的两段路段数据分别插入到两侧矩形所对应的节点中;
若Node2的父亲节点不为空,则将Node3插入到Node2的父亲节点的孩子节点序列中,若为空,则直接执行步骤2.4.4。
更进一步的,所述步骤3包括如下子步骤:
判断步骤1中所有路段数据是否全部使用完毕,若全部使用完毕则网格构建完毕,每个Flag为True的节点所对应的矩形就是要构建的网格,若还有路段数据剩余则继续执行步骤2。
本发明具有以下有益效果:
(1)本发明基于路段密度划分网格,路段密集的地方网格划分的多且小,路段稀疏的地方网格划分的少且大,网格内路段数量有上限,遍历一个网格内的路段数据更加快捷。
(2)本发明基于路段密度划分网格,对于路段稀疏的地区可以极大的降低空白网格的数量,减少对系统资源的浪费。
(3)本发明的方法适用于采用网格法构建数字地图的软件设计,在地图匹配领域有重要的应用价值。
附图说明
图1为本发明分割地图时的效果图;
图2为实施例中原始路段数据示意图;
图3为实施例中得到距离最远的两条道路示意图;
图4为实施例中将所有路段分入List1和List2中;
图5为实施例中对网格进行分割示意图。
具体实施方式
本发明基于路段密度进行网格划分,采用Java语言实现,可以根据路段的密度进行网格的划分,极大的降低由于均匀网格在路段稀疏地区造成的空白网格的数量,在路段密集的地区根据网格内允许的路段数量的最大值划分更多更小的网格,提高了遍历每个网格内路段的速度。基于路段密度的网格划分方法会相对的缩小搜索到的数据集,在这个缩小的数据集上进行复杂的操作时,效率就会大大的提高。本发明的详细步骤如下:
步骤1:获得所有路段的路段数据,在地图上得到能包含所有路段数据的外包矩形,将能包含所有路段数据的外包矩形设置为根节点,所述根节点为最大的网格;
步骤2:设置所划分网格中的路段数目最大值MaxNumber,将步骤1中所有的路段数据分别作为节点,逐个插入根节点中,对于插入的每个路段数据有如下判断:
若插入当前的路段数据后,该路段数据所属网格中的路段数目不大于MaxNumber,则继续插入下一路段数据;若插入当前的路段数据后,该路段数据所属网格中的路段数目大于MaxNumber,则对所属网格利用网格分割方法进行分割,使得分割后的每个网格都满足网格中的路段数目不大于MaxNumber,然后继续插入下一路段数据;
步骤3:判断步骤1中所有路段数据是否全部使用完毕,若全部使用完毕则网格构建完毕,若还有路段数据剩余则继续执行步骤2。
具体的,可以从搜索时间和存储空间的占用两个方面来考虑每个网格内路段数据的最大值,即MaxNumber的值,在搜索时间上可以通过更改MaxNumber的数量使其搜索时间比传统的网格算法少,在存储空间上可以通过更改MaxNumber的数量来使得网格的数量比传统网格算法划分出来的网格数量少或者相差不多,综合二者即可得到MaxNumber的值,在我们实验的数据下我们的得到的最优MaxNumber的值是15,这样便确定了每个网格内最多允许有15条路段数据。
具体的,所述节点包含以下属性:外包矩形左下角坐标、外包矩形右上角坐标、父亲节点、孩子节点序列、原始路段数据、是否包含原始路段数据的标签Flag,其中,当Flag的值为“True”时表示该节点只包含原始路段数据,当Flag的值为“Flase”时表示该节点包含网格且网格内包含原始路段数据。
原始路段数据形式如下所述:
5148470228701,108.962803,34.348818,108.962925,34.348816
5148470228702,108.962925,34.348816,108.963470,34.348818
5148470229001,108.962223,34.348829,108.962215,34.348757
5148470229002,108.962215,34.348757,108.962254,34.348737
节点属性的具体数据如下所述:
Node1{
外包矩形左下角坐标:[108.962803,34.348816]
外包矩形右上角坐标:[108.962925,34.348818]
孩子节点序列:Null
原始路段数据:
5148470228701,108.962803,34.348818,108.962925,34.348816
是否包含原始路段数据的标签:True
}
具体的,所述步骤2包括如下子步骤:
步骤2.1:从步骤1中所有的路段数据中随机抽取一条路段数据,以这条路段数据创建节点Node1,根据Node1的原始路段数据得到该路段两个端点,以这两个端点构建线段line1,并创建存储Node型数据的列表List;
步骤2.2:创建节点CurrentNode,将根节点赋值给CurrentNode,判断CurrentNode节点的外包矩形与步骤2.1中Node1的外包矩形是否相交,若相交则进一步判断CurrentNode节点的Flag值,若Flag值为True,则将CurrentNode节点添加进所述List中,并执行步骤2.3;若Flag值为Flase,则将CurrentNode节点的孩子节点依次赋值给CurrentNode,并返回执行步骤2.2;
步骤2.3:判断List列表是否为空,若List列表为空则执行步骤2.1,若List列表不为空,则从步骤2.1构建的List中取出第一个元素记为Node2,并将List中的第一个元素删除,计算Node2构成的矩形和line1相交部分记为线段line2,将line2插入到Node2的孩子节点序列中,执行步骤2.4;
步骤2.4:判断Node2的孩子节点数量是否大于MaxNumber,所述Node2的孩子节点序列的孩子数量等于Node2所对应网格的路段数量,若不大于MaxNumber则继续执行步骤2.3,若是大于MaxNumber则利用网格分割方法进行分割,直至插入最后一个路段数据。
具体的,步骤2.4中Node2的孩子节点数量若是大于MaxNumber,则所述网格分割方法包括如下步骤:
步骤2.4.1:将Node2的所有孩子节点利用计算Hausdorff距离的方式进行分配,直到Node2的所有孩子节点都分配到新构建的两个列表List1和List2中;
步骤2.4.2:分别计算两个列表内所有节点的外包矩形,然后依次遍历两个列表中所有的外包矩形的左下角端点和右上角端点的经纬度坐标,分别向坐标轴作垂线,获得能将List1中的所有元素和List2中的所有元素分别列在两侧且与外包矩形中的路段数据的相交次数最少的垂线,将该垂线存入List3;
步骤2.4.3:根据List3中存入的垂线将Node2的外包矩形沿垂线进行分割,保存Node2的所有孩子节点所代表的路段数据,将Node2中的孩子节点列表清空,新建节点Node3,令此时Node2的外包矩形为原外包矩形分割后的一半和Node3的外包矩形为原外包矩形分割后的另一半,将Node2的所有孩子节点所代表的路段数据分别存入Node2和Node3中,若Node2的父亲节点不为空,则将Node3插入到Node2的父亲节点的孩子节点序列中,若为空,则直接执行步骤2.4.4;
步骤2.4.4:判断Node2是否是根节点,若Node2是根节点,判断Node3是否为空,若Node3不为空,则新建节点Node4,将Node4的Flag设置为’False’,将最大外包矩形的左下角坐标和右上角坐标设置为Node4的属性,将Node2和Node3插入到Node4节点的孩子列表中,将Node4节点赋值给根节点,若Node3为空则执行步骤3;
若Node2不是根节点,判断Node3是否为空,若不为空,判断Node2的父亲节点中孩子数量是否大于MaxNumber,若是大于MaxNumber,则将Node2的父亲节点赋值给Node2,执行步骤2.4.1;若是不大于MaxNumber,则将Node2节点的父亲节点赋值给Node2节点,Node3赋值为空,返回执行步骤2.4.4;
优选的,步骤2.4.1包括如下子步骤:
根据Node2的所有孩子节点的原始路段数据,获得每个孩子节点包含路段的两个端点,分别以每条路段的两个端点构建线段,依次计算任意两条线段之间的Hausdorff距离,令Hausdorff距离最大的两个孩子节点分别作为新构建的列表List1和List2的首元素,然后依次遍历其他的孩子节点所对应的线段与两个首元素的Hausdorff距离,若距离List1的首元素Hausdorff距离更大,则将当前孩子节点插入到List2的列表中,反之则插入List1的列表中,直到将所有的孩子节点都分配到两个列表中为止;
优选的,步骤2.4.2包括如下子步骤:
首先分别获得两个列表内所有元素的外包矩形,首先从所有外包矩形中左下角端点经度坐标最小的开始,以该端点的经度坐标向经度坐标轴做垂线,判断List1中的所有元素和List2中的所有元素的路段数据是否分别列在垂线的两侧,若不是则依次遍历所有外包矩形的左下角端点和右上角端点的经度坐标,直到一条垂线能将List1中的所有元素和List2中的所有元素分别列在垂线的两侧,此时计算这条垂线与外包矩形中的路段数据的相交次数;
然后从所有外包矩形中左下角端点纬度坐标最小的开始,以该端点的纬度坐标向纬度坐标轴做垂线,判断List1中的所有元素和List2中的所有元素是否分别列在垂线的两侧,若不是则依次遍历所有外包矩形的左下角端点和右上角端点的纬度坐标,直到一条垂线能将List1中的所有元素和List2中的所有元素分别列在垂线的两侧,此时计算这条垂线与外包矩形中的路段数据的相交次数;
最后构建Double型的列表List3,将获得的垂线中与外包矩形中的路段数据的相交次数最少的垂线存入List3中,所述List3存放两个数据,第一个数据存放0或者1,存放0则代表垂线垂直经度坐标轴,存放1则代表垂线垂直纬度坐标轴,第二个数据存放垂线垂直于坐标轴的坐标数据。
优选的,步骤2.4.3包括如下子步骤:
根据List3中存入的垂线将Node2的外包矩形沿垂线进行分割,保存Node2的所有孩子节点所代表的路段数据,将Node2中的孩子节点列表清空,新建节点Node3,令此时Node2的外包矩形为原外包矩形分割后的一半和Node3的外包矩形为原外包矩形分割后的另一半;
若List3第一个元素为0,则将垂直于经度坐标轴的垂线一侧对应于Node2节点的路段数据插入到Node2中,垂线另一侧对应于Node3节点的路段数据插入Node3中,对于被垂线贯穿的路段数据,则将贯穿得到的两段路段数据分别插入到两侧矩形所对应的节点中;
若List3第一个元素为1,则在垂直于纬度坐标轴的垂线一侧对应于Node2节点的路段数据插入到Node2中,垂线另一侧对应于Node3节点的路段数据插入到Node3中,对于被垂线贯穿的路段数据,则将贯穿得到的两段路段数据分别插入到两侧矩形所对应的节点中;
若Node2的父亲节点不为空,则将Node3插入到Node2的父亲节点的孩子节点序列中,若为空,则直接执行步骤2.4.4。
具体的,所述步骤3包括如下子步骤:
判断步骤1中所有路段数据是否全部使用完毕,若全部使用完毕则网格构建完毕,每个Flag为True的节点所对应的矩形就是要构建的网格,若还有路段数据剩余则继续执行步骤2。
以下给出本发明的具体实施方式,需要说明的是本发明并不局限于以下具体实施例,凡在本申请技术方案基础上做的等同变换均落入本发明的保护范围。
实施例
图2为包含了16条路段数据的网格,不同粗细的线段代表不同的路段,设置MaxNumber为15,所以当第16条数据插入的时候路段数量大于了16个。
接下来要通过Hausdorff距离计算出距离最远的两条道路,图3矩形框框中的就是Hausdorff距离最远的两条道路,以这两条道路构建的节点为队首元素建立List1和List2。
接下来要计算其他道路与上面两条道路之间的Hausdorff距离,距离那条路段近就插入到哪个List中,一直到所有的路段数据都分配到两个List里面,图4是根据Hausdorff计算出来的两个List分组。
接下来对每条数据的两个端点经度坐标做垂直于经度坐标轴的直线,对纬度坐标做垂直于纬度坐标轴的直线,一直找到与两个List中所有路段相交最少的一条垂线,作为分割线,图5中垂线即为找到的分割线,这样就将一个网格分割成了两个网格。然后分别在对应网格的节点中填充对应的路段数据即可。
Claims (6)
1.一种基于路段密度划分地图网格的方法,其特征在于,包括如下步骤:
步骤1:获得所有路段的路段数据,在地图上得到能包含所有路段数据的外包矩形,将能包含所有路段数据的外包矩形设置为根节点,所述根节点为最大的网格;
步骤2:设置所划分网格中的路段数目最大值MaxNumber,将步骤1中所有的路段数据分别作为节点,逐个插入根节点中,对于插入的每个路段数据有如下判断:
若插入当前的路段数据后,该路段数据所属网格中的路段数目不大于MaxNumber,则继续插入下一路段数据;若插入当前的路段数据后,该路段数据所属网格中的路段数目大于MaxNumber,则对所属网格利用网格分割方法进行分割,使得分割后的每个网格都满足网格中的路段数目不大于MaxNumber,然后继续插入下一路段数据;
步骤3:判断步骤1中所有路段数据是否全部使用完毕,若全部使用完毕则网格构建完毕,若还有路段数据剩余则继续执行步骤2;
所述节点包含以下属性:外包矩形左下角坐标、外包矩形右上角坐标、父亲节点、孩子节点序列、原始路段数据、是否包含原始路段数据的标签Flag,其中,当Flag的值为“True”时表示该节点只包含原始路段数据,当Flag的值为“Flase”时表示该节点包含网格且网格内包含原始路段数据;
所述步骤2包括如下子步骤:
步骤2.1:从步骤1中所有的路段数据中随机抽取一条路段数据,以这条路段数据创建节点Node1,根据Node1的原始路段数据得到该路段两个端点,以这两个端点构建线段line1,并创建存储Node型数据的列表List;
步骤2.2:创建节点CurrentNode,将根节点赋值给CurrentNode,判断CurrentNode节点的外包矩形与步骤2.1中Node1的外包矩形是否相交,若相交则进一步判断CurrentNode节点的Flag值,若Flag值为True,则将CurrentNode节点添加进所述List中,并执行步骤2.3;若Flag值为Flase,将CurrentNode节点的孩子节点依次赋值给CurrentNode,并返回执行步骤2.2;
步骤2.3:判断List列表是否为空,若List列表为空则执行步骤2.1,若List列表不为空,则从步骤2.1构建的List中取出第一个元素记为Node2,并将List中的第一个元素删除,计算Node2构成的矩形和line1相交部分记为线段line2,将line2插入到Node2的孩子节点序列中,执行步骤2.4;
步骤2.4:判断Node2的孩子节点数量是否大于MaxNumber,所述Node2的孩子节点序列的孩子数量等于Node2所对应网格的路段数量,若不大于MaxNumber则继续执行步骤2.3,若是大于MaxNumber则利用网格分割方法进行分割,直至插入最后一个路段数据。
2.如权利要求1所述的基于路段密度划分地图网格的方法,其特征在于,步骤2.4中Node2的孩子节点数量若是大于MaxNumber,则所述网格分割方法包括如下步骤:
步骤2.4.1:将Node2的所有孩子节点利用计算Hausdorff距离的方式进行分配,直到Node2的所有孩子节点都分配到新构建的两个列表List1和List2中;
步骤2.4.2:分别计算两个列表内所有节点的外包矩形,然后依次遍历两个列表中所有的外包矩形的左下角端点和右上角端点的经纬度坐标,分别向坐标轴作垂线,获得能将List1中的所有元素和List2中的所有元素分别列在两侧且与外包矩形中的路段数据的相交次数最少的垂线,将该垂线存入List3;
步骤2.4.3:根据List3中存入的垂线将Node2的外包矩形沿垂线进行分割,保存Node2的所有孩子节点所代表的路段数据,将Node2中的孩子节点列表清空,新建节点Node3,令此时Node2的外包矩形为原外包矩形分割后的一半和Node3的外包矩形为原外包矩形分割后的另一半,将Node2的所有孩子节点所代表的路段数据分别存入Node2和Node3中,若Node2的父亲节点不为空,则将Node3插入到Node2的父亲节点的孩子节点序列中,若为空,则直接执行步骤2.4.4;
步骤2.4.4:判断Node2是否是根节点,若Node2是根节点,判断Node3是否为空,若Node3不为空,则新建节点Node4,将Node4的Flag设置为’False’,将最大外包矩形的左下角坐标和右上角坐标设置为Node4的属性,将Node2和Node3插入到Node4节点的孩子列表中,将Node4节点赋值给根节点,若Node3为空则执行步骤3;
若Node2不是根节点,判断Node3是否为空,若不为空,判断Node2的父亲节点中孩子数量是否大于MaxNumber,若是大于MaxNumber,则将Node2的父亲节点赋值给Node2,执行步骤2.4.1;若是不大于MaxNumber,则将Node2节点的父亲节点赋值给Node2节点,Node3赋值为空,返回执行步骤2.4.4。
3.如权利要求2所述的基于路段密度划分地图网格的方法,其特征在于,步骤2.4.1包括如下子步骤:
根据Node2的所有孩子节点的原始路段数据,获得每个孩子节点包含路段的两个端点,分别以每条路段的两个端点构建线段,依次计算任意两条线段之间的Hausdorff距离,令Hausdorff距离最大的两个孩子节点分别作为新构建的列表List1和List2的首元素,然后依次遍历其他的孩子节点所对应的线段与两个首元素的Hausdorff距离,若距离List1的首元素Hausdorff距离更大,则将当前孩子节点插入到List2的列表中,反之则插入List1的列表中,直到将所有的孩子节点都分配到两个列表中为止。
4.如权利要求2所述的基于路段密度划分地图网格的方法,其特征在于,步骤2.4.2包括如下子步骤:
首先分别获得两个列表内所有元素的外包矩形,首先从所有外包矩形中左下角端点经度坐标最小的开始,以该端点的经度坐标向经度坐标轴做垂线,判断List1中的所有元素和List2中的所有元素的路段数据是否分别列在垂线的两侧,若不是则依次遍历所有外包矩形的左下角端点和右上角端点的经度坐标,直到一条垂线能将List1中的所有元素和List2中的所有元素分别列在垂线的两侧,此时计算这条垂线与外包矩形中的路段数据的相交次数;
然后从所有外包矩形中左下角端点纬度坐标最小的开始,以该端点的纬度坐标向纬度坐标轴做垂线,判断List1中的所有元素和List2中的所有元素是否分别列在垂线的两侧,若不是则依次遍历所有外包矩形的左下角端点和右上角端点的纬度坐标,直到一条垂线能将List1中的所有元素和List2中的所有元素分别列在垂线的两侧,此时计算这条垂线与外包矩形中的路段数据的相交次数;
最后构建Double型的列表List3,将获得的垂线中与外包矩形中的路段数据的相交次数最少的垂线存入List3中,所述List3存放两个数据,第一个数据存放0或者1,存放0则代表垂线垂直经度坐标轴,存放1则代表垂线垂直纬度坐标轴,第二个数据存放垂线垂直于坐标轴的坐标数据。
5.如权利要求4所述的基于路段密度划分地图网格的方法,其特征在于,步骤2.4.3包括如下子步骤:
根据List3中存入的垂线将Node2的外包矩形沿垂线进行分割,保存Node2的所有孩子节点所代表的路段数据,将Node2中的孩子节点列表清空,新建节点Node3,令此时Node2的外包矩形为原外包矩形分割后的一半和Node3的外包矩形为原外包矩形分割后的另一半;
若List3第一个元素为0,则将垂直于经度坐标轴的垂线一侧对应于Node2节点的路段数据插入到Node2中,垂线另一侧对应于Node3节点的路段数据插入Node3中,对于被垂线贯穿的路段数据,则将贯穿得到的两段路段数据分别插入到两侧矩形所对应的节点中;
若List3第一个元素为1,则在垂直于纬度坐标轴的垂线一侧对应于Node2节点的路段数据插入到Node2中,垂线另一侧对应于Node3节点的路段数据插入到Node3中,对于被垂线贯穿的路段数据,则将贯穿得到的两段路段数据分别插入到两侧矩形所对应的节点中;
若Node2的父亲节点不为空,则将Node3插入到Node2的父亲节点的孩子节点序列中,若为空,则直接执行步骤2.4.4。
6.如权利要求5所述的基于路段密度划分地图网格的方法,其特征在于,所述步骤3包括如下子步骤:
判断步骤1中所有路段数据是否全部使用完毕,若全部使用完毕则网格构建完毕,每个Flag为True的节点所对应的矩形就是要构建的网格,若还有路段数据剩余则继续执行步骤2。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910231199.1A CN110083670B (zh) | 2019-03-26 | 2019-03-26 | 一种基于路段密度的地图网格划分方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910231199.1A CN110083670B (zh) | 2019-03-26 | 2019-03-26 | 一种基于路段密度的地图网格划分方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110083670A CN110083670A (zh) | 2019-08-02 |
CN110083670B true CN110083670B (zh) | 2020-09-18 |
Family
ID=67413639
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910231199.1A Active CN110083670B (zh) | 2019-03-26 | 2019-03-26 | 一种基于路段密度的地图网格划分方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110083670B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111445576B (zh) * | 2020-03-17 | 2022-09-13 | 腾讯科技(深圳)有限公司 | 地图数据的获取方法和装置、存储介质及电子装置 |
CN114328783A (zh) * | 2021-12-27 | 2022-04-12 | 北京百度网讯科技有限公司 | 地图数据输出方法、地图数据处理方法、装置和电子设备 |
CN116383451B (zh) * | 2023-06-06 | 2023-08-18 | 北京赛目科技股份有限公司 | 一种地图分割方法、装置、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105138711A (zh) * | 2015-10-21 | 2015-12-09 | 北京中电普华信息技术有限公司 | 一种图元索引、检测方法及装置 |
CN105631555A (zh) * | 2016-02-23 | 2016-06-01 | 北京邮电大学 | 一种疏散路径的推送方法及装置 |
CN105760529A (zh) * | 2016-03-03 | 2016-07-13 | 福州大学 | 一种移动端矢量数据的空间索引和缓存构建方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101556618B1 (ko) * | 2013-10-16 | 2015-10-01 | 팅크웨어(주) | 다양한 사용자 네트워크 환경 지원 및 자유로운 데이터 권역 설정을 위한 지도 데이터 제공 장치 및 방법과 그 시스템 |
-
2019
- 2019-03-26 CN CN201910231199.1A patent/CN110083670B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105138711A (zh) * | 2015-10-21 | 2015-12-09 | 北京中电普华信息技术有限公司 | 一种图元索引、检测方法及装置 |
CN105631555A (zh) * | 2016-02-23 | 2016-06-01 | 北京邮电大学 | 一种疏散路径的推送方法及装置 |
CN105760529A (zh) * | 2016-03-03 | 2016-07-13 | 福州大学 | 一种移动端矢量数据的空间索引和缓存构建方法 |
Non-Patent Citations (1)
Title |
---|
"一种启发式快速路网网格化划分算法";刘子立 等;《现代计算机》;20100831;第25-27页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110083670A (zh) | 2019-08-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110083670B (zh) | 一种基于路段密度的地图网格划分方法 | |
CN102663801B (zh) | 一种提高三维模型渲染性能的方法 | |
CN106708837B (zh) | 兴趣点搜索方法、装置 | |
CN111090712A (zh) | 一种数据处理方法、装置、设备及计算机存储介质 | |
CN102749084A (zh) | 一种面向海量交通信息的路径选择方法 | |
CN106204719B (zh) | 基于二维邻域检索的三维场景中海量模型实时调度方法 | |
CN108304585B (zh) | 一种基于空间关键字搜索的结果数据选取方法及相关装置 | |
CN112925789B (zh) | 一种基于Spark的空间矢量数据内存存储查询方法及系统 | |
CN113096246B (zh) | 一种三维地图数据更新方法 | |
CN116036604B (zh) | 数据处理方法、装置、计算机及可读存储介质 | |
CN107126702A (zh) | 一种3d游戏随机地图的生成方法 | |
CN111666361B (zh) | 一种存储多边形包含关系的四叉树构建方法及索引方法 | |
KR100726333B1 (ko) | 라이다 데이터로부터 셰도-그리드를 이용한 건물 외곽선자동추출방법 | |
CN110245271B (zh) | 基于属性图的大规模关联数据划分方法及系统 | |
CN112269848A (zh) | 一种众包轨迹数据融合方法及装置 | |
CN115779424B (zh) | 一种导航网格寻路方法、装置、设备及介质 | |
CN111209360A (zh) | 一种自动提取路口面的方法及系统 | |
CN106373192A (zh) | 一种非拓扑一致性三维网格块体追踪算法 | |
CN116090395A (zh) | 数据处理方法、数据结构的生成方法、查询方法 | |
CN112036012B (zh) | 一种基于区域生长的刀具对毛坯的布尔运算方法 | |
CN114281915B (zh) | 一种生成几何路网的方法、装置、设备及存储介质 | |
CN110737741A (zh) | 基于道路流通能力的标准网格划分方法及装置 | |
CN114119904B (zh) | 室内路网构建方法、装置和存储介质 | |
CN117689828A (zh) | 路口面的生成方法、装置、产品、设备和介质 | |
CN115314907B (zh) | 一种5g基站位置的确定方法与装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |