发明内容
为了克服现有技术的不足,本发明提供基于FPGA构建的分层次栅格转矢量处理方法。
基于FPGA构建的分层次栅格转矢量处理方法,通过采用FPGA电路构造分层次边界拓扑搜索模型,用硬件电路模拟算法的方式,对栅格数据进行分层次边界拓扑搜索模型计算,在计算中自动生成带有边界节点坐标和节点方向的边界节点;达到对大数据的快速处理的目的;对FPGA电路产生的节点数据,在通过软件对节点数据进行搜索,构造出包含有多边形之间的相邻、包容和被包容等拓扑关系的矢量文件。
因此本发明在处理其超大数据量、拓扑关系极其复杂的遥感影像数据时,更能够显示出该发明的转换效率和高速性能。该技术的应用可以提高在大面积、大范围的各类资源调查中的效率和自动化程度,及时准确地的获取各种资源信息,从而达到节省人力物力的目的。
基于FPGA构建的分层次栅格转矢量处理方法,采用FPGA电路构造分层次边界拓扑搜索模型实现栅格转矢量中的边界提取处理器设计,充分利用计算机技术在网格计算、云计算、并行计算等方面高速发展所取得的技术成果,通过采用FPGA电路构造的分层次边界拓扑搜索模型,在硬件电路的模型计算中,自动生成带有边界节点坐标和节点方向的边界节点,通过对这些边界节点的搜索,构造出包含有多边形之间的相邻、包容和被包容等拓扑关系的矢量文件。在栅格转矢量过程中,只需要对需要转换的图像数据加载一次,就能够自动完成整个转换过程;不需要进行任何转换后的后期处理工作,并且在转换后不可能出现多边形相互间重叠、相交;相邻、包容拓扑关系错误和不完整的情况。
因此本申请技术在处理数据量庞大、拓扑关系极其复杂的遥感影像数据时,更加能够显示出本申请技术的转换效率和高速性能。
本发明所要解决的技术问题,提供了基于FPGA构建的分层次栅格转矢量处理方法,对遥感影像数据进行栅格数据矢量化,将遥感影像上具有相同属性内容的像元,转化为包含有:不同面积、不同周长、不同属性、不同形状来表示的矢量图形元素,并且也能够表现出这些不同矢量图形元素之间,所存在的相邻、包容和被包容的空间拓扑关系也能够得到完全展示。并且转化后的矢量图形元素属性与遥感影像上所对应的像元,在空间位置上具有完全相同的一一对应关系。
基于FPGA构建的分层次栅格转矢量处理方法,采用与传统的转换方法不同的处理方法,通过采用FPGA电路构造的分层次边界点拓扑搜索模型,将栅格数据像元间的拓扑关系简化,在模型计算中自动生成包含有坐标位置信息的边界节点,并且这些边界节点数据还具有描述边界节点是从哪里开始、到哪里结束的边界走向的指向性信息;在通过对这些边界节点数据进行多边形搜索,通过边界节点数据的指向性,可以十分明确的定位与之相连的边界节点的确切位置信息,将这些具有特定关系的边界节点全部连接起来,就自动形成一个封闭多边形,并且通过判断封闭多边形的走向,如果是顺时针他就是一个独立多边形,他可能包含有岛多边形;如果是逆时针他就一定是被某个独立多边形所包容的岛多边形。而不可能出现多边形相互间的重叠、相交;相邻、包容拓扑关系错误和不完整情况,所有本发明具有算法简洁、快速生成的边界节点数据具有明确的指向性和唯一性的特定拓扑关系。
而且本发明包含有三个显著特点是,一个是可以对栅格数据中的某些指定的像元属性值或内容,进行栅格转矢量计算;而不存在现有栅格转矢量算法中,只能一次将栅格数据全部转化为矢量数据的强制性限制;二个是通过采用FPGA电路构造的分层次边界点拓扑搜索模型,用计算机硬件电路技术将栅格数据转化为矢量数据,具有比采用软件编程算法所无法想象的速度;三是采用软硬件技术相结合的技术方法,用计算机硬件技术对栅格数据进行边界节点快速提取,用并行计算技术对边界节点数据进行多边形搜索,从而完成栅格转矢量操作。因此本发明可以极大的提高转化效率和广泛的应用领域。
本发明的栅格转矢量算法,只需要对需要转换的图像数据加载一次,就能够自动完成整个转换过程,不需要进行任何转换后的后期处理工作,并且转换后不可能出现多边形相互间重叠、相交;相邻、包容拓扑关系错误和不完整的情况。
此本发明特别适合于超大数据量、栅格数据中像元相邻关系极其复杂的栅格转矢量计算。该算法提高在森林资源监测、湿地资源监测、土地资源监测等各种资源在分布范围、资源变化、预测分析等方面的数据处理效率;特别是需要对监测目标进行实时跟踪处理的自然灾害在发生、发展情况中的监测分析预警系统;及目标识别、目标制导等军事应用领域中的需要进行栅格转矢量的计算应用;并且该算法在转化后的矢量数据中,不存在转换误差、不需要进行任何后期处理操作,故该技术具有计算模型简单、转换效率高、速度快,自动化程度高和可有选择性的将栅格数据转化为矢量数据的突出特点。
本发明提供了基于FPGA构建的分层次栅格转矢量处理方法,包括:
1)、数据预处理步骤;
2)、采用FPGA电路提取边界节点步骤;
3)、多边形搜索步骤;
4)、创建多边形矢量步骤;
5)、创建矢量文件步骤;
基于FPGA构建分层次边界拓扑搜索模型的基于FPGA构建的分层次栅格转矢量处理方法流程图见图1所示。
基于FPGA构建的分层次栅格转矢量处理方法,含有以下步骤;
1)、数据预处理步骤;
在获取遥感影像数据后,为了实现算法的简单化、避免在计算中需要对栅格数据中的四个边界上(第一行、最后一行、第一列和最后一列)的数据进行特殊计算,减少计算中的条件分支判断,提高运算效率,达到用一个统一直观的处理流程进行计算的目的,对栅格数据进行了边界扩展处理,即进行数据预处理操作。
数据预处理的目的是在将原栅格数据的四周添加一圈新的像元数据。
对于所要添加的像元数据,要求是该数据的像元值或属性内容,要与原栅格数据中任何一个的像元值或属性内容都不相同。
数据预处理的第二个目的是根据像元值或属性内容的分类,设置栅格转矢量的条件。是将栅格数据全部转换为矢量数据;还是只转换某些指定像元值或属性内容中某些类型的像元,即设置栅格转矢量所依据的基本条件。
在数据预处理结束后,启动FPGA电路提取边界节点步骤,该步骤是一个可以同时进行并行计算的流程,所需要启动的流程的个数,将根据所设置的栅格转矢量条件中的转换类型数量来确定。
FPGA电路提取边界节点理步骤;
将扩展后的栅格数据按照所设置的栅格转矢量条件,传送到栅格转矢量处理器中,处理器按分层次转换的方式,计算后分组传回节点数据,其具体数量由转换条件中的转换数量来决定;为进行多边形搜索提供边界节点数据。
2)、采用FPGA电路提取边界节点步骤;
在采用FPGA电路构造的节点提取电路中,主要包含有参数寄存器初始化操作;栅格数据存储地址计算单元、3*3像元矩阵节点计算单元、节点保存控制单元,循环控制操作单元等硬件功能电路组成,这些硬件功能电路在系统时序的控制下,逐步进行操作,直到完成所有栅格数据的节点提取操作。
参数寄存器初始化操作:
在参数寄存器初始化操作中,包含有:栅格数据参数初始化,节点计算参数初始化两个部分。
栅格数据参数初始化主要用于记录栅格数据的基本信息,如栅格数据(指扩展后的栅格数据)存储在存储器中的开始地址、栅格数据的行数、列数;一个像元所使用的字节数量、栅格数据需要转换为矢量数据的转换条件(数组)及转换数量等参数。
节点计算参数初始化用于记录节点计算中需要使用参数信息,及在计算中需要保存的参数、计算结果等信息,并且在节点计算中还需要使用栅格数据参数中数据。
参数寄存器初始化操作完成后,进入节点提取的循环操作,其操作步骤如下:
栅格数据存储地址计算单元:
栅格数据存储地址计算单元,是根据参数寄存器的初始化内容和当前计算像元的位置信息,计算出进行3*3像元矩阵计算时,需要参与计算的栅格数据的存储地址,供3*3像元矩阵节点计算单元读取栅格数据进行计算。
节点计算单元:
在3*3像元矩阵节点计算单元中,根据地址计算单元提供的栅格数据的地址,读取栅格数据(像元)按照分层次边界拓扑搜索模型要求进行计算,生成节点编码。
节点保存控制控制单元:
节点保存控制单元包含有:节点保存地址计算电路、节点有效性检查电路和条件转换分层控制电路、节点读写控制电路四部分组成。
节点保存地址计算电路,根据节点计算参数寄存器的初始化内容和节点数量计算出节点数据需要保存在内存中地址,供保存节点时使用。
节点有效性检查电路和条件转换分层控制电路,对节点计算单元所计算出的节点编码进行判断,该节点编码是否有效及该像元是否符合分层条件。
节点读写控制电路,对符合分层条件的有效节点,根据节点保存地址,将节点编码、像元的行列位置等信息保存到存储器中,供多边形搜索时使用。
循环控制操作单元包含有行循环控制操作单元和列循环控制操作单元两部分。他负责完成对栅格数据的全遍历循环控制操作,直到完成栅格数据在具体某个转换条件(层次)的边界拓扑搜索模型的计算工作,生成全部节点数据,供多边形搜索时使用。
如果循环没有结束则继续进行上述操作。
3)、多边形搜索步骤;
多边形搜索计算采用并行方法,该并行方法是:首先是创建一个多边形数据结构。然后从边界节点数据中开始读取节点数据,并以此节点为开始节点,创建一个新的多边形搜索队列。创建完多边形搜索队列后,继续读取边界节点数据,按照搜索条件开始进行多边形搜索计算,满足此多边形条件的节点添加到此多边形队列中,直到新节点的指向为开始节点时,此多边形队列已经形成一个封闭的多边形,即完成了一个多边形的搜索计算流程,多边形封闭后,将这个多边形作为多边形数据结构中的一条多边形记录进行保存;同时需要删除该多边形搜索队列。
如果读取的边界节点数据,不是现有并行计算多边形队列中的连接节点时,则需要创建一个新的多边形搜索队列,重复上述操作直到将边界节点数据中的所有节点,全部变成形成封闭多边形,完成多边形搜索计算。
4)、创建多边形矢量步骤;
在创建多边形矢量数据流程中,将根据多边形搜索计算中获得的有关该多边形的顺序号、面积、周长、开始节点位置、多边形类型、空洞多边形数量、多边形范围、节点数据集等信息记录到多边形数据结构表中,为合并多边形矢量数据进行数据准备,同时启动创建矢量数据文件操作流程。
在多边形搜索计算结束后,启动创建多边形矢量数据流程。创建多边形矢量数据的目的是,为多边形数据结构中的每个岛多边形,找到一个能够包容他的最小独立多边形,找到这个独立多边形后,将岛多边形的坐标点链表中的坐标数据,添加到包容他的独立多边形的坐标点链表的末端,修改独立多边形的面积为:S=S-Sd,S为独立多边形面积,Sd为岛多边形面积;并给独立多边形的岛多边形数量的属性值+1,他的初始值为0。
重复上述操作直到为所有岛多边形找到包容他的独立多边形为止。
5)、创建矢量文件步骤;
在创建矢量文件流程中,首先根据栅格数据所使用的坐标系信息,创建矢量文件和坐标系,然后根据多边形矢量数据中独立多边形的数量,建立循环搜索过程,每次读取一个多边形矢量数量,并按照多边形矢量数据的结构写入到矢量文件中,当将多边形矢量数据中的所有独立多边形矢量数据全部写入到矢量文件中时,完成创建矢量文件流程,结束栅格转矢量流程,结束对一个栅格文件的转换工作。
本发明的优点是使用遥感影像数据提供了基于FPGA构建的分层次栅格转矢量处理方法,使用软硬件结合的技术方法,对经过预处理(指数计算、阈值分割、分类等计算处理)的遥感影像进行矢量化,将遥感影像上具有相同属性内容的像元,转化为包含有:不同面积、不同周长、不同属性、不同形状来表示的矢量图形元素,并且也能够表现出这些不同矢量图形元素之间,所存在的相邻、包容和被包容的空间拓扑关系也能够得到完全展示。通过转化后的矢量图形,可以更方便的对图形元素的属性信息,分析他在空间位置上所发生的面积变化、空间位置变化、属性信息间的相互转化和演替过程进行监测和预测,为进行缓冲区分析、叠加分析(叠加求交、叠加求和)等与空间分析计算相关联的地理信息处理能力提供了可能,增加和扩大了遥感影像数据在地理信息应用领域的范围,也为地理信息应用领域提供了更多的基础数据。
实施例1:如图1、图2、图3、图4、图5、图6、图7、图8、图9、图10、图11、图12、图13、图14、图15、图16所示,基于FPGA构建的分层次栅格转矢量处理方法,含有以下步骤;
1、数据预处理步骤;:
对栅格数据结构的描述如下:
用N表示该数据的最大行数,第一行为0,最后一行为N,具体到某一行时用n表示。
用M表示该数据的最大列数,第一列为0,最后一列为M,具体到某一列时用m表示。
在获取遥感影像数据后,为了实现算法的简单化、避免在计算中需要对栅格数据中的四个边界上(第一行、最后一行、第一列和最后一列)的数据进行特殊计算,减少计算中的条件分支判断,提高运算效率,达到用一个统一直观的处理流程进行计算的目的,对栅格数据进行了边界扩展处理,即进行数据预处理操作。
数据预处理的目的是在将原栅格数据的四周添加一圈新的像元数据。
对于所要添加的像元数据,要求是该数据的像元值或属性内容,要与原栅格数据中任何一个的像元值或属性内容都不相同。
数据预处理的第二个目的是根据像元值或属性内容的分类,设置栅格转矢量的条件。是将栅格数据全部转换为矢量数据;还是只转换某些指定像元值或属性内容中某些类型的像元,即设置栅格转矢量所依据的基本条件。
在边界搜索流程中,将根据所设置的栅格转矢量条件,只对满足转换条件的栅格数据进行转换。栅格转矢量条件,用数组ZHTJ(i)表示,需要进行转换的属性类型数量,用ZHLX_SL表示。
数据预处理流程见图2所示。如原栅格数据为18行,13列,包含有9种属性类别,原栅格数据见表1所示;扩展处理后的栅格数据为为20行,15列,包含有10种属性类别,扩展后的栅格数据见表2所示。
在算法中规定采用将原属性类别的最大数+1所得到的属性值,作为扩展数据的属性值,
添加到原栅格数据四周,以保证所添加的扩展数据与原栅格四周边界上数据属性值的完全不同。或者用栅格数据的像元的最大值+50的方式添加扩展数据。数据扩展后的栅格数据包含有10中属性种类,比原数据增加了一种属性类型。
表1原栅格数据示例,N*M=18*13
1 |
1 |
1 |
3 |
3 |
4 |
4 |
3 |
3 |
5 |
5 |
2 |
2 |
1 |
1 |
2 |
3 |
3 |
3 |
4 |
4 |
4 |
5 |
1 |
5 |
2 |
1 |
2 |
2 |
2 |
3 |
3 |
3 |
4 |
4 |
5 |
1 |
5 |
5 |
5 |
2 |
2 |
3 |
3 |
3 |
3 |
5 |
5 |
5 |
5 |
5 |
5 |
5 |
3 |
3 |
3 |
3 |
3 |
7 |
7 |
5 |
5 |
5 |
5 |
6 |
5 |
5 |
5 |
3 |
3 |
7 |
7 |
7 |
5 |
8 |
5 |
6 |
6 |
5 |
5 |
4 |
4 |
4 |
7 |
7 |
7 |
8 |
8 |
6 |
6 |
6 |
4 |
4 |
4 |
4 |
4 |
6 |
7 |
7 |
7 |
7 |
8 |
4 |
6 |
9 |
4 |
4 |
4 |
6 |
6 |
6 |
7 |
8 |
8 |
8 |
4 |
4 |
9 |
9 |
6 |
6 |
6 |
6 |
6 |
9 |
9 |
8 |
8 |
4 |
4 |
9 |
9 |
6 |
6 |
9 |
6 |
9 |
9 |
9 |
8 |
4 |
4 |
5 |
5 |
9 |
6 |
6 |
9 |
9 |
9 |
9 |
9 |
9 |
7 |
7 |
5 |
5 |
9 |
9 |
6 |
9 |
1 |
1 |
1 |
1 |
9 |
7 |
5 |
5 |
4 |
9 |
9 |
9 |
9 |
1 |
1 |
3 |
1 |
9 |
7 |
7 |
5 |
4 |
9 |
9 |
1 |
1 |
1 |
3 |
3 |
1 |
1 |
9 |
5 |
5 |
4 |
6 |
9 |
9 |
1 |
3 |
3 |
3 |
3 |
3 |
1 |
9 |
9 |
2 |
8 |
9 |
9 |
1 |
1 |
1 |
1 |
1 |
3 |
1 |
9 |
9 |
2 |
8 |
8 |
8 |
9 |
9 |
9 |
9 |
1 |
1 |
1 |
9 |
5 |
表2扩展后栅格数据N*M=20*15
10 |
10 |
10 |
10 |
10 |
10 |
10 |
10 |
10 |
10 |
10 |
10 |
10 |
10 |
10 |
10 |
1 |
1 |
1 |
3 |
3 |
4 |
4 |
3 |
3 |
5 |
5 |
2 |
2 |
10 |
10 |
1 |
1 |
2 |
3 |
3 |
3 |
4 |
4 |
4 |
5 |
1 |
5 |
2 |
10 |
10 |
1 |
2 |
2 |
2 |
3 |
3 |
3 |
4 |
4 |
5 |
1 |
5 |
5 |
10 |
10 |
5 |
2 |
2 |
3 |
3 |
3 |
3 |
5 |
5 |
5 |
5 |
5 |
5 |
10 |
10 |
5 |
3 |
3 |
3 |
3 |
3 |
7 |
7 |
5 |
5 |
5 |
5 |
6 |
10 |
10 |
5 |
5 |
5 |
3 |
3 |
7 |
7 |
7 |
5 |
8 |
5 |
6 |
6 |
10 |
10 |
5 |
5 |
4 |
4 |
4 |
7 |
7 |
7 |
8 |
8 |
6 |
6 |
6 |
10 |
10 |
4 |
4 |
4 |
4 |
4 |
6 |
7 |
7 |
7 |
7 |
8 |
4 |
6 |
10 |
10 |
9 |
4 |
4 |
4 |
6 |
6 |
6 |
7 |
8 |
8 |
8 |
4 |
4 |
10 |
10 |
9 |
9 |
6 |
6 |
6 |
6 |
6 |
9 |
9 |
8 |
8 |
4 |
4 |
10 |
10 |
9 |
9 |
6 |
6 |
9 |
6 |
9 |
9 |
9 |
8 |
4 |
4 |
5 |
10 |
10 |
5 |
9 |
6 |
6 |
9 |
9 |
9 |
9 |
9 |
9 |
7 |
7 |
5 |
10 |
10 |
5 |
9 |
9 |
6 |
9 |
1 |
1 |
1 |
1 |
9 |
7 |
5 |
5 |
10 |
10 |
4 |
9 |
9 |
9 |
9 |
1 |
1 |
3 |
1 |
9 |
7 |
7 |
5 |
10 |
10 |
4 |
9 |
9 |
1 |
1 |
1 |
3 |
3 |
1 |
1 |
9 |
5 |
5 |
10 |
10 |
4 |
6 |
9 |
9 |
1 |
3 |
3 |
3 |
3 |
3 |
1 |
9 |
9 |
10 |
10 |
2 |
8 |
9 |
9 |
1 |
1 |
1 |
1 |
1 |
3 |
1 |
9 |
9 |
10 |
10 |
2 |
8 |
8 |
8 |
9 |
9 |
9 |
9 |
1 |
1 |
1 |
9 |
5 |
10 |
10 |
10 |
10 |
10 |
10 |
10 |
10 |
10 |
10 |
10 |
10 |
10 |
10 |
10 |
10 |
栅格转矢量处理步骤;
1)分层次边界拓扑搜索模型:
栅格转矢量算法研究的问题是,如果有一块像元类型或像元值(或像元值在一定范围内)完全相同的区域(可以是任意形状),那么与该区域相邻的所有其他像元,其像元类型或像元值(或像元值不在那个范围内的像元)就一定与这块区域不同;如何用一条矢量线,将这个区域处于边缘位置上像元,和与之相邻的所有像元分割开来,并且这条矢量线还要将这块区域完全包围起来,形成一个封闭的多边形;并且在这个多边形中还不能出现线段交叉、重复等情况,同时这个多边形还应该具有完整的拓扑关系,如包容、被包容等拓扑关系。
针对栅格转矢量问题,本申请提出了基于FPGA构建的分层次栅格转矢量处理方法,下面进行步骤描述。
栅格数据中的一个像元就是对应于地表上的一个二维正方形区域(也有矩形的),该矩形的四条边,就是此像元与其他相邻像元的分界线;对于一个由3*3像元组成的像元矩阵来讲,处于矩阵中心的像元,称之为中心点像元,在中心点像元周围还分布有八个像元。
从拓扑关系上来讲,与中心点像元共同拥有分界线的相邻像元,只有位于中心点像元的上、下、左、右四个像元;这四个像元称为(边)相邻像元。与此中心点像元相关的像元,还有位于正方形四个顶点上的四个像元,这四个像元与中心点像元共同拥有正方形的四个顶点坐标,这四个像元称为点相邻像元。
从中心点像元与相邻像元的关系中可以看出,在进行栅格转矢量时,既要考虑(边)相邻像元之间共用分界线的问题,还要考虑点相邻像元可能出现的不同情况;一个中心点像元与周围八个像元间所构成的排列组合情况,将会是一个非常庞大和极其复杂的相邻关系组合,这也是现有栅格转矢量技术所共同面临的一个共同技术难题。
如果在栅格数据中,如果有一块像元类型或像元值(或像元值在一定范围内)完全相同的区域(可以是任意形状),将这个区域的像元当作一个独立数据层;那么与该区域相邻的所有像元,他的像元类型或像元值(或像元值不在那个范围内的像元)就一定不同,将所有这些相邻像元都当作一个相邻数据层;依据上述分层次处理的技术路线,通过将独立数据层与相邻数据层间的分界线都提取出来,连接成一个个封闭多边形,达到栅格转矢量的目的,是本申请的一个核心技术,即分层次栅格转矢量。
由于采用分层次的栅格转矢量方法,使得本申请具有一次只对一种或几种像元类型或像元值(或像元值在一定范围内)进行栅格到矢量的转换,突破了一次只能对栅格数据进行全部转换的传统限制,他是本发明的一个突出特点。
采用分层次的进行栅格转矢量的优点有:一、彻底的简化了栅格数据像元间的相邻关系;二、避免了矢量化后出现的多边形相互交叉、重复、空洞、悬挂线等拓扑关系不完整和错误的情况;三、该算法特别适合于超大数据量、栅格数据像元关系极其复杂的栅格数据处理;四、可以对栅格数据中的某些指定的属性类型进行栅格转矢量操作,而不需要全部进行矢量化,可以极大的提高他的应用领域和转化效率;五、由于分层次后栅格数据拓扑关系简单,算法简单清楚,特别适合于使用硬件电路技术实现栅格转矢量;及使用并行计算、集群计算、网格计算、云计算等高性能计算平台中实现栅格转矢量技术。
针对如何将独立数据层与相邻数据层间的分界线提取出来的问题,本发明提出了边界拓扑搜索模型方法,该方法采用3*3像元矩阵进行描述,按照顺时针方向从与中心点像元上部相邻的像元开始、依次向右侧相邻像元、下部相邻像元和左侧相邻像元的顺序,分别将中心点像元与四个相邻像元进行比较计算,看他们间的属性值或像元值是否相同,来决定中心点像元与四个相邻像元间是否存在分界线,如果不同,表示有分界线,用1来表示,如果相同,表示没有分界线,用0来表示。3*3像元矩阵定义见表3所示。
表33*3像元矩阵定义
0a |
0b |
0c |
1a |
1b |
1c |
2a |
2b |
2c |
为了便于描述算法,对3*3矩阵中的行列像元数据进行如下定义:
第一行像元数据分别定义为:0a,0b,0c;第二行为1a,1b,1c;第三行为2a,2b,2c。
第一列像元数据分别定义为:0a,1a,2a;第二行为0b,1b,2b;第三行为0c,1c,2c。
在3*3像元矩阵的中心位置上的像元,称为中心点像元1b,其像元位置在矩阵的中心位置(1,1)。相对于该中心点像元,矩阵的第一行位于中心点上方,称为上部;矩阵的第三行位于中心点下方,称为下部;矩阵的第一列位于中心点的左侧,称为左侧;矩阵的第三列位于中心点的右侧,称为右侧。
与中心点像元相邻的四个像元,按照顺时针顺序计算的四个像元分别为:0b、1c、2b和1a。
将中心点像元与四个相邻像元的比较计算结果,组成一个四位编码,即节点编码;用来描述中心点像元与四个相邻像元间分界线的分布情况。边界拓扑搜索模型计算产生的节点编码表见表4所示。
将中心点像元与四个相邻像元的比较计算结果,组成一个四位编码,即节点编码;用来描述中心点像元与四个相邻像元间分界线的分布情况。边界拓扑搜索模型计算产生的节点编码表见表4所示。
表4边界拓扑搜索模型计算产生的节点编码表
从表3中可以看到,节点共有16种类型,节点编码从0000到1111;
节点编码为0000时,表示中心点像元与四个边相邻像元的相同,说明此像元不是边界节点;节点编码为1111时,中心点像元与四个边相邻像元的都不相同,说明此像元是一个独立节点,此像元可以独自形成一个封闭多边形;而节点编码从0001到1110的所有节点,是从包含一条边界线到三条边界线的一个排列组合情况。
虽然节点类型有很多种(15种),但归纳起来其开始方向和结束方向相对于节点来说,只有上部向右型、右侧向下型、下部向左型、左侧向上型顺时针排列的四种类型。
结束方向与相邻节点的开始方向,节点间相互连接的指向性见图3、图4、图5、图6所示。
由于边界节点是采用具有指向性的边界拓扑搜索计算模型计算产生的,所以一个节点的构成是由:节点的开始方向、结束方向、和几个坐标点组成的一条具有指向性的线段;并且在节点间相互连接时,也必须符合指向性所限定的两个方向中的某一个、才能将两个节点连接起来。同时在节点间相互连接时,可以是以结束方向连接开始方向,也可以是以开始方向连接结束方向的一个双向连接指向性,节点的双向连接指向性保证了独立数据层的所有边界节点能够形成一个首尾衔接的封闭多边形。
从图3、图4、图5、图6中可以发现,一个节点的结束方向,正好指向与之相连节点的开始方向;而节点的结束点坐标,也是与之相连节点的开始点坐标,这个坐标点是两个节点间相互连接的一个共用坐标点。
节点间的相互连接,在连接方向和连接点(坐标点)的唯一性,保证了栅格数据和矢量数据在空间位置对应关系上的精准度和相互间的可还原性。同时他也保证了由这些节点形成的多边形,其拓扑关系具有完整性,不会在多边形中出现重叠、相交等线段连接错误;同样在拓扑关系上也不会出现相交、重叠、包容等错误,及拓扑关系不完整的情况,为多边形搜索和创建多边形拓扑关系奠定了基础。同时通过节点的指向性信息,在对多边形进行搜索时,可以极大的提高运算速度和搜索效率。
节点坐标(x,y),采用栅格数据中的一个的像元相对大小来表示,这样在进行多边形搜索时会更方便一些,因为他们都是一个像元大小的整倍数。
中心点像元b1(n,m)的四个顶点坐标按照边界拓扑搜索模型要求按顺时针顺序排列。
1、左上角坐标:n,m; 2、右上角坐标:n+1,m;
3、右下角坐标:n+1,m+1; 4、左下角坐标:n,m+1。
节点(n,m)的结束方向类型与相邻节点的开始方向连接类型及位置坐标关系如下:
上部向右型:
节点1000的结束点坐标为(n,m+1),与节点1000相连接的节点开始方向有1000或0001;连接节点的开始坐标为(n,m+1);
右侧向下型:
节点0100的结束点坐标为(n+1,m+1),0100相连接的节点开始方向有0100或1000;连接节点的开始坐标为(n+1,m+1);
下部向左型:
节点0010的结束点坐标为(n,m+1),0010相连接的节点开始方向有0010或0100;连接节点的开始坐标为(n,m+1);
左侧向上型:
节点0001的结束点坐标为(n,m),0001相连接的节点开始方向有0001或0010;连接节点的开始坐标为(n,m);
采用边界拓扑搜索模型进行边界节点计算时,需要将栅格数据中的每个像元,都作为中心点像元,同时读取中心点像元和四个相邻像元进行比较计算,确认每个中心点像元是否为边界节点,对栅格数据进行全遍历的一个搜索计算过程。
这也是要求对栅格数据进行扩展的根本目的,扩展后的栅格数据在1,1位置上的像元,对应于原栅格数据0,0位置上的像元;而扩展后的栅格数据N-1,M-1位置上的像元,就是原栅格数据N,M位置上的像元;在对扩展后的栅格数据进行全遍历时,从1,1位置像元开始到N-1,M-1位置像元结束,就达到了对原栅格数据的全遍历,并且原栅格数据处于四周边缘位置上的像元,也全部成为了中心点像元;在依据边界拓扑搜索模型进行边界节点计算时,就不需要对处于四周边界上是像元进行条件判别和分支处理,达到简化算法和提高效率的目的。
2)使用FPGA器件构造节点提取电路的可行性:
从分层次边界拓扑搜索模型中可以看出,如果栅格数据很大的话,分层次进行遍历将十分巨大,这也是想采用FPGA器件构造节点提取电路的一个出发点。
要想采用FPGA器件构造节点提取电路,实现分层次边界拓扑搜索模型算法的硬件电路化,就必须能够用硬件电路模拟的方法,设计出能够实现算法的流水线处理技术流程;并且在流程中不能出现跳转计算电路、分支计算电路和与计算机软件程序中出现的函数调用相类似的硬件功能电路,他必须是一个具有按照一个固定的时序,以时钟脉冲为基础,一步一步的用硬件功能电路,去逐步替代算法中的相关功能,直到形成一个按照时序完成所有功能的流水线操作流程;用FPGA构造的节点提取电路流程图见图7所示。
从图3中,可以看到该流程不存在任何跳转计算电路、分支计算电路和与计算机软件程序中出现的函数调用相类似的硬件功能电路,而对于流程中出现的条件转移情况,他不涉及硬件功能电路的参与,只需要在硬件电路中添加相应的时序控制电路,控制这些硬件功能电路的输入输出和是否屏蔽该硬件功能电路的使用,而不对整个流程的时序性造成任何影响,从原理上论证了采用FPGA器件构造节点提取电路的可行性。
在此基础上,可以使用FPGA器件构造节点提取电路,然后选择DSP或CPU作为中央处理器,存储器、接口芯片等其他辅助器件,搭建出一个栅格转矢量处理器,实现分层次边界拓扑搜索模型算法的硬件电路化。
下面将根据用FPGA构造节点提取电路的操作流程图,对栅格转矢量处理器进行设计和分析论证。
栅格转矢量处理器的结构:
针对上述分析,将栅格转矢量处理器,按照功能需要划分为两个部分,一是由DSP或其他CPU构造的中央处理器,二是采用FPGA器件构造的节点提取电路。
对于采用FPGA器件构造的节点提取电路,从操作流程图中可以看出,该电路主要由地址计算单元、节点计算单元、节点保存控制与地址计算单元、循环控制操作单元等组成。
而对于中央处理器部分的基本功能要求有两点,一是对内具有存储器管理、FPGA器件管理、接口控制及其他管理能力;二是对外需要具有与其他计算机设备的通讯能力。栅格转矢量处理器结构框图见图8所示。
对于由DSP或CPU构造的中央处理器,他属于比较常见的硬件电路,在此就不做详细讨论了。
但是中央处理器部分对采用FPGA器件构造的节点提取电路,还有四个必须要做的工作:一是对FPGA器件的初始化;二是设置节点提取电路所需要的基本参数;三是根据分层次转换数量建立启动节点提取电路循环过程;四是当启动的节点提取电路计算完成时,需要将节点数据传回到与之连接的其他相关设备;并且在传送完成后,启动节点提取电路对栅格数据依据新的转换条件进行节点数据提取,直到完成所有转换条件的栅格转矢量操作。
栅格转矢量处理步骤的初始化内容包含:栅格数据参数初始化,节点计算参数初始化两个部分内容。
栅格数据参数初始化主要用于记录栅格数据的基本信息,如栅格数据(指扩展后的栅格数据)存储在存储器中的开始地址、栅格数据的行数、列数;一个像元所使用的字节数量、栅格数据需要转换为矢量数据的转换条件(数组)及转换数量等参数。
节点计算参数初始化用于记录节点计算中需要使用参数信息,及在计算中需要保存的参数、计算结果等信息,并且在节点计算中还需要使用栅格数据参数中数据。
上述参数都使用有FPGA电路构造的寄存器进行保存。栅格数据参数初始化内容见表5所示,节点计算参数初始内容见表6所示。
表6栅格数据参数初始化内容
序号 |
参数名称编码 |
参数名称 |
备注 |
1 |
SGSJ_KSDZ |
栅格数据在存储器中的开始地址 |
|
2 |
N |
栅格数据的行数 |
|
3 |
M |
栅格数据的列数 |
|
4 |
XY_ZJS |
栅格数据像元所占字节数 |
|
5 |
ZHSL |
栅格数据转换矢量数据的类型数量 |
|
6 |
ZHTJ(1,ZHSL) |
每种栅格转矢量的转换条件数据 |
|
表5栅格数据参数初始化内容
序号 |
参数名称编码 |
参数名称 |
备注 |
1 |
SGSJ_KSDZ |
栅格数据在存储器中的开始地址 |
|
2 |
N |
栅格数据的行数 |
|
3 |
M |
栅格数据的列数 |
|
4 |
XY_ZJS |
栅格数据像元所占字节数 |
|
5 |
ZHTJ(1) |
当前栅格转矢量的转换条件数据 |
|
6 |
KS_H(n) |
节点计算中中心点像元的开始位置-行 |
1 |
7 |
KS_L(m) |
节点计算中中心点像元的开始位置-列 |
1 |
8 |
H_XHCS |
节点计算中的行方向循环次数 |
N-2 |
9 |
L_XHCS |
节点计算中的列方向循环次数 |
M-2 |
10 |
DQJS_HS(n) |
节点计算中当前中心点像元的位置-行 |
n |
11 |
DQJS_HS(m) |
节点计算中当前中心点像元的位置-行 |
m |
12 |
JD_KSDZ |
计算出的节点保存的开始地址 |
|
13 |
JD_SL |
计算出的节点数量 |
|
14 |
JD_ZJS |
每个节点需要占用的字节数量 |
|
2、节点提取步骤;
在节点提取电路设计中,将依据图4栅格转矢量处理器结构框图、图3 FPGA构造的节点提取电路流程图、对节点提取电路进行详细设计。
从FPGA构造的节点提取电路流程图中可以看到,在进行节点提取计算时,其核心问题是如何获取参与节点计算的五个像元,及分层控制、循环控制等问题,对于计算结果-节点有效性判别和保存等则属于辅助性问题。
通过分析节点提取电路主要由:地址计算单元、节点计算单元、节点保存控制与保存地址计算单元,循环控制操作单元这些硬件功能电路所组成的。
地址计算控制器单元:
在节点提取电路中,正确获取需要进行计算的中心点像元和四个相邻像元,是节点提取电路的第一步,下面介绍地址计算控制器单元的设计。
地址计算控制器单元主要包括有:五个地址计算器、五个地址寄存器、及时钟控制控制电路等组成。地址计算控制器单元框图见图9所示。
五个地址计算器都是具有五个参数输入端口的计算器,计算器的计算结果输出给五个地址寄存器,通过五个地址寄存器的输出地址值,去获取参与节点计算的像元。
地址计算器的计算公式如下:
0b=SGSJ_KSDZ+(m-1)*M*XY_ZJS+n*XY_ZJS
1c=SGSJ_KSDZ+m*M*XY_ZJS+(n+1)*XY_ZJS
2b=SGSJ_KSDZ+(m+1)*M*XY_ZJS+n*XY_ZJS
1a=SGSJ_KSDZ+m*M*XY_ZJS+(n-1)*XY_ZJS
1b=SGSJ_KSDZ+m*M*XY_ZJS+n*XY_ZJS
五个地址计算器的输入端都使用相同的信号源,他们是:SGSJ_KSDZ栅格数据在存储器中开始地址,n和m是节点计算中当前中心点像元的行列位置,M是栅格数据的列数,XY_ZJS是栅格数据中每个像元所占字节数,而每个计算器所依据的计算公式是不同的。
而五个地址计算器的输出端都对应五个可初始化赋值的地址寄存器,地址寄存器的输出对应地址总线,供获取五个像元数据时的寻址使用。
地址计算控制器单元的执行过程是按照时钟控制电路的时序进行的。参与节点计算的五个像元地址计算完成后,进入节点计算单元。
节点计算单元(分层计算):
节点计算单元由四个节点计算比较计算器、四个节点计算触发器、一个四位编码器、一个节点计算结果寄存器、一个节点计算结果读写信号输入端组成,节点计算单元框图如图10所示。
四个节点计算比较计算器用于节点计算,他们的两个输入端是按照边界拓扑搜索模型计算的顺序要求进行安排的,他们是由1b-0b,1b-1c,1b-2b,1b-1a组成四组,分别进行比较计算。
四个节点计算比较计算器的输出端连接到四个节点触发器的输入端,四个节点触发器的输出初始状态为0,当两个像元相同时输出0,节点触发器输出状态不变;当两个像元不同时,节点计算比较计算器输出1,节点触发器输出状态发生翻转,节点触发器输出为1;
四个节点触发器的输出端连接到四位编码器寄存器的四个输入端,形成节点编码,节点编码器寄存器的输出端连接到计算结果-寄存器。
计算结果-寄存器用于记录计算时的行列位置n、m和节点编码。在计算结果-寄存器上还有一个用于控制计算结果-寄存器进行读写的控制端,读写控制由节点保存控制单元进行控制。
节点保存控制单元:
节点保存控制单元由:节点保存地址计算电路、节点有效性检查电路和条件转换分层控制电路、节点读写控制电路四部分组成。节点保存控制单元框图见图11所示。
1、节点保存地址计算电路由:节点地址计算器、节点保存地址寄存器组成。
节点地址计算电路是根据JD_KSDZ节点存储的开始地址、JD_SL节点数量计数器(初始值=0)和JD_ZJS每个节点所占用的字节数进行计算的,JD_DZ节点地址计算公式如下:
JD_DZ=JD_DQDZ+JD_SL*JD_ZJS
节点地址计算器的计算结果输出到节点保存地址寄存器,供保存节点时使用。
2、节点有效性检查电路由4输入或门电路组成。
4输入或门电路的四个输入端连接节点计算单元的四个触发器的输出端(节点编码),如果节点编码>0,或门输出1,表示节点有效。
3、条件转换分层控制电路由:一个比较计算器、一个触发器组成。
比较计算器的两个输入端连接1b像元和ZHTJ(n)转换条件像元,当两个像元相同时,输出0;当两个像元不同时,输出1。比较计算器的输出端连接触发器,当比较计算器的输出为0时;触发器输出为0;相反,则触发器输出为1.触发器输出为1表示中心点像元1b和ZHTJ(n)转换条件像元相同,这个节点提取计算有效。否则说明这个中心点像元1b不符合转换条件,不需要计算节点。
4、节点读写控制电路由:一个两输入与门和一个触发器组成。
与门电路的两个输入端,分别连接条件转换分层控制电路的输出端和节点有效性检查电路的输出端,当两个输入端都为1时,与门输出为1;否则与门输出为0。
与门的输出端连接一个触发器的输入端,与门输出为0时,触发器输出为0;与门输出为1时,触发器输出为1。
触发器输出为1,表示节点符合分层转换条件,并且节点也是一个有效节点。可以对此节点进行读写操作,否则禁止对此节点进行读写操作。
5、节点数据的读写操作:
写操作是将节点计算时的产生的行列位置n、m和节点编码写入到计算结果-寄存器中,供保存节点数据时使用。
读操作是将计算结果-寄存器中的节点数据读出,保存到栅格转矢量处理器的存储器中的指定存储地址时的操作,这个存储地址由节点保存地址计算电路产生。
6、循环控制操作单元:
在循环控制操作单元中包含有行循环控制操作单元和列循环控制操作单元两部分。循环控制操作单元框图见图12所示。
从图可以看出,行列循环控制操作单元是由两个行列累加寄存器、两个行列比较计算器、和两个触发器及触发器复位时序控制等操作控制电路组成。
行循环控制操作单元是在节点保存控制与计算单元时钟操作周期结束后启动的,他的主要操作内容是将当前行累加寄存器的值+1,指向下一个中心点像元,为提取下一个节点做准备;在对当前行累加寄存器+1操作后,启动当前行累加寄存器与行循环次数N-1的比较计算器,判断当前行累加寄存器是否完成一个行的循环周期;如果没有达到循环次数,继续行循环。
如果循环次数=N-1,即已经完成一个行循环周期,则触发器2翻转,当前列累加寄存器执行+1操作,同时设置当前行累加寄存器为初始值n=1;
当前列累加寄存器执行+1操作后,启动当前列累加寄存器与列循环次数M-1的比较计算器,如果没有达到循环次数,继续行循环。
如果循环次数=M-1,即已经完成对栅格数据的全遍历操作,结束节点提取电路对一个转换条件转换操作。等待栅格转矢量处理器设置转换参数,启动依据转换条件的下一个层次的节点提取电路的流水线操作。
在进行行列循环时,行列的循环次数分别为N-2和M-2,但是在进行循环次数比较计算时,当前行列累加寄存器是采用先+1,然后判断循环次数的方式,所以需要将行列的循环次数分别+1,即行列循环次数分别变为N-1和M-1,否则在进行行和列的方向循环时,都将缺少一次循环过程。
节点提取的并行计算步骤;
如果FPGA硬件资源、特别是存储器资源足够充足的情况下,可以在栅格转矢量处理器中设置多个节点提取电路,依据不同的转换条件,启动节点提取电路,同时对栅格数据进行不同层次的节点提取操作,实现超高速的栅格转矢量操作。
多边形搜索计算步骤;
当节点提取电路运行结束时,符合提取转换条件的分层栅格数据,他的边界节点数据已经全部提取完成,下一步需要将节点数据通过搜索计算转化为多边形结构数据,在多边形的构建中,是通过多边形搜索控制和调度流程,来管理和调度在多边形搜索计算并行计算过程。
当启动多边形搜索计算流程时,也需要建立一个针对多边形搜索的并行计算资源使用情况登记表,记录启动并行计算资源的数量、运行状况、多边形序号、是否接收节点、非正常退出等信息。用来管理和监控多个多边形搜索计算的并行计算流程。
多边形搜索控制与调度流程步骤;
多边形搜索控制与调度流程(简称调度与控制流程)。是一个从节点数据中读取节点数据操作,分发给多边形搜索计算流程(简称搜索计算流程);同时接收从搜索计算流程中返回的计算结果、运行状态、启动创建多边形矢量数据流程(简称创建矢量数据流程),并对返回结果和状态进行处理的一个循环操作流程。
在调度与控制流程启动时,同时启动一个搜索计算流程,并将从节点数据中读取的第一个节点数据,分发给这个搜索计算流程,此流程将返回接收节点信息,流程处于等待接收节点数据状态。继续从节点数据中读取节点数据(包括第二个节点数据),分发给已经启动并且处于等待状态的搜索计算流程,如果这个节点数据满足多边形搜索条件,返回接收节点信息和流程处于等待接收节点数据状态。多边形搜索调度与控制流程见图13所示。
节点分发控制步骤;
如果这个节点不满足多边形搜索条件,返回不接收节点信息和流程处于等待接收节点数据状态。
在控制与调度流程进行节点数据分发时,如果搜索计算流程有处于正在运行状态的情况时,则需要等待此流程运算结束,处于等待状态,将节点数据分发给此流程。
在进行节点数据分发时,必须要保证每个已经启动的多边形搜索计算流程,都必须接收分发的节点数据,并返回信息。
如果出现有搜索计算流程没有接收分发的节点数据的情况,很有可能出现此节点数据是某个搜索计算流程中的节点,而没有添加到这个流程中,却新启动了一个搜索计算流程,这样将会造成当节点数据中已经没有节点数据时,还有处于启动状态的搜索计算流程存在,即此流程的多边形没有形成封闭多边形,需要在节点遍历完成后,需要对这些没有闭合的多边形进行连接处理,将没有闭合的多边形全部形成闭合多边形,完成多边形的搜索计算。
上述情况在对边界节点提取采用分组并行计算时,每组都有可能出现这种情况,在分组进行多边形搜索计算后,都需要进行多边形搜索完成后的封闭处理,将那些没有封闭的多边形合并为封闭多边形,完成节点数据的多边形搜索计算。
返回信息处理步骤;
1、只有一个多边形搜索计算流程(简称搜索计算流程)返回接收节点信息,不作任何处理。
2、当调度与控制流程发现,所有已经启动的搜索计算流程都返回不接收此节点信息时,证明此节点不属于任何一个已经启动了的搜索计算流程中的多边形,需要启动一个新的搜索计算流程,并将此节点数据分发这个新流程。
3、当出现两个多边形搜索计算流程同时接收这个节点的情况时,证明此节点满足这两个多边形搜索计算流程中的多边形搜索条件,即这个节点将两个多边形连接成为一个多边形,需要对这两个多边形搜索计算流程合并为一个流程;其操作内容包括:将一个多边形搜索计算流程中的节点数据添加到另一个多边形搜索计算流程中,同时进行多边形面积、最大范围等相关计算。合并操作后还需要检查这个合并后的多边形是否封闭,多边形封闭的条件是他的开始坐标等于结束坐标;如果多边形封闭,则创建一个多边形矢量数据,并且关闭这两个多边形搜索计算流程。如果多边形不封闭,保留添加了节点数据的多边形搜索计算流程,关闭另外一个多边形搜索计算流程。
由于节点是依据边界拓扑搜索模型计算产生的,节点的拓扑信息决定了他在进行多边形搜索计算时,不会出现两个以上流程接收同一个节点的情况。
返回搜索完成,即这个多边形封闭,则创建一个多边形矢量数据,并且关闭这两个多边形搜索计算流程。
多边形搜索计算流程步骤;
多边形数据结构:
多边形数据结构是一个包含有:多边形图形信息和多边形搜索信息两部分内容的数据结构。多边形数据结构见表6。
表6多边形数据结构表
字段 |
类型 |
|
说明 |
多边形编号 |
|
|
生成多边形时产生的顺序编号 |
面积 |
|
|
多边形面积 |
多边形类型 |
|
|
1多边形、0岛 |
像元属性类型 |
|
|
像元值或属性类型 |
坐标点链表 |
|
|
坐标点双向链表 |
岛多边形数量 |
|
|
记录他包含的岛多边形数量 |
Xmin |
|
|
多边形范围 |
Xmax |
|
|
多边形范围 |
Ymin |
|
|
多边形范围 |
ymax |
|
|
多边形范围 |
开始点坐标 |
|
|
多边形的开始点坐标 |
开始方向 |
|
|
多边形开始方向 |
结束点坐标 |
|
|
多边形的结束点坐标 |
结束方向 |
|
|
多边形结束方向 |
多边形图形信息用于记录多边形的面积、最大范围、多边形类型、像元属性类型、及用于记录多边形中所有节点的坐标点链表,此链表为双向链表;
多边形搜索信息用于记录当前状态下,未闭合多边形的首尾位置上的节点的方向和坐标点信息,如多边形的开始节点的开始方向、开始点坐标;和多边形的末端节点的结束方向、结束点坐标信息;这些信息将为多边形搜索下一个与之相连的节点,提供相连节点所需要的方向信息和坐标信息,也为即将搜索到的相连节点是添加到多边形坐标链表的末端,还是插入到多边形坐标链表的开始位置提供明确的指示信息。
多边形搜索流程步骤;
多边形搜索计算流程:是从接收第一个节点数据,根据多边形数据结构的要求,将节点数据添加到多边形数据结构中,形成一条多边形数据记录,返回是否接收节点等相关信息;及继续接收下一个节点信息,通过判断这个节点是否为与这个多边形有连接关系,及返回相关信息的一个循环过程。多边形搜索流程见图14所示。
在流程中根据所接收的节点数据信息,判断此节点是否是这个多边形的后续节点,其过程是分别用此节点的结束方向、结束点坐标与多边形的开始方向、开始点坐标进行判别;及用此节点的开始方向、开始点坐标与多边形的结束方向、结束点坐标进行判别;
接收节点步骤;
如果此节点有一个方向符合节点间相连的指向性关系和坐标点唯一性原则,则此节点是这条多边形中的一个节点,根据这个节点所包含的坐标数量信息,对多边形面积、最大范围进行计算,计算后将多边形图形信息和坐标点记录到这条多边形数据中,同时根据此节点,修改这条多边形数据中多边形的头部和尾部的方向和坐标点信息,即多边形的开始方向、开始点坐标;和多边形的结束方向、结束点坐标;返回接收节点和等待接收节点信息。
不接收节点步骤;
如果此节点的两个方向不符合节点间相连的指向性关系和坐标点唯一性原则,则此节点不是这条多边形中的一个节点,则返回不接收节点和等待接收节点信息。
搜索成功:
如果此节点的两个方向都符合节点间相连的指向性关系和坐标点唯一性原则,则通过此节点将这条多边形的首尾连接在一起了,证明这个多边形已经封闭,不需要为这个多边形继续搜索他的后续节点了。在此同样需要根据这个节点所包含的坐标数量信息,对多边形面积、最大范围进行计算,计算后将多边形图形信息和坐标点记录到这条多边形数据中。
当多边形搜索结束时,将根据所计算的多边形面积值的正负情况,进行多边形类型判断。按照边界拓扑搜索模型的顺时针搜索边界节点的定义,如果面积S>0,说明这个多边形是由一块具有相同像素的外围边界上的像素点构成的多边形,即该多边形是按顺时针方向形成的封闭多边形,他的内部有可能包含有岛多边形,所以该多边形是一个独立多边形;给多边形数据结构中的多边形类型赋值1。反之如果面积S<0,说明这个多边形是在一块相同具有像素的内部边界上的像素点构成的多边形,所以该多边形是按逆时针方向形成的封闭多边形,他一定被某个独立多边形所包容,所以他是一个岛多边形,给多边形数据结构中的多边形类型赋值0。为创建矢量多边形流程创造条件。
返回搜索成功信息。
在多边形搜索过程中需要对多边形的面积和最大范围进行计算,其计算方法分别进行介绍:
多边形最大范围计算步骤;
从建立一条多边形数据第一个种子节点开始,根据节点中的坐标点数量,按照X、Y坐标值逐个进行对比计算,得到多边形的最大范围Xmin,Xmax,Ymin、Ymax;对于后续添加到多边形中的每个节点,同样根据节点中的坐标点数量逐点与多边形的最大范围进行对比计算,一直进行到最后一个使多边形产生闭合的节点为止,完成多边形最大范围的计算工作。
多边形面积计算步骤;
多边形的面积计算与多边形最大范围计算过程中完全相同。同样从建立一条多边形数据第一个种子节点开始,根据节点中的坐标点数量N,计算多边形的面积,其计算公式为:
其中S为多边形面积,初始值为0;Xn、Yn为此节点几个坐标点中某个坐标点的坐标值,Ymax为栅格数据的最大行数N-1。
同样对于后续添加到多边形中的每个节点,根据节点中的坐标点数量逐点进行面积计算,一直进行到最后一个使多边形产生闭合的节点为止,完成多边形面积的计算工作。
创建多边形矢量数据步骤;在完成多边形搜索流程后,启动创建多边形矢量数据流程。创建多边形矢量数据的目的是,为多边形数据结构中的每个岛多边形,找到一个能够包容他的最小独立多边形,找到这个独立多边形后,将岛多边形的坐标点链表中的坐标数据,添加到包容他的独立多边形的坐标点链表的末端,修改独立多边形的面积为:S=S-SD,S为独立多边形面积,SD为岛多边形面积;并给独立多边形的岛多边形数量的属性值+1,他的初始值为0。
重复上述操作直到为所有岛多边形找到包容他的独立多边形为止。创建多边形矢量数据流程见图15所示。
在创建多边形矢量数据流程中,首先对多边形数据按照多边形类型和多边形最大范围进行排序,根据岛多边形的数量建立搜索循环过程,在循环中每次读取一个岛多边形数据,根据岛多边形的最大范围,在独立多边形数据中搜索找到一个能够包容他的独立多边形序列,此序列中的独立多边形从最小独立多边形向逐渐扩大的顺序排列,首先从最小独立多边形开始,判断岛多边形是否被包容,如果被包容,将岛多边形的坐标点链表数据添加到独立多边形的坐标点链表数据中,完成一个岛多边形的搜索;如果不被包容,则在包容他的独立多边形序列中寻找下一个独立多边形进行判断,直到找到一个包容他的独立多边形为止。
重复上述操作,直到为每个岛多边形找到包容他的独立多边形为止,完成创建多边形矢量数据流程。
在找到包容岛多边形的独立多边形时,判断他是否包容岛多边形的方法是,根据岛多边形的开始点坐标,向右做一水平直线,计算该直线与独立多边形在此点右侧产生的交点个数,如果交点个数为奇数,证明独立多边形环绕岛多边形,他包容此岛多边形;如果交点个数为偶数,同样证明独立多边形没有对岛多边形产生环绕,说明此岛多边形没有被这个独立多边形所包容。
创建矢量文件步骤;在创建多边形矢量数据流程结束后,独立多边形与岛多边形的拓扑关系已经建立完成,只需要将多边形矢量数据写入文件就完成栅格转矢量的全部流程和操作了。创建矢量文件流程见图16所示。
在创建矢量文件流程中,首先根据栅格数据所使用的坐标系信息,创建矢量文件和坐标系,然后根据多边形矢量数据中独立多边形的数量,建立循环搜索过程,每次读取一个多边形矢量数量,并按照多边形矢量数据的结构写入到矢量文件中,当将多边形矢量数据中的所有独立多边形矢量数据全部写入到矢量文件中时,完成创建矢量文件流程,结束对栅格数据中一个栅格转矢量条件的全部转换工作。
在将多边形矢量数据写入到矢量文件时,因为栅格数据是经过扩展的,他的像元位置相对原栅格数据,在行和列的位置上还需要对多边形的坐标点都增加了一个像元的位置,需要在转换时对节点的坐标点(X,Y)都-1。
同样坐标点链表中的坐标值,也需要将他的像元行列位置,转化为对应地面投影的坐标系,如栅格数据的每个像元对应于地面的实际距离单位,如栅格数据的一个像元对应地面的尺寸宽为:W=30米,长为:L=30米的固定常数,则需要对坐标点链表中的X值乘像元对应地面的尺寸宽度,即X=(X-1)*W;同样对坐标点链表中的Y值乘像元对应地面的尺寸长度,即Y=(Y-1)*L。
同样对于独立多边形面积,也需要进行转换,一个像元对应地面的面积为:SC=W*L,即面积常数为SC=300平方米,则独立多边形的面积为:S=S*SC.在将独立多边形的面积和坐标点链表数据写入矢量文件前,需要对每个坐标点的坐标值数据和面积值数据进行转换,将转换后的数据写入矢量文件。
矢量文件合并步骤;
如果需要一个包含有所栅格转矢量条件的栅格转矢量文件,则只需将多个矢量文件合并为一个矢量文件即可。
如上所述,对本发明的实施例进行了详细地说明,但是只要实质上没有脱离本发明的发明点及效果可以有很多的变形,这对本领域的技术人员来说是显而易见的。因此,这样的变形例也全部包含在本发明的保护范围之内。