HEC-RAS洪水淹没分析实战(1):基于DEM数据洪水模拟
HEC-RAS软件简介及其在水文建模中的应用
HEC-RAS(Hydrologic Engineering Center’s River Analysis System)是由美国陆军工程师兵团水文工程中心开发的一款免费、开源的水力分析软件。自20世纪90年代发布以来,HEC-RAS已从最初的一维恒定流水面线计算工具,逐步发展成为支持一维/二维耦合模拟、非恒定流计算、泥沙输移和水质分析的综合平台。该软件凭借其稳定的计算性能、良好的GIS集成能力以及广泛的用户社区,已成为国内外水利部门、科研机构及工程咨询公司进行洪水模拟的主流工具之一。在洪水淹没分析中,HEC-RAS能够利用高精度地形数据和流量边界条件,模拟洪水在河道及滩区中的演进过程,并输出淹没范围、水深分布及流速场等关键结果。
地形数据处理与网格划分方法
HEC-RAS接受DEM(数字高程模型)、TIN(不规则三角网)或LAS点云数据作为地形输入。地形预处理通常在ArcGIS、QGIS或HEC-RAS内置的RAS Mapper中进行,包括:合并大范围DEM、裁剪至研究区域、去除异常高程(如建筑物、植被引起的噪点)、修补河道缺失断面等。对于二维网格划分,推荐采用非结构化三角网格或结构化矩形网格。
目录
一、数据准备:
1.DEM:
加载防洪堤,铁路,道路等矢量数据,修正dem
首先收集导入分析区域内的道路、轨道、防洪堤这类会影响行洪水的建筑物,另外要统计其高于地面多少米以及宽度;由于轨道,高速,防洪堤的宽度和高度都大不相同,所以分开依次对dem数据进行修改。
使用缓冲区工具定义宽度[分析工具-邻域分析-缓冲区],随后将其转为栅格,最后使用栅格计算器抬升高度。
这里末端类型选择了FLAT,可以根据实际情况进行调整选择是圆形末端还是平整末端。

定义宽度后如下所示,注意重叠的部分要使用编辑工具将其分开,否则在定义高度是会出现部分区域高程高于实际值的结果。

使用转换工具将面转为栅格。

转为栅格后使用栅格计算器抬高dem数据

设置环境将处理范围设置为研究区域全范围,否则将只处理上一步所做出的栅格所在最小范围,并将像元大小设置一致。


栅格计算器公式如下:
Con(IsNull("国道.tif"), "原始DEM.tif", "原始DEM.tif" + 国道高出地面的高度)
修正后的dem数据如下所示,在符号系统中选择使用山体阴影效果,可以很明显的观察到处理结果。

2.曼宁糙率shp:
根据土地利用数据,赋值糙率
这里根据不同的土地利用类型,赋值糙率:
| ID | Class | Color | NAME | n |
| 1 | Cropland | 250,227,156 | 农田 | 0.06 |
| 2 | Forest | 68,111,51 | 森林 | 0.1 |
| 3 | Shrub | 51,160,44 | 灌木 | 0.08 |
| 4 | Grassland | 171,211,123 | 草原 | 0.05 |
| 5 | Water | 30,105,180 | 水域 | 0.035 |
| 6 | Sonw/Ice | 166,206,227 | 冰雪 | 0.025 |
| 7 | Barren | 207,189,163 | 裸地 | 0.025 |
| 8 | Impervious | 226,66,144 | 不透水面 | 0.015 |
| 9 | Wetland | 40,155,232 | 湿地 | 0.07 |
将土地利用数据栅格图层转为栅格后便于赋值。

可以看到,转换后内容较多,工作量较大,这里用字段计算器进行赋值
添加字段ManningN,选择双精度,右键使用字段计算器,勾选显示代码块,输入代码进行赋值。

由于这里分类字段是数字,使用python更加便捷,代码如下:
def get_n(code):
if code is None:
return 0.060
n_dict = {1: 0.060, 2: 0.100, 3: 0.080, 4: 0.050, 5: 0.035, 6: 0.025, 7: 0.025, 8: 0.015, 9: 0.070}
return n_dict.get(code, 0.060)
get_n( !gridcode! )
这里gridcode是分类字段名称,使用时要根据自己的属性表中内容进行调整。
二、HEC-RAS 2D建模
1.新建工程
注意路径及名称要全英文

修改单位系统为公制:


2.打开RAS Mapper初始化
这里简单说一下界面功能。

| Features | 查看导入的SHP/栅格图层 |
| Geometries | 编辑几何数据(画2D流场、边界线、堤线) |
| Event Conditions | 设定边界条件流量/水位 |
| Results | 查看计算结果(水深/流速/淹没范围) |
| Map Layers | 管理地图图层显示 |
| Terrains | 创建/管理地形数据 |
设置工程投影:

这里我用的是2000高斯坐标,直接使用从国家2000投影的官方定义抄下来的WKT定义,然后导入:

3.在Terrains中创建地形:
右键Terrains,选择Create a New RAS Terrain。

然后导入我们之前做好的dem数据

完成后得到带有色带的dem渲染图:

右键Geometries创建

展开Domain,左键单击选中 2D Flow Areas,上方工具栏点击画笔图标,单击选中Perimeters

在地图上沿最大可能淹没范围画多边形:包住三条沟口、沟口以下整片平地、防洪堤及其背后
双击闭合多边形,弹出设置窗口:point spacing:填 15(设置网格间距)

等待计算完成后点击close,完成后关闭编辑并保存,选择是。


看到Geometry这一栏是空的,需要手动关联,点击Edit—Geometric Data

点击File—Open Geometry Data

选择我们刚刚做好的Domain

完成后关闭Geometric Data,可以看到已经关联
4.绘制BC线
接下来回到Ras Mapper中绘制BC线,找到Boundary Condition Lines,开始绘制

这里由于研究区域共有四个山洪沟,所以要画四条上游的出水口,和一条下游的,注意下游边界要画在外侧。

在主界面点击Edit—Unsteady Flow Data

选中一个出水口,点击Flow hydrolograph

根据历时设定填入设计频率的洪量,点击ok即可,注意仅几个出水口需要设置洪量,需要注意的是,这里要根据研究区域的洪水过程来填对应的流量

在设置完上游的四条BC线后,设置下游的BC线,选择BC out,点击Normal Depth

在 Friction Slope: 后面的输入框里,填 0.001。(山丘区平坦下游河段的典型摩擦坡度)

5.糙率设置
保存后回到主界面,由于一开始设置糙率都是默认的0.06,现在进行糙率的精细化设置。打开RAS mapper,左侧 Map Layers → Create a New RAS Layer → Land Cover Layer

导入之前制备好的shp文件,将Import Extents修改为Geometries,name field修改为gridcode,修改像元值Cell Size为15,如下:

查看绑定糙率是否生效:


可以看到已经绑定了。
6.开始计算
回到主界面启动计算,点击Run—Unsteady Flow Analysis(确认Plan中Geometry file是Domain,Unsteady flow file是设好的流量),Simulation Time Window保持和流量过程性一致,Computation Interval填30秒,其余勾选如下所示

另外还要勾选Flooplain Mapping 不然不会出图
点击compute开始计算

7.计算结果
计算完成后打开RAS mapper,点击Results勾选之前创建的项目目录下Depth就能看到淹没结果了

参考
HEC-RAS 2D User's Manual
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)