一种VCT3.0多图层文件转换方法、终端设备及存储介质与流程

文档序号:18619340发布日期:2019-09-06 22:20阅读:510来源:国知局
一种VCT3.0多图层文件转换方法、终端设备及存储介质与流程

本发明涉及计算机文件转换技术领域,尤其涉及一种vct3.0多图层文件转换方法、终端设备及存储介质。



背景技术:

vct(矢量数据交换格式)是土地利用中的一种非常重要的数据交换格式,国土资源部在国家标准《地球空间数据交换格式》基础上制定了矢量数据交换格式vct1.0、vct2.0和vct3.0。vct1.0采用未建立拓扑关系(topo:0)的空间矢量数据交换格式;vct2.0采用(topo:1)的空间矢量数据交换格式,要求“面要素采用“topo:1”方式,使用间接坐标描述面要素,封闭边界由线要素组成”;vct3.0中要求“面要素中的<面的特征类型>::=100,100表示由间接坐标构成的面对象”,此外vct3.0还要求地类图斑(面)、宗地(面)两个层必须引入同一组线对象。

vct中的面要素要求使用间接坐标来描述,它需要按照一定的顺序(顺时针或者逆时针)记录组成该多边形数据的线要素和其他一些属性信息。但处理过程中由于每个节点均需要记录,因此处理转换速度较慢。



技术实现要素:

为了解决上述问题,本发明提出了一种vct3.0多图层文件转换方法、终端设备及存储介质,以提高处理转换速度。

具体方案如下:

一种vct3.0多图层文件转换方法,包括以下步骤:

s1:加载所有图层的矢量图层数据,并创建图层信息,所述图层信息包括该图层中每个要素的每个面的面间接线集合和原始节点集合;

s2:将矢量图层数据中的所有节点添加至节点集中,并对节点集中的各节点进行排序和去重后,再进行唯一编号;

s3:将矢量图层数据中的所有线段采用首末节点编号形式表示后添加至线段集中,并对线段集中的各线段进行排序和去重,并删除线段集中的反向线段,使线段集中只保留一个方向的线段;

s4:各要素的组成线段根据线段集中的各线段进行唯一编号,并且将在线段集中出现的线段编为正号,将未在线段集中出现但其反向线段在线段集中出现的线段编为负号,其中,不同方向的同一线段的编号数字相同但正负号不同,并根据线段集中的各线段建立共线段映射表;

s5:按每个图层中各要素的矢量化方向,将各要素中具有相同共边信息的相邻线段进行合并后,对图层信息中的面间接线集合进行更新,并同时更新共线段映射表;

s6:判断合并后的新共线段的首末节点编号是否相同,如果相同,进入s7,否则,进入s8;

s7:根据新共线段中首节点的相邻节点来判断矢量化方向,根据矢量化方向对新共线段进行唯一正负编号,进入s8;

s8:待所有共线段合并完成后,将图层信息中各面间接线集合中的各面间接线按矢量方向进行首尾拼接,生成拼接线,并判断拼接线是否首尾封闭,如果是,则进入s9,如果不是,则说明面间接线构建失败,结束;

s9:将拼接线按照节点顺序复制一条,并删除两条连接处的重复节点,生成双层拼接线,根据该拼接线在图层信息中对应的原始节点集合,在双层拼接线中查找与原始节点集合中的序列完全匹配的子序列,如果能找到,则说明面间接线构建成功,进入s10,否则,则说明面间接线构建失败,结束;

s10:根据图层信息构成vct格式文件输出。

进一步的,步骤s2中的将矢量图层数据中的所有节点添加至节点集中具体为:将每一图层中的各节点进行排序和去重后,添加至节点集中。

进一步的,步骤s4的具体过程为:通过遍历图层线段集合,针对其中的每一条线段,采用二分法在图层线段集合中查找其反向线段,如果能找到,则将图层线段集合中查找到的反向线段删除。

进一步的,步骤s5进行之前还包括将共线段映射表中的线段按照共边信息进行排序,所述共边信息用于表示线段所在的图层要素面。

进一步的,步骤s5的具体过程为:判断是否满足相邻线段的共边信息相同,且相同的共边信息对应的要素中存在该相邻线段,如果满足,则将相邻线段合并为新共线段,并将新共线段记录在共线段映射表内;否则,则不合并;直至所有能够合并的相邻线段均合并完成。

