一种考虑湖泊水库范围的子流域划分方法
文献发布时间:2023-06-19 11:16:08
技术领域
本发明涉及水文模型技术领域,尤其涉及一种考虑湖泊水库范围的子流域划分方法。
背景技术
子流域划分是分布式水文模型构建和应用的基础,准确的子流域划分能很好的体现流域的水循环过程,然而常规的子流域划分通常忽略湖泊水库的存在,将其作为普通区域进行子流域划分,或者,将湖泊水库作为山区与常规区域一并处理;这可能导致湖泊水库被划分在多个子流域中以及子流域划分错误等问题,这就造成与实际水循环过程不符的现象,导致最终水文模拟结果出现较大误差。
发明内容
本发明的目的在于提供一种考虑湖泊水库范围的子流域划分方法,从而解决现有技术中存在的前述问题。
为了实现上述目的,本发明采用的技术方案如下:
一种考虑湖泊水库范围的子流域划分方法,包括如下步骤,
S1、以DEM数据为基础,计算流域内各栅格流向和汇流累积量,并基于设定的河网阈值提取模拟河网;
S2、根据情况对湖泊水库范围进行编辑,并根据湖泊水库的范围对湖泊水库进行编号;
S3、对每个湖泊水库进行处理,根据湖泊水库内的模拟河网将湖泊水库范围分割成数目不等的部分,每一部分相连通且由模拟河网分割开;
S4、以模拟河网出口栅格所在位置为起点,沿模拟河网栅格向上进行溯源遍历,按河段对流域进行子流域划分,并在遇到湖泊水库栅格时,对湖泊水库周围的非河网栅格以及上游流入的河网栅格进行子流域划分并赋值子流域编号;
S5、对子流域编号进行翻转处理获取新的子流域编号,并根据各子流域的上下游关系生成子流域上下游属性表。
优选的,栅格流向采用D8算法计算得出,即将该栅格流向周边8个栅格中坡度最陡的栅格的流向作为该栅格的流向;栅格的汇流累积量即为上游所有流入当前栅格的栅格数量之和。
优选的,河网阈值用于定义各个栅格是属于河网栅格或坡面栅格,当栅格的汇流累积量大于河网阈值,则将该栅格定义为河网栅格,否则将该栅格定义为坡面栅格;所有的所述河网栅格构成模拟河网,所述河网阈值须保证提取的模拟河网在源头区与实际河网源头一致。
优选的,步骤S2包括如下内容,
S21、根据情况对湖泊水库范围进行编辑;若存在同一条模拟河道出现从湖泊水库范围出去后,又再次进入同一湖泊水库的情况,则对湖泊水库范围矢量文件进行编辑,移动扩大湖泊水库边界,将范围外的模拟河道包括进去,保证同一条模拟河道在湖泊范围内是连通的;若存在两条模拟河道穿过湖泊水库范围,则对湖泊水库范围矢量文件进行编辑,移动缩小湖泊水库边界,使得只有一条模拟河道横穿湖泊水库范围;若无上述情况,则不对湖泊水库范围进行编辑;
S22、不同湖泊水库采用从1开始依次增加的自然数进行编号,以DEM栅格大小和图层边界为参数将矢量湖泊水库转成栅格格式,栅格值等于湖泊水库的编号;
湖泊、水库范围指代的是水面范围,且将湖泊和水库混合在一起进行编码。
优选的,步骤S3中的分割方式为,
S31、将湖泊水库内的模拟河网栅格所在位置设置为0,非模拟河网栅格区域设置为-1;
S32、对湖泊水库进行逐栅格遍历,若栅格值不为-1,则不做处理,若栅格值为-1,则将栅格值赋值为当前累积分区序号加1;所述分区序号为从1开始的自然数;
S33、以新赋值的栅格为起点,对其横向和竖向的一共4个相邻栅格进行递归处理赋值,直到遇到河网栅格或者非湖泊水库栅格结束,各栅格的栅格值都等于相应栅格的分区序号;
S34、重复步骤S32-S33,直到湖泊水库范围内所有栅格都遍历结束且拥有分区序号,使得湖泊水库被模拟河网分割开的几部分分别拥有不同的分区序号。
优选的,步骤S4具体包括如下内容,
S41、以模拟河网出口栅格所在的位置为起点,沿模拟河网栅格向上进行溯源遍历,按河段对流域进行子流域划分,并为每个子流域赋值为一个从1开始的唯一的自然数作为子流域编号;
S42、当遇到湖泊水库栅格,则将湖泊水库区域设置为一个子流域,该湖泊水库范围内所有栅格赋值为一个子流域编号,假设子流域编号为N,并标记该子流域为河道子流域属性;
S43、以湖泊水库范围内所有非河网栅格为起点,对湖泊水库周围的非河网栅格进行溯源遍历,将流入湖泊水库非河网栅格的上游非湖泊水库栅格的子流域编码设置为N+x,并标记该子流域为坡面子流域属性;x表示最终流入的湖泊非河网栅格的分区序号;
S44、对湖泊水库周围所有非河网栅格遍历结束后,再对湖泊水库上游流入的河网栅格进行遍历处理,即将所有流入湖泊水库的河网栅格,按汇流累积量大小,取最大的作为干流,其他的作为支流处理。
优选的,步骤S4中按河段对子流域进行划分的具体过程为,
沿河网栅格向上进行溯源遍历,直到遇到人为分割点、分岔河道、湖泊水库栅格结束,将遍历到的所有河网栅格作为一个河段,对该河段赋值一个唯一子流域编号;
以该河段每个河网栅格为起点,溯源遍历流入当前河网栅格的坡面栅格,直到无上游栅格流入或者上游流入栅格为湖泊水库栅格结束;
将所有流入该河段的坡面栅格赋值当前河段的子流域编号,并将该子流域标记为河道子流域属性。
优选的,沿河网栅格向上溯源遍历的过程中,对于分岔河网栅格,根据出口栅格的汇流累积量确定干支流,将汇流累积量大的河道作为干流,将汇流累积量小的河道作为支流;先对汇流累积量小的支流河道进行子流域划分并赋值子流域编号,再对汇流累积量大的干流河道进行子流域划分并赋值子流域编号。
优选的,步骤S5中对子流域编号进行翻转处理获得新的子流域编号具体过程为,使用最大子流域数加1减去当前子流域编号,获取新的子流域编号;其中,获取的新的子流域编号,能够保证上游子流域编号始终小于其下游子流域编号,子流域上游主干子流域编号小于分支子流域编号。
优选的,子流域上下游属性表包括当前单元子流域编号、下游子流域编号、上游子流域编号、湖泊水库编号和河道坡面标记。
本发明的有益效果是:1、以DEM为基础,结合湖泊水库范围信息进行子流域划分,将每个湖泊水库划分为一个单独的子流域,保证子流域范围划分的正确性。2、将湖泊水库单独作为一个子流域进行划分,使得子流域内水循环过程更加接近现实,使得水文模拟结果更加准确。
附图说明
图1为本发明实施例中划分方法的流程图;
图2为本发明实施例中研究流域及湖泊水库范围的示意图;
图3为本发明实施例中对湖泊水库范围赋值累积分区序号的示意图;
图4为本发明实施例中子流域划分及流向结果的示意图;
图5为本发明实施例中最终子流域编码结果的示意图;
图6为本发明实施例中某子流域上下游属性表的示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。
如图1所示,本实施例中,提供了一种考虑湖泊水库范围的子流域划分方法,包括如下步骤,
S1、以DEM数据为基础,计算流域内各栅格流向和汇流累积量,并基于设定的河网阈值提取模拟河网;
S2、根据情况对湖泊水库范围进行编辑,并根据湖泊水库的范围对湖泊水库进行编号;
S3、对每个湖泊水库进行处理,根据湖泊水库内的模拟河网将湖泊水库范围分割成数目不等的部分,每一部分相连通且由模拟河网分割开;
S4、以模拟河网出口栅格所在位置为起点,沿模拟河网栅格向上进行溯源遍历,按河段对流域进行子流域划分,并在遇到湖泊水库栅格时,对湖泊水库周围的非河网栅格以及上游流入的河网栅格进行子流域划分并赋值子流域编号;
S5、对子流域编号进行翻转处理获取新的子流域编号,并根据各子流域的上下游关系生成子流域上下游属性表。
本实施例中,本发明的子流域划分方法具体包括以上五个步骤,下面分别针对这五个步骤的具体内容进行解释。
一、提取模拟河网
该部分即为步骤S1的内容,步骤S1的具体内容为以DEM数据为基础,采用D8算法计算流域内各栅格的流向,并基于流向计算各栅格汇流累积数设定河道阈值,将汇流累积数大于阈值的栅格设为河网栅格,从而提取出模拟河网。
采用D8算法计算流域内各栅格的流向的具体过程为,将该栅格流向周边8个栅格中坡度最陡的栅格的流向作为该栅格的流向;栅格的汇流累积量即为上游所有流入当前栅格的栅格数量之和。
本实施例中,河网阈值用于定义各个栅格是属于河网栅格或坡面栅格,当栅格的汇流累积量大于河网阈值,则将该栅格定义为河网栅格,否则将该栅格定义为坡面栅格;所有的所述河网栅格构成模拟河网。
河网阈值的具体取值由用户进行确定,所述河网阈值须保证提取的模拟河网在源头区与实际河网源头一致;河网阈值的取值过程为,通过实验从小逐渐加大,直到提取的模拟河网在源头区同实际河网源头相一致。
二、湖泊水库的编号
该部分即为步骤S2的内容,步骤S2具体包括如下内容,
S21、根据情况对湖泊水库范围进行编辑;若存在同一条模拟河道出现从湖泊水库范围出去后,又再次进入同一湖泊水库的情况,则对湖泊水库范围矢量文件进行编辑,移动扩大湖泊水库边界,将范围外的模拟河道包括进去,保证同一条模拟河道在湖泊范围内是连通的;若存在两条模拟河道穿过湖泊水库范围,则对湖泊水库范围矢量文件进行编辑,移动缩小湖泊水库边界,使得只有一条模拟河道横穿湖泊水库范围;若无上述情况,则不对湖泊水库范围进行编辑;
S22、不同湖泊水库采用从1开始依次增加的自然数进行编号,以DEM栅格大小和图层边界为参数将矢量湖泊水库转成栅格格式,栅格值等于湖泊水库的编号;
湖泊、水库范围指代的是水面范围,且将湖泊和水库混合在一起进行编码。
三、湖泊水库的处理(参见图2和图3)
该部分即为步骤S3的内容,步骤S3中的分割方式为,
S31、将湖泊水库内的模拟河网栅格所在位置设置为0,非模拟河网栅格区域设置为-1;
S32、对湖泊水库进行逐栅格遍历,若栅格值不为-1,则不做处理,若栅格值为-1,则将栅格值赋值为当前累积分区序号加1;所述分区序号为从1开始的自然数;
S33、以新赋值的栅格为起点,对其横向和竖向的一共4个相邻栅格进行递归处理赋值,直到遇到河网栅格或者非湖泊水库栅格结束,各栅格的栅格值都等于相应栅格的分区序号;分区序号为从1开始的自热数;
S34、重复步骤S32-S33,直到湖泊水库范围内所有栅格都遍历结束且拥有分区序号,使得湖泊水库被模拟河网分割开的几部分分别拥有不同的分区序号。
四、子流域划分(参见图4和图5)
该部分即为步骤S4的内容,步骤S4具体包括如下内容,
S41、以模拟河网出口栅格所在的位置为起点,沿模拟河网栅格向上进行溯源遍历,按河段对流域进行子流域划分,并为每个子流域赋值为一个从1开始的唯一的自然数作为子流域编号;
S42、当遇到湖泊水库栅格,则将湖泊水库区域设置为一个子流域,该湖泊水库范围内所有栅格赋值为一个子流域编号(假设子流域编号为N),并标记该子流域为河道子流域属性;
S43、以湖泊水库范围内所有非河网栅格为起点,对湖泊水库周围的非河网栅格进行溯源遍历,将流入湖泊水库非河网栅格的上游非湖泊水库栅格的子流域编码设置为N+x,并标记该子流域为坡面子流域属性;x表示最终流入的湖泊非河网栅格的分区序号;
S44、对湖泊水库周围所有非河网栅格遍历结束后,再对湖泊水库上游流入的河网栅格进行遍历处理,即将所有流入湖泊水库的河网栅格,按汇流累积量大小,取最大的作为干流,其他的作为支流处理。
本实施例中,步骤S4中按河段对子流域进行划分的具体过程为,
沿河网栅格向上进行溯源遍历,直到遇到人为分割点(水文站点等)、分岔河道、湖泊水库栅格结束,将遍历到的所有河网栅格作为一个河段,对该河段赋值一个唯一子流域编号;
以该河段每个河网栅格为起点,溯源遍历流入当前河网栅格的坡面栅格,直到无上游栅格流入或者上游流入栅格为湖泊水库栅格结束;
将所有流入该河段的坡面栅格赋值当前河段的子流域编号,并将该子流域标记为河道子流域属性。
本实施例中,沿河网栅格向上溯源遍历的过程中,对于分岔河网栅格,根据出口栅格的汇流累积量确定干支流,将汇流累积量大的河道作为干流,将汇流累积量小的河网作为支流;先对汇流累积量小的支流河道进行子流域划分并赋值子流域编号,再对汇流累积量大的干流河道进行子流域划分并赋值子流域编号。河网指代的是网状的河道,河道指的是河网里的某条河。
五、获取新的子流域编号,生成子流域上下游属性表(参见图6)
该部分即为步骤S5的内容,步骤S5中对子流域编号进行翻转处理获得新的子流域编号具体过程为,使用最大子流域数加1减去当前子流域编号,获取新的子流域编号;其中,获取的新的子流域编号,能够保证上游子流域编号始终小于其下游子流域编号,子流域上游主干子流域编号小于分支子流域编号。湖泊水库所在的子流域可能会有多个上游子流域。
本实施例中,子流域上下游属性表包括当前单元子流域编号、下游子流域编号、上游子流域编号(复数个)、湖泊水库编号(无则为0)和河道坡面标记(1表示子流域内有河道,0表示无河道)。
通过采用本发明公开的上述技术方案,得到了如下有益的效果:
本发明提供了一种考虑湖泊水库范围的子流域划分方法,该方法以DEM为基础,结合湖泊水库范围信息进行子流域划分,将每个湖泊水库划分为一个单独的子流域,保证子流域范围划分的正确性。该方法将湖泊水库单独作为一个子流域进行划分,使得子流域内水循环过程更加接近现实,使得水文模拟结果更加准确。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。
- 一种考虑湖泊水库范围的子流域划分方法
- 一种考虑降雨空间分布特征的水库流域子流域划分方法