汇水盆地算法的研究与实现

2022-06-29 06:08杨龙渊王星捷
电子设计工程 2022年12期
关键词:盆地高程算法

杨龙渊,王星捷,黄 平

(1.成都理工大学工程技术学院,四川 乐山 614007;2.四川经准检验检测集团股份有限公司,四川广安 638500)

汇水盆地是地球表面以分水岭为边界的自然降水汇集区域[1]。汇水盆地表示的是在分水岭作用下,自然降水所形成的地表径流汇集范围。自然水系流域的形成严格受汇水盆地范围的制约。汇水盆地模型以数字模型方式对汇水盆地进行描述,是矿产资源调查、预测与评价工作不可缺少的基础数据之一。

在国内对于汇水盆地的生成大多直接利用地理信息软件平台来识别和建立汇水盆地模型,如:洪明海、汪仕伟等在文献[2]中利用地理信息软件对断面进行了汇水盆地及面积提取;张祥辉、张昌民等在文献[3]中利用地理信息软件平台生成了苏干湖盆地汇水盆地;匡增桂等在文献[4]中用汇水盆地对水合物进行了研究。

文中采用VC++语言为开发语言引用开源栅格空间数据转换库(Geospatial Data Abstraction Library,GDAL),实现了汇水盆地模型的生成,并对主要算法进行了研究。整个算法分为数据输入模块、DEM 生成模块、流向流量模块、河网生成模块以及数字盆地模块。

1 算法设计

文中算法先将高程数据生成TIN 三角网,然后生成DEM 图,通过DEM 图得出研究区域的水流方向以及水流量,再通过水流方向初步得出汇水盆地模型,同时将水流量按阈值提取出栅格水系网,最后由水系网以及水流方向综合生成低级别汇水盆地模型(多级汇水盆地模型),具体算法设计如图1 所示。

图1 汇水盆地算法设计

2 数据输入模块及DEM生成模块

2.1 数据输入处理

数据输入包括点数据与线数据,点数据与线数据的加载利用gdal 库来读取矢量高程数据,然后将实际地理坐标转化为屏幕坐标显示到电脑屏幕上。世界坐标向屏幕坐标转化公式如下:

其中,x、y是屏幕坐标,X、Y是世界坐标,minX、maxY是最小、最大世界坐标。

2.2 TIN三角网生成

传统的算法是通过凸包的Delaunay-TIN 生成算法生成TIN 三角网,该算法方便实现,但是速度较慢。文中利用改进的Delaunay 三角剖面算法对TIN三角网算法进行优化[5-6]。

基本的思路:生成凸包、检测凸包、向凸包中生成Delaunay 三角形,再检测凸包和三角形。其中,在第三个步骤又将点集划分为多个区域来构成三角网,然后采用重心九格检测法检测三角形是否为Delaunay 三角形。

2.3 三角网转DEM

假设有三角网中的一个三角形ABC,三角网高程关系如图2 所示,三角网转DEM 需要首先判断插值点P是否在三角形内[7],根据混合积计算如下:

图2 三角网高程关系

当T1、T2、T3 同时满足大于或等于0 时,证明P点位于三角形内部。即C、P点位于向量左侧;B、P位于向量右侧;A、P位于向量向量左侧时,P点位于三角形内部。

其次,当计算该点在DEM 中的插值时,利用了三点式平面方程:

给定XX、YY值可确定一个ZZ值,从而得出该点的高程值。具体步骤如下:

1)以高程点的最大X、Y值作为DEM 的宽和高,DEM 初始化高程为0。

2)遍历DEM,判断每个DEM 像元位置是否在该三角网的三角形中,是则进入步骤3),否则继续步骤2)。

3)通过插值得出该位置的像元值,返回步骤2)。

通过以上算法实现三角网转DEM。

2.4 填 洼

洼地在自然界的地形中比较少见,但在生成DEM高程的过程中,由于数据的输入错误,高程内插值精度以及网格单元内高程信息取平均往往会出现伪洼地[7-8]。填洼对处理伪洼地、使流域水系顺畅连通方面具有重要作用。

文中采用M&V 算法,该算法于1993 年由Moarn和Vezina 提出,2001 年由Olivier Planehon 和Frederic DarbouX 实现。王建平等在《一种新的DEM 填洼处理算法》中详细论述了实现填洼的两种算法,即J&D算法以及M&V算法,并比较了两种算法之间的差异。

M&V 算法思路:除边界外初始化一个极大高程,将原始高程覆盖,然后通过迭代新的高程进行逐步收敛,迭代结束后新高程必须满足大于或等于原始高程,且任意一点高程都有一条递减的路径通向边界[8-9]。

3 流向流量模块

3.1 流向生成

流向的生成采用了D8 算法,该算法假设每个单元格的水流方向有8 个,即流入与之相邻的8 个单元格,它通过最陡坡度法来确定水流方向。在3×3的DEM 网格中,计算中心网格与八方向网格间的高程落差,取高程落差最大的单元格方向为中心单元格的流出方向[1],如图3 所示。

图3 八方向及其对应像元值

具体步骤:

1)遍历每一个高程像元,进入步骤2)。

2)以步骤1)中像元为中心像元,遍历八方向上的像元值,如图3 所示,如果像元不是无意义像元,则计算中心像元与该方向上像元的高程差并保存,进入步骤3)。

3)取8 个高程差数据遍历,取最大值方向对应数,写入对应位置的流向数据像元,返回步骤1)。

在步骤3)中,需要考虑一个情况,如果碰到计算得出的流向是流向中心像元,数据表现为小于零的情况,如果按最大值写入流向数据,则会导致结果与实际不符,此时将该像元值设为-1,并在后续进行特定处理。