进一步的,步骤s8中拼接的过程还包括:判断面间接线的编号是否为负数,如果是,则交换表示该面间接线的所有节点的顺序。

进一步的,该方法采用mapreduce或map并行处理框架进行处理。

进一步的,步骤s1、s2、s3和s4均采用mapreduce并行处理框架,s8、s9和s10均采用map并行处理框架。

一种vct3.0多图层文件转换终端设备,包括处理器、存储器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本发明实施例上述的方法的步骤。

一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现本发明实施例上述的方法的步骤。

本发明采用如上技术方案,通过合并面要素的共边,可以提高间接线的构建时间,进而提高处理转换速度,同时,针对多图层可能出现的一些问题进行了适应性处理,使其适用于多图层。

附图说明

图1所示为本发明实施例一的总流程图。

图2所示为该实施例中地类图斑图层示意图。

图3所示为该实施例中宗地图层要素示意图。

图4所示为该实施例中的相邻线段合并的流程图。

图5所示为该实施例中的合并共线段的流程图。

图6所示为该实施例中的判断是否存在相邻线段的流程图。

图7所示为该实施例中的更新共线段映射表的流程图。

图8所示为该实施例中的环岛类型共边信息处理的流程图。

图9所示为该实施例中的图层面间接线检测流程图。

图10所示为该实施例中的地类图斑图层面间接线结果。

图11所示为该实施例中的宗地图层面间接线结果。

图12所示为该实施例中的行政区图层面间接线结果。

具体实施方式

为进一步说明各实施例,本发明提供有附图。这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理。配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点。

现结合附图和具体实施方式对本发明进一步说明。

实施例一:

参考图1所示,本发明实施例提供了一种vct3.0多图层文件转换方法,所述方法包括以下步骤:

s1:加载矢量图层数据,创建图层信息layerinfo。

所述图层信息layerinfo包括图层名称和该图层中各要素信息,其中,各要素信息至少包括该图层中每个要素的每个面的面间接线集合和原始节点集合。

所述面间接线集合在创建初始为空的,后面再进行填充,而原始节点集合在加载矢量图层数据后被填充。

步骤s1中,如果加载的矢量图层数据为原始数据,其可能包含一些无效数据,如重复的点、未封闭的面等等,为了避免这些无效数据的干扰,需要预先对无效数据进行剔除,具体方法包括但不限于:

(1):过滤面相邻重复节点;

(2):根据面的首末节点,判断面是否封闭,将无法封闭的面的节点剔除;

(3):判断面的节点数是否小于4,将小于四个节点数的面的节点剔除(一个面包括首末节点至少由四个节点构成)。

s2:遍历多图层中的每一图层,将每一图层中各节点按空间坐标进行快速排序并去重后,添加至节点集mnodevec中,并对节点集mnodevec中的各节点进行快速排序和去重处理后再进行唯一编号,形成最终的节点集mnodevec。

该实施例中所述排序的方法为采用从左至右、从下至上的顺序进行排序,例如,图2中的14个节点的排序顺序为:a、b、c、d、g、e、h、f、i、p、m、q、j、k、l。本领域技术人员也可以采用其他的排序方法,在此不做限制。

所述唯一编号即所有节点的编号均不相同。

所述快速排序可以采用二分法进行排序。

该实施例中,针对多图层,采用mapreduce并行处理框架生成节点集mnodevec,其中的map并行处理过程为:对于每一图层,以图2的地类图斑图层为例,将地类图斑图层加载后的矢量图层数据中的各要素的节点按空间坐标进行快速排序后再进行去重操作,当地类图斑图层执行上述过程后生成排序后并去重后的节点集nodevec;reduce单线程处理过程:对每个图层处理好的节点集nodevec,进行合并到总的节点集mnodevec,然后对节点集mnodevec再执行快速排序和去重过程,最后形成全部参与构建图层的已排好序的唯一节点集mnodevec。此处通过这种并行处理方式,可以进一步有效提升性能。

s3:将一维线段降维为0维点,将矢量图层数据中所有线段采用首末节点编号形式表示后,将各线段添加至线段集mlinevec中。并对线段集mlinevec中的各线段进行排序和去重,并删除线段集中的反向线段,使线段集中只保留一个方向的线段。

