具体实施方式
下面结合附图和具体实施方式对本发明的技术方案作进一步更详细的描述。
本发明公开了一种大量分块地形数据的动态淹没区提取方法、装置及系统。其针对现有技术中的数据量巨大且以多种不同分块形式存储和管理的地形数据进行处理,在处理中可适应不同数据处理装置所具备的不同内存资源条件,增强兼容性。更进一步的,对于提取出的动态淹没区,还可生成地理区域多边形。更进一步的,还可以明确且优化的形式呈现出淹没区的地理范围。
本发明可应用于一服务器主机或其他数据处理装置中,如图1所示为服务器主机的结构示意图。服务器10包括数据处理模块11、内存模块12、数据存储模块13、输入模块14、输出模块15、网络连接模块16。
数据存储模块13中存储有以分块形式存储和管理的分块地形数据集。该数据集记录了DEM数据,具备较大的数据量。该数据存储模块13还可存储多种不同分块形式的分块地形数据集。
如图1A所示为本发明的大量分块地形数据的动态淹没区提取方法运行于数据处理装置11中的流程图。
步骤101,扫描分块地形数据集,为分块地形数据集建立对应的地理空间网格索引表。
在该步骤中,数据处理装置11扫描遍历存储于数据存储模块13中的分块地形数据集,分析所有分块地形数据集,建立与数据集对应的地理空间网格索引表。
请参见图1B所示为地理空间网格索引表的示意图。其中,分块地形数据集以栅格数据集的形式存在。地理空间网格索引表以地理空间网格的形式进行组织。
地理空间网格索引表包括多个网格单元,每个网格单元用于对应记载一个分块地形数据集的参数,每个分块地形数据集记录了一定地理空间范围内的地形单元数据,也就是说,每个数据集包括多个地形单元格数据。而每个网格单元在索引表中的位置则取决于该数据集在地理空间中的实际范围,即,每个网格单元依照对应数据集的空间位置而排列。索引表中的每个网格单元与对应的数据集具有关联关系。同时,索引表支持存在空间范围重叠的数据集(见图1B中C3),以支持不同分区方案和部分重叠的分区方案,也就是说,不同网格单元在空间上有可能被一个以上数据集所覆盖。
每个网格单元记录对应的数据集的参数和分析过程中需要用到的标识位。
网格单元针对分块地形数据集记录以下参数:
a1)空间范围(Extent):即,该分块地形数据集在地理空间中覆盖的范围,其空间范围坐标以矩形方式表示,包括:“左下”和“右上”两个坐标对,以及数据集的空间坐标参考信息;
a2)单元格大小(CellSize):数据集中每个地形单元格在横向和纵向的大小;
a3)空值的标识(NoData):空值的标识方式,如:-9999;
a4)网格单元所对应的数据集代码,即数据集引用信息。
分析过程中需要用到的标识位包括:
b1)完全排除标识位(Excluded):整个数据集不参与计算;
b2)完全包含标识位(Included):整个数据集已被完全包含在计算结果中;
b3)暂时挂起标识位(Suspended):暂时不参与分析过程;
b4)新增淹没地形单元格数(AddedNum):最后一次计算过程中新增的淹没区的地形单元格数量。
本发明中利用该索引表作为移动窗口提取数据集中的数据的中介(详见后述),以准确的定位需要从数据集中提取的信息。
基于地理空间网络,索引表记录了来自不同分块方案的数据集的基本信息,为基于多种不同分区方案的大数据量分块DEM开展淹没区迭代分析、减少IO次数、控制资源消耗等方面提供了基础。
步骤102,根据该数据处理装置的内存资源,设定用于分析该分块地形数据集的移动窗口的大小。
本发明利用移动窗口对数据集进行提取淹没区的处理,基于索引表搜索满足条件的数据集,提取数据集中的地形单元格数据,以进行后续分析。利用移动窗口进行数据处理是本领域的现有技术。而移动窗口的大小需与内存资源相适应,才能保证运行的稳定性与高效率。
在本发明中,移动窗口的大小可根据该数据处理装置的软硬件环境进行设定。移动窗口的大小与最大内存使用量呈2次方正比,而与磁盘的IO次数成2次方反比。增加移动窗口的大小,可以提高运行速度,但同时增加内存的使用量;相反,减小移动窗口,降低了内存的使用量,但由于IO次数的提高,使运行速度降低。因此,用户在该步骤,根据系统运行的软硬件环境,根据需求,设定移动窗口大小。即,利用输入模块14输入移动窗口大小的设定参数,并传送至数据处理模块11,对移动窗口的大小进行控制。
除用户通过输入模块14手动处理外,还可通过一预先存储的对照表而自动设定移动窗口的大小,即,预先存储每一内存条件所对应的最佳移动窗口大小,或,一最佳范围,在服务器10开机检测阶段对内存模块12进行初始化时,即获知该内存模块的参数,并根据该内存模块的参数而自动设定移动窗口的大小。
由于本发明的移动窗口的大小可调节,进而可调节内存使用量和磁盘IO次数,已与数据处理装置当前具备的软硬件条件相匹配,以提高运行的稳定性,同时还可兼容于多种数据处理装置。
步骤103,该移动窗口遍历该索引表,通过该索引表中提取空间范围与移动窗口覆盖的空间范围重叠的分块地形数据集的数据,并根据用户输入的海平面高度变化值,计算淹没区数据。
步骤104,从该淹没区数据中提取矢量形式的淹没区边界。
如图2所示,是本发明的大量分块地形数据的动态淹没区提取方法流程图。步骤103具体包括如下步骤:
步骤1031,该移动窗口遍历该索引表,通过索引表得到移动窗口对应覆盖的分块地形数据集的数据,根据该分块地形数据集之中的地形单元格的高程值、地形类型、周围地形,并根据海平面高度变化值,初始化提取海岸带邻近淹没区。
步骤1032,该移动窗口从多个不同起点沿不同方向,分别遍历该索引表,利用海岸带邻近淹没区,迭代计算淹没区数据。
在一个实例中,步骤1031可通过如下具体实现过程实现(如图2A所示):
步骤1,用户通过输入模块14输入一海平面高度变化值。
步骤2,设定初始移动窗口位置。
设定初始移动窗口位置为全部索引范围的西北角,但并不限于西北角。也可以以其他角作为起始点,但分析方向根据起始点的选择而变化,即以起始点所在空间范围的反方向作为分析方向。
步骤3,根据该索引表提取当前移动窗口覆盖的数据集。
即,移动窗口首先确定其所覆盖的索引表的网格单元,通过网格单元中的数据集引用信息,定位实际数据集,从数据集中提取数据,即被移动窗口覆盖的地形单元格的数据。
步骤4,读取地形单元格数据,填充移动窗口的对应单元。
移动窗口包括多个单元(单元的数目依赖于移动窗口的大小和分块地形数据集的数据分辨率),根据每个单元中心点的地理空间位置,在当前移动窗口所提取到的数据集中,提取位于每个单元中心点的地形单元格的数据,也就是地形高程。
提取过程中顺序分析所提取的数据集是否包括该单元中心点位置的数据,如不包括则转至下一个数据集,直至找到能够提供该位置地形高程的数据集,如找不到满足条件的数据集,则标识该单元为空值,在下面的分析中忽略该单元。
由于索引表包括了数据集的相关参数,故而可保证快速、准确定位需要提取的数据集,进而减少处理过程中的数据量和处理量。
步骤5,分析读取的各个地形单元格数据,从中提取海岸带邻近淹没区,提取方法为依次判断所读取的各个地形单元格数据是否同时满足:
a.当前地形单元格是陆地地形单元;
b.高程小于海平面变化后的高程值(海平面原始高程值+海平面高度变化值);
c.在相邻8个地形单元中存在水域单元。
地形单元格的高程值、地形类型均为数据集中存储的地形高程数据。该地形类型包括陆地地形单元、水域单元等。
本步骤中,依照上述方式,依次判断所读取的各个地形单元格,是否为海岸带邻近淹没区。
条件a、b代表当前的地形单元格是陆地且在海平面变化后将被淹没,条件c用于排除内陆低地的地形单元。
步骤6,记录分析结果。
对于移动窗口单元的分析结果将写回提供高程信息的数据集单元格,也就是记录在DEM数据中。
本发明中,移动窗口的分析结果具备两个不同级别,不同级别的分析结果的存储位置不同。数据集级别的分析结果记录在地理空间网格索引表中,单元格级别的分析结果记录在DEM数据集的单元格中。步骤6所得到的分析结果是针对每个地形单元格的数据,故而存储至分块地形数据集的单元格中。
在本发明中,存储于数据存储单元中的是原始DEM数据的拷贝,以避免分析结果破坏原有DEM数据的缺陷。
步骤7,将完全是水域的数据集和海拔完全高于海平面变化高度(原始海平面高程值+海平面高度变化值)的数据集的“完全排除标识位”设定为true。
步骤8,如窗口位置为整个索引的东南角,则结束计算,否则向东顺序移动“移动窗口”至size-1(“size”为窗口大小)位置,如移动至超出空间范围则南移size-1位置,同时在纬向移至最西位置,然后跳至步骤3,循环执行上述步骤。
通过在一个方向上的一次遍历,得到了海岸带邻近淹没区的数据,作为后续判断淹没区的基础。
步骤1032可通过如下具体实现过程实现,如图2B、图2C所示:
顺序以“东南”、“西北”、“东北”、“西南”的方向进行分析遍历。
第一个分析方向取决于选择起始点位置。即,第一个分析方向是起始点位置的反方向。起始点位置在索引范围的西北角,则以“东南”方向作为分析方向。
分析方向的顺序并不限于所列顺序,但对角方向会取得比较好的效果。即,“东南”方向分析完毕后,进行“西北”方向的分析。步骤1032包括:
步骤A,清零索引表中各数据集的“新增淹没地形单元格数”标志位。
步骤B,在一移动方向上,计算淹没区数据,包括:
1)根据当前移动方向的反方向设定初始移动窗口的位置;
如向“东南”方向移动则设置初始移动窗口在索引范围的西北角;
2)根据地理空间网格索引表提取当前移动窗口覆盖的数据集,但跳过“完全排除标识符”为true或“暂时挂起标识位”为true或“完全包含标识位”为true的数据集;
3)读取地形单元格数据,填充移动窗口的对应单元;
该步骤具体实现方法参照前述步骤4;
4)分析各地形单元格,判断是否为淹没区,判断方法为同时满足:
a.当前地形单元格是陆地地形单元;
b.高程小于海平面变化后的高程值;
c.在移动方向反方向的2个地形单元格中存在淹没区或海岸带邻近淹没区。
本步骤中,依照上述方式,依次判断所读取的每个地形单元格,是否属于淹没区。
条件a、b代表当前的地形单元格是陆地且在海平面变化后将被淹没,条件c用于排除内陆低地的地形单元,并且基于淹没区将是一连贯区域的特点,提高确认淹没区的准确度。
5)将一数据集在步骤4)中新添加的淹没区的单元格个数添加到该数据集的“新增淹没地形单元格数”标志位中,如新增地形单元格数大于0,则修改位于当前移动窗口覆盖范围内,且“暂时挂起标识位”为true的数据集的“暂时挂起标识位”为false,并将该数据集加入当前窗口的分析队列;设定被完全淹没(高程值小于海平面变化后的高程值)的数据集的“完全包含标识位”为true。
在该步骤中,只要移动窗口当前覆盖的区域内存在新增的淹没区,则将移动窗口当前覆盖的暂时挂起的数据集重新进行如步骤4)所述的分析处理,以提高淹没区分析的准确性。
6)记录淹没区分析结果;
淹没区分析结果是单元格级别的数据,故而存储至分块地形数据集的单元格中。
7)如未到达当前移动方向的终点,则根据当前移动方向移动“移动窗口”,然后跳至步骤2),如果达到当前移动方向的终点,执行步骤C。
即,如果当前的移动方向为“东南”方向,则当窗口位置位于整个索引的东南角,结束计算,否则向东顺序移动“移动窗口”至size-1(“size”为窗口大小)位置,如移动至超出空间范围则南移size-1位置,同时在纬向移至最西位置,然后跳至步骤2),循环执行上述步骤。
步骤C,设置所有“新增淹没地形单元格数”标志位为0的数据集的“暂时挂起标识位”为true。
步骤D,判断索引表中的所有网格单元是否均具有“完全排除标识位”或“完全包含标识位”或“暂时挂起标识位”(均为true),如果是,结束分析,如果不是,判断所有移动方向是否遍历结束,如果否,设定下一移动方向,执行步骤A,如果是,结束。
通过上述迭代计算的方法,可得到更加精准的淹没区数据。
步骤104进一步包括如下步骤(如图3所示):
步骤201,在淹没区数据中提取所有边界点,形成边界点序列;
步骤202,利用该边界点序列生成边界多边形;
步骤203,从边界多边形中提取淹没区孤岛,形成矢量形式的淹没区边界。
该步骤201的主要实现步骤在于:
通过地理空间网格索引表提取当前移动窗口覆盖的数据集的地形单元数据;
通过判断当前地形单元格是淹没区的地形单元格且相邻地形单元格中存在非淹没区的地形单元格,则确定当前地形单元格是淹没边界地形单元;
将淹没边界地形单元加入边界点序列。
在一个实施例中,步骤201进一步包括具体的提取步骤如下(如图3A所示):
步骤301,设定初始移动窗口位置。
例如为索引范围的西北角,则移动方向为“东南”方向;
步骤302,根据索引表提取当前移动窗口覆盖的数据集,跳过“完全排除标识符”为true或“完全包含标识位”为true的数据集。
步骤303,将提取的数据对应填充移动窗口。
步骤304,分析各地形单元格,判断是否为淹没边界地形单元。
判断方法为同时满足:a.当前地形单元格为淹没区的地形单元;b.相邻的8个地形单元格中存在非淹没区的地形单元格。
该步骤中,依次分析所提取的各个地形单元格,以确认其是否为淹没边界地形单元。
步骤305,将淹没边界地形单元格加入边界点序列。
加入边界点序列的具体数据包括:该地形单元格的地理坐标(该地形单元格中心点)和所属数据集代码加入边界点序列。
步骤306,如未到达当前移动方向的终点,则根据当前移动方向移动“移动窗口”,然后跳至步骤302,如果到达当前移动方向的终点,执行步骤202。
根据当前移动方向移动的方式可参照步骤8的方式实现。
该步骤提取出了淹没区的边界的节点,为后续显示边界步骤的基础。
步骤202的主要实现步骤在于:
从该边界点序列中取出头部的边界点,基于该边界点采用深度优先的方法不断搜索相邻点,形成树状节点关系图;
从根节点开始,计算每个分支的地理空间长度,选择最长的路径形成该边界多边形;
根据每个节点与相邻两个节点的角度,消除该边界多边形中的冗余节点。
在一个实施例中,步骤202进一步包括具体的实现步骤如下(如图3B所示):
步骤401,从序列中取出队列头部的边界点,采用深度优先的方法从队列中搜索并取出该点的相邻点,以及相邻点的相邻点,直至找不到相邻点,形成一个树状的节点关系图。重复该步骤,形成下一个树状节点关系图,直至队列为空。
步骤402,从每个树状节点关系图形成多边形边界。
在一个实施例中,该步骤的具体做法为:从根节点开始,计算每个分支的地理空间长度(即计算每个叶节点经过树状结构到达根节点经过的距离总和),选择最长的路径形成多边形边界。
步骤403,根据角度阈值,优化多边形节点序列,消除全部冗余节点,执行步骤203。
在一个实施例中,该步骤的具体做法为:计算每个节点与相邻两个节点形成的角度,计算与180度的角度差,判断:
|180-A|<=a(A为角度,a为角度阈值)
如满足该条件则剔除该节点。重复直至所有节点均满足该条件。
步骤203的主要实现步骤在于:
按照面积排序所有边界多边形,形成从大到小的多边形队列;
获取所有边界多边形之间的拓扑包含关系;
将被包含的小区域的边界多边形嵌入大区域的边界多边形,形成大区域边界多边形中的淹没区孤岛,形成淹没区边界。
该步骤实现了优化的边界矢量化提取,能够从分析结果中提取矢量化的淹没区域,而且通过指定的角度阈值,能够在保证区域关键形状的前提下,消除淹没区域多边形的冗余节点,得到代表淹没区域的优化形状。所得到的淹没区边界为地理空间数据形式,其可以输出至后续分析处理模块,作为该分析处理过程的初始信息,也可通过绘制为具体边界图形的方式,利用输出模块15进行视觉化的呈现。根据数据绘制图形为本领域的公知技术,在此不赘述。
在一个实施例中,步骤203进一步包括具体的实现步骤如下(如图3C所示):
步骤501,创建一个空的多边形集合;
步骤502,按照面积,对所有多边形进行排序,形成从大到小的多边形队列;
步骤503,从队列中取出一多边形(多边形A),与集合中的多边形进行拓扑关系分析;
即,如多边形A被集合中某个多边形(多边形B)完全空间包含,则将多边形A内嵌到多边形B中,形成多边形B所代表区域的淹没区孤岛;如没有在集合中找到与多边形A存在拓扑包含关系的多边形,将当前多边形A加入集合。
拓扑关系分析为GIS技术中的成熟的技术,在此不赘述。
步骤504,判断队列是否为空,如果否,执行步骤503,如果是,将多边形集合进行输出。
通过上述步骤可得到优化的矢量形式的淹没区边界,能够得到在一整片淹没区中存在的高出海平面的地区,使得淹没区边界的数据更加精确。同时,可利用输出模块15向用户呈现该矢量形式的淹没区边界,即,将淹没区边界的数据绘制为视觉化的边界图形。或者,将淹没区边界的数据输出至后续分析处理模块,作为该分析处理过程的初始信息。
所得到的矢量形式的淹没区边界,还可通过网络连接模块16传输至其他数据处理装置进行远程显示。
本发明进一步公开了一种大量分块地形数据的动态淹没区提取系统。该系统设置于服务器10的数据处理模块11中,如图4所示,为其结构示意图。
大量分块地形数据的动态淹没区提取系统600用于对数据存储模块13中以分块形式存储的分块地形数据集进行分析。
其中包括索引表设立模块601,用于扫描分块地形数据集,建立与分块地形数据集对应的地理空间网格索引表;
移动窗口设定模块602,用于根据该数据处理装置的内存资源,设定用于分析该分块地形数据集的移动窗口的大小;
其包括两种实施方式,一种为根据该数据处理装置的内存资源,接收来自输入模块14的设定参数,该设定参数设定了用于分析该分块地形数据集的移动窗口的大小;另一种为根据预先存储的对照表,根据该数据处理装置的内存资源,自动获取移动窗口的大小。
淹没区计算模块603,利用该移动窗口遍历该索引表,通过该索引表中提取空间范围与移动窗口覆盖的空间范围重叠的分块地形数据集的数据,并根据用户输入的海平面高度变化值,计算淹没区数据;
淹没区边界提取模块604,用于从该淹没区数据中提取矢量形式的淹没区边界。
该索引表以网格的形式实现,该网格中的每个网格单元对应一个分块地形数据集,每个网格单元在该网格中的位置对应于该分块地形数据集的地理空间范围,每个网格单元记录该分块地形数据集的参数和分析过程中用到的标识位。
所应用到的参数与标识位参见对方法部分的说明。
淹没区计算模块603进一步包括:一初始化模块6031以及一迭代计算模块6032。
初始化模块6031用于具体实现步骤1-8。
迭代计算模块6032用于具体实现步骤A-D。
其中,该初始化模块6031用于供该移动窗口根据所覆盖的该分块地形数据集之中的地形单元格的高程值、地形类型、周围地形,并根据海平面高度变化值,初始化提取海岸带邻近淹没区;
该迭代计算模块6032用于供该移动窗口从多个不同起点沿不同方向,分别遍历该索引表,利用海岸带邻近淹没区,迭代计算淹没区数据。
淹没区边界提取模块604进一步包括:一边界点提取模块6041,一边界多边形生成模块6042,一淹没区孤岛提取模块6043。
该边界点提取模块6041用于在淹没区数据中提取所有边界点,形成边界点序列;
该边界多边形生成模块6042用于利用该边界点序列生成边界多边形;
该淹没区孤岛提取模块6043用于从边界多边形中提取淹没区孤岛。
所述该边界点提取模块6041用于通过地理空间网格索引表提取当前移动窗口覆盖的数据集的地形单元格数据;通过判断当前地形单元格是否是淹没区的地形单元格且相邻地形单元格中存在非淹没区的地形单元格,确定是否是淹没边界地形单元;将淹没边界地形单元加入边界点序列。
所述该边界点提取模块6041还具体用于执行步骤301-306。
所述边界多边形生成模块6042用于从该边界点序列中取出头部的边界点,基于该边界点采用深度优先的方法不断搜索相邻点,形成树状节点关系图;从根节点开始,计算每个分支的地理空间长度,选择最长的路径形成该边界多边形;根据每个节点与相邻两个节点的角度,消除该边界多边形中的冗余节点。
所述该边界点提取模块6042还具体用于执行步骤401-403。
该淹没区孤岛提取模块6043用于按照面积排序所有边界多边形,形成从大到小的多边形队列;获取所有边界多边形之间的拓扑包含关系;将被包含的小区域的边界多边形嵌入大区域的边界多边形,形成大区域边界多边形中的淹没区孤岛,形成淹没区边界。
该淹没区孤岛提取模块6043还具体用于执行步骤501-504。
(1)通过地理空间网格化索引方法,能够支持数据量大(远超过内存容量)且以数据分块形式存储和管理的地形数据;
(2)通过控制“移动窗口”的大小,能够使该方法适应于不同内存资源条件的软硬件环境;
(3)通过优化的边界矢量化提取方法,能够从本发明的分析结果中提取矢量化的淹没区域,而且通过指定的角度阈值,能够在保证区域关键形状的前提下,消除淹没区域多边形的冗余节点,得到代表淹没区域的优化形状。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。