每个像元值的生成公式如下,选择最大值的方向为数值输入像元。

3.2 流量生成

流量数据利用流向数据追踪水流方向,在水流方向上将每个DEM 单元格进行累加。

具体步骤:

1)遍历每一个流向数据,如果流向数据不为无,则进入步骤2)。

2)如果像元值为-1 和无值,则返回步骤1);如果是其他值则对指向像元位置对应的流量像元值加1,将中心像元移动至上游像元,继续进行步骤2)。

代码设计如下:

4 河网生成模块

河流链接是形成多级汇水盆地模型的关键数据,因为一级汇水盆地区域是一个比较大的流域,在很多水文分析中,需要将大的流域盆地划分为更小的流域单元进行分析,因此,需要河流链接按大的流域进行划分,随后进行流域的分割。

流域的分割是确定河流出水口即汇水点的位置。如果没有出水点的栅格或矢量数据,可以采用河流连接数据作为汇水区的出水点数据。

河流链接的生成需要按规定阈值将流量数据分割出河网,再沿着河网向上游搜索,遇到分支则标记为新河流。

具体步骤:

1)遍历流量数据,设置像元值阈值大于210,且未赋值的河流链接标识的数据像元值,进入步骤2)。

2)遍历该像元八方向的像元值,如果流入中心像元数为1,则进入步骤3)。如果大于1,则对栈中进行赋值河流链接标识操作。

3)对应位置的像元赋新值,清空栈,返回步骤1)。将中心像元移动至上游像元;将流入像元的位置存入栈,返回步骤2)。

代码设计如下:

5 汇水盆地模块

5.1 一级汇水盆地

一级汇水盆地模型的生成难度与多级汇水盆地模型较相似,但在实际应用中一级汇水盆地模型使用较少,且一级汇水盆地模型生成仅需要流向数据[10-13]。

盆地模型生成时根据流向数据的八领域不断递归向上游搜索,直到没有流入像元时停止搜索。

具体步骤:

1)遍历流向数据,如果盆地数据未赋值、流向数据不为无,则进入步骤2)。

2)遍历该像元八方向的像元值,如果没有流入像元则进入步骤3);其他情况则将所有流入中心像元的上游像元位置以及像元值存入栈,将中心像元移动至上游像元,继续进行步骤2)。

3)寻找栈中最大的像元值,并且对汇水盆地中对应位置赋该值,清空栈后返回步骤1)。

5.2 多级汇水盆地

多级汇水盆地模型的实现是建立在河流链接的基础上的,该文生成的河流链接数据中隐含着河网中每一条河流段的链接信息,包括河流段的起点和终点,就是该汇水区域出水口所在的位置[14-16]。

多级汇水盆地模型仍然是向上不断递归搜索的。与一级汇水盆地模型不同的是需要在汇水点位置终止。

具体步骤:

1)遍历河流链接,如果是在河网上,且在多级汇水盆地区域未赋值,则进入步骤2)。

2)遍历该像元八方向的像元值,如果有流入像元,则进入步骤3);否则将栈中与多级汇水盆地对应位置的像元赋该段河流链接值,清空栈,返回步骤1)。

3)流入像元未赋值或值等于该段河流链接像元值,则将流入像元值以及位置存入栈中,将中心像元移动至上游像元,返回步骤2)。

代码设计:

6 应用案例展示

文中以米拉山矢量高程点为基础数据,经过TIN 三角网转化生成栅格DEM 数据,用于后续的汇水盆地生成。实验设备为普通i5 四核的PC 机,其在执行过程中运行速度较快,结果准确性高。DEM 数据为249 行×207 列的点阵式数字高程数据,其中无值区域用像元值0 表示。生成的高程点、TIN 三角网、DEM 高程栅格数据如图4 所示。

图4 高程点、三角网、DEM混合图

河网以流量图为基础,在流量图的基础上设定阈值为210 后,得出栅格河网图,一级与多级汇水盆地皆与栅格河网的结构与分布一致,即一块主河流存在于一块一级汇水盆地之中,每条直流存在于一块多级汇水盆地之中。通过文中算法实现的一级汇水盆地模型及河网如图5 所示,多级汇水盆地模型及河网效果如图6 所示。

图5 一级汇水盆地模型及河网效果

图6 多级汇水盆地模型及河网效果

与ArcGIS 软件中工箱处理的效果对比,该文算法实现的一级汇水盆地模型和多级汇水盆地模型的效果一致,其中河网数量、河网分级和盆地分级的数量保持一致,充分证明了文中汇水盆地生成算法的准确性。

7 结论

文中主要研究了汇水盆地模型生成算法,生成DEM、填洼处理、流向处理、流量分析、河网、一级汇水盆地模型、多级汇水盆地模型。通过多个算法的融合,最终实现了汇水盆地数字模拟。对每个部分的算法都与ArcGIS 软件处理的结果进行了对比,保证了结果的准确性和一致性。在一级、多级汇水盆地模型和河流链接算法的研究中,通过对基础理论的研究,设计了简洁而实用的算法,并进行了实验验证,为该方向算法的研究提供了全新的想法。文中实现的汇水盆地算法具有自主创新性,也具有一定的研究参考价值,为汇水盆地模型生成算法的研究和改进提供了一种新的思路。

猜你喜欢
盆地高程算法
红树林宜林地滩面高程及潮水退干时间时长的测量方法
基于谱元法的三维盆地-子盆地共振初步研究
震源深度对二维盆地放大的影响研究*
场景高程对任意构型双基SAR成像的影响
哪种算法简便
盆地是怎样形成的
8848.86m珠峰新高程
Travellng thg World Full—time for Rree
基于二次曲面函数的高程拟合研究
算法框图的补全