如:图2中的线段ab表示为(0,1)、线段ba表示成(1,0)的首末节点编号形式。在该实施例中,通过遍历图层线段集合linevec,针对每一条线段,采用二分法在图层线段集合linevec中查找其反向线段,如果能找到,则将图层线段集合linevec中查找到的反向线段删除,并将该线段的信息添加至共线段映射表内。该实施例中,继续采用mapreduce并行处理框架生成线段集mlinevec。其中,map并行处理过程为:对于每一图层,以图2的地类图斑图层为例,将地类图斑图层加载后的矢量图层数据中的各要素的线段进行快速排序后再进行去重操作,当地类图斑图层执行上述过程后生成排序后并去重后且只保留一个方向的线段集linevec;reduce单线程处理过程为:将每个图层处理好的线段集linevec添加到总的线段集mlinevec,然后对总的线段集mlinevec再执行快速排序和线段去重并保留单向线段过程,最后形成全部参与构建图层的已排好序的唯一线段集mlinevec。此处通过这种并行处理方式,可以进一步有效提升性能。

s4:参考图5所示,各要素的组成线段根据线段集中的各线段进行唯一编号,并且将在线段集中出现的线段编为正号,将未在线段集中出现但其反向线段在线段集中出现的线段编为负号,其中,不同方向的同一线段的编号数字相同但正负号不同,并根据线段集中的各线段建立共线段映射表mlineinfomap。

如:图2中的线段ab、线段ba都从1开始编号,并且都编号为1,只是表示时用正负号来区分线段正向和反向,线段ab编号为1,而线段ba编号为-1。

在该实施例中,针对各要素的每一条组成线段,采用二分法在图层线段集合linevec中进行查找,如果能找到,则将该线段编号为正号,如果没有找到,则查找其反向线段,如果反向线段能找到,则将查找到的线段编号为负号,其中,不同方向的同一线段的编号数字相同但正负号不同。进一步的,如果起始线段编号为0时,由于0没有正负号,因此无法表示方向,因此可以添加虚拟线段(0,0),也可以将起始线段从1开始编号。

该实施例中,所述共线段映射表mlineinfomap包括所有共线段的信息,每个共线段的信息包括共线段编号、首节点编号、末节点编号、共线段的顺序节点序列和共边信息。本领域技术人员可以根据需求增减或修改所述共线段映射表的内容。

该实施例中,所述共边信息采用“图层名称或图层索引号”+“图层要素编号”+“|”+“面索引号”的表示方式,用于记录该线段属于哪个要素。如:图2中的线段cd在要素1中,线段dc在要素5的外环中,但在共线段映射表中,只存在线段cd,因此,需要记录线段cd都是哪个图层的哪几个要素的共边。此时,由于要素5外环面索引号为0,因此,在共线段映射表中的共边信息中,线段cd的边信息分别为“dltb|1|0”、“dltb|5|0”、“zd|1|0”、“zd|2|0”四条。需要说明的是,分隔符不限于“|”,也可以为其他符号,并主要能够包含要素编号或面索引号,以及能区分,方便后续进行共线信息判定即可。

该实施例中,继续采用mapreduce并行处理框架按最小线段建立共线段映射表mlineinfomap。其中,map并行处理过程为:对于每个图层,针对线段也可采用二分法快速查找,对每个图层的要素的线段(间接线)进行编号。此处需要说明的是,如果线段的方向与线段集mlinevec中找到的方向一致,则编号为正,如果方向不一致,则编号为负。每一图层按照上述规则建立每个要素的要素面间接线集合commonlinevec。同时,每个图层按最小线段建立共线段映射表lineinfomap。reduce单线程处理过程:将每个图层建立的共线段映射表lineinfomap添加到总的共线段映射表mlineinfomap,添加过程如下,针对共线段映射表lineinfomap中的每个共线段,查找总的共线段映射表mlineinfomap中是否存在,如果存在,则将共线段信息进行合并;如果不存在,则把该共线段添加到mlineinfomap中,最后形成全部参与构建图层的最小共线段映射表mlineinfomap。此处通过这种并行处理方式,可以进一步有效提升性能。

进一步的,为了后续能够快速的根据共边信息来合并相邻线段,步骤s5进行之前还包括将共线段映射表中的线段按照共边信息进行排序,所述共边信息用于表示线段所在的要素面。

s5:参考图4和6所示,按每个图层中各要素的矢量化方向,将各要素中具有相同共边信息的相邻线段进行合并。

所述要素包括面型(图2中的要素1)和环形(图2中的要素5)。

如:图2的地类图斑图层的要素1中,线段ab和线段bc的共边信息均为“dltb|1|0”、“zd|1|0”,因此合并后形成新共线段ac,首末节点分别为a和c,共边信息还是“dltb|1|0”、“zd|1|0”,只是新共线段的编号全局递增,并且更新矢量化方向节点编号信息为abc对应的节点信息。

此时,对图层信息layerinfo中的各要素信息进行更新,每个要素信息均包括要素标识码strbsm和要素面间接线集合commonlinevec和要素原始节点集合polygonlinevec。该实施例中,对于一个要素,其所有面的面间接线集合记为commonlinevec;要素中的其中一个面的面间接线集合记为commonline;每个面的间接线记为commonsectionline,缩写记为csl。

所述要素面间接线集合的数据格式包括组成要素的多个环或面的面间接线信息,要素单个环或面的面间接线信息包括组成该环或面的所有共线段的信息。

所述和要素原始节点集合的数据格式包括组成要素的多个环或面的节点信息,要素单个环或面的节点信息包括组成该环或面的所有节点的编号和节点的横坐标和纵坐标。

需要说明的是,所述要素的面间接线为组成要素的各线段。

如该实施例中,将地类图斑图层要素1的要素面间接线集合数据中的线段ab和线段bc删除,将新共线段ac的映射信息添加到地类图斑图层要素1的要素面间接线集合数据中。同时,将宗地图层要素1的要素面间接线集合数据中的线段ab和线段bc删除,将新共线段ac的映射信息添加到宗地图层要素1的要素面间接线集合数据中。

同时,更新共线段映射表mlineinfomap(如图7所示),即从共线段映射表中删除共线段ab和共线段bc,并添加新共线段ac。上述过程也是体现了最大共边的思路。通过合并共边处理,可以降低内存占用。

步骤s5具体过程为:

判断是否满足相邻间接线的共边信息相同,且相同的共边信息对应的要素面中存在该相邻间接线,如果满足,则将相邻间接线合并为共线段,否则,则不合并。

相邻间接线的共边信息不同的情况如图2要素1中的线段bc和线段cd。

相邻间接线的共边信息相同,但对应的要素面中不存在该相邻间接线的情况如图2要素1中的线段cd和线段da,其共边信息中的要素5外环对应的线段ad和线段dc并不相邻,即不存在相邻间接线ad和dc。

特别的,针对该步骤采用map并行处理框架时,因合并共线段信息更新时存在冲突情况,因此采用线程同步锁机制,来保证数据更新一致性,以避免异常冲突产生。且通过多次实验测试表明,此处并行处理过程性能无法提升,反而降低了性能,主要原因是频繁合并时线程同步产生了额外开销,无法达到利用多线程的好处,因此,最后放弃这个主要步骤的并行处理机制。

s6:如图8所示,判断新共线段是否为环岛类型,即判断新共线段的首末节点编号是否相同,如果相同,进入s7,否则,进入s8。

s7:根据新共线段中首节点的相邻节点来判断矢量化方向,根据矢量化方向对新共线段进行唯一正负编号,进入s8。

在合并更新过程中,对于环岛情况,存在方向可能不对的情况,需要特殊处理。例如:图2的地类图斑图层的要素3中,线段hi和线段ij进行合并后,形成新的共线段hj,此后,共线段hj和线段hj进行合并时,则无法判断此环是顺时针方向还是逆时针方向。由此,采用相邻节点的办法来判断是顺时针方向还是逆时针方向。例如:图2的地类图斑图层的要素3中,合并后新共线段为hh(hijh),起点为h,矢量化方向的下一相邻节点为i,则与新共线段的方向相同;而要素5中内环起点为h,矢量化方向的下一相邻节点为j,与新共线段不同,则方向与新共线段的方向相反。

需要说明的是,针对多图层的情况,通常存在如下情况,例如:图3中的宗地图层要素2的边ka,在图2中的地类图斑图层中被要素4节点p打断,但实际宗地图层中要素2直接用ka边表示,中间并没有节点p。因此针对这种情况,为了不改变宗地图层的拓扑结构,对ka边不进行打断处理,此时,构建间接线ka与kp是分别独立的间接线,其间接线信息也是不同的。上述构建方法也是兼容这种特殊情况。

s8:待所有共线段合并完成后,进行面间接线的检测,针对多图层,采用map并行处理框架来验证生成的面间接线是否正确。参考图9,将图层信息中各图层中每个要素的每个面的面间接线集合commonline中的各面间接线按矢量方向首尾拼接,生成拼接线linepointvec,并判断拼接后的线linepointvec是否首尾封闭,如果不是,则说明面间接线构建失败,结束流程,通过排查原始数据来排查失败原因,如果是,则进入s9。

当面间接线集合中只有一条面间接线时,则拼接线linepointvec为该条面间接线。

所述拼接的过程还包括:判断面间接线的编号是否为负数,如果是,则交换其所有节点顺序,即如果面间接线ac的编号为负数,则将其节点ac变换为ca。

s9:该步骤继续采用map并行处理框架。参考图9,将拼接线linepointvec按照节点顺序复制一条,并删除两条连接处的重复节点,生成双层拼接线doublelinepointvec,例如,图2中的要素1拼接后的拼接线linepointvec用节点表示为:bcdab,则其双层拼接线doublelinepointvec用节点表示为:bcdabcdab,即中间删除掉两条连接处的重复节点b;然后,根据该拼接线linepointvec在图层信息中对应的原始节点集合polygonlinevec,依次遍历双层拼接线doublelinepointvec,在双层拼接线doublelinepointvec中查找与原始节点集合polygonlinevec中的序列完全匹配的子序列abcda,如果能找到,则说明面间接线构建成功,进入s10,否则,则说明面间接线构建失败,结束流程。

s10:根据图层信息中的面间接线集合构成vct格式文件输出。

效果说明:

本实施例中所述方法通过地理信息系统开发平台kingmapv6.0进行验证,平台是通过c/c++语言实现。平台运行环境为(workstation14pro32位)虚拟机:microsoftwindows7servicepack1旗舰版64位操作系统;kingstonddr3800mhz12gb内存,其中虚拟机内存分配4gb;intel(r)core(tm)i5-4200u@1.60ghz2.30ghz双核处理器,其中虚拟机cpu分配单核双线程;wdcwd10jpvx-08jc3t5(1tb5400转/每分钟8msata6gb/s)笔记本硬盘,其中虚拟机中硬盘50gb。以某镇的行政区、宗地图层和地类图斑进行间接线的构建和导出,经过验证导出的结果数据真实可靠。通过现有技术和本实施例方法得出的结果如表1所示。

表1

从表1可以看出,本实施例中的基于多图层的最大共边算法采用的程序经过1.201秒从64个行政区、290个宗地和1730个地类图斑中构建7904个间接线,远远少于现有技术算法消耗的时间。而并行处理后的最大共边算法程序在双线程情况下,相对于单线程,消耗的时间减少,处理效率进一步提高。根据对导出结果的验证,确认导出数据正确且所有的间接线不重叠和不重复,符合vct的要求,如图10~12所示。

实施例二:

本发明还提供一种vct3.0多图层文件转换终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本发明实施例一的上述方法实施例中的步骤。

进一步地,作为一个可执行方案,所述vct3.0多图层文件转换终端设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述vct3.0多图层文件转换终端设备可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,上述vct3.0多图层文件转换终端设备的组成结构仅仅是vct3.0多图层文件转换终端设备的示例,并不构成对vct3.0多图层文件转换终端设备的限定,可以包括比上述更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述vct3.0多图层文件转换终端设备还可以包括输入输出设备、网络接入设备、总线等,本发明实施例对此不做限定。

进一步地,作为一个可执行方案,所称处理器可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述vct3.0多图层文件转换终端设备的控制中心,利用各种接口和线路连接整个vct3.0多图层文件转换终端设备的各个部分。

所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述vct3.0多图层文件转换终端设备的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据手机的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例上述方法的步骤。

所述vct3.0多图层文件转换终端设备集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)以及软件分发介质等。

尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1