如何从HEC-RAS中提取流向及速度分量并保存为文件?
提取HEC-RAS中的水流方向与X/Y速度分量
在HEC-RAS中,RAS Mapper确实不会直接导出流向箭头的矢量数据,但可以通过以下几种方式提取流向角度并计算X/Y方向的速度分量:
方法1:RAS Mapper导出+GIS/Excel后处理
这是最容易上手的方式,无需编程:
- 运行完模型后,在RAS Mapper中加载Velocity Magnitude(速度绝对值)和Flow Direction(流向角度,正北为0度,顺时针递增)两个图层
- 右键点击每个图层,选择
Export Layer,将数据保存为GeoTIFF格式 - 在GIS工具(QGIS/ArcGIS)或Excel中,利用三角函数计算分量:
- X方向速度分量(U):
速度值 * SIN(流向角度 * π/180) - Y方向速度分量(V):
速度值 * COS(流向角度 * π/180)
(角度转弧度是为了适配多数计算工具的三角函数输入要求)
- X方向速度分量(U):
- 将计算后的分量导出为新的GeoTIFF文件即可
方法2:用Python脚本直接读取并导出
如果需要批量处理或自动化操作,推荐用HEC-RAS的Python API:
- 先安装官方的HEC-RAS Python绑定或第三方库
hecraspy - 示例脚本:
import numpy as np from hecraspy import RASModel from osgeo import gdal, osr # 加载RAS模型和指定工况结果 model = RASModel("your_model.prj") result = model.load_results("YourPlanName") # 提取速度绝对值和流向角度 vel_mag = result.get_output("Velocity Magnitude") flow_dir = result.get_output("Flow Direction") # 计算X/Y分量 u_component = vel_mag * np.sin(np.deg2rad(flow_dir)) v_component = vel_mag * np.cos(np.deg2rad(flow_dir)) # 保存为GeoTIFF(需参考原模型的空间投影信息) def save_as_tiff(data, output_path, geo_transform, projection): driver = gdal.GetDriverByName("GTiff") rows, cols = data.shape out_raster = driver.Create(output_path, cols, rows, 1, gdal.GDT_Float32) out_raster.SetGeoTransform(geo_transform) out_raster.SetProjection(projection) out_band = out_raster.GetRasterBand(1) out_band.WriteArray(data) out_band.FlushCache() # 获取原模型的空间参数 geo_transform = result.get_geo_transform() projection = result.get_projection() save_as_tiff(u_component, "u_velocity.tif", geo_transform, projection) save_as_tiff(v_component, "v_velocity.tif", geo_transform, projection)
方法3:直接读取HDF输出文件
HEC-RAS的二维结果默认存在.hdf文件中(路径:模型目录/Output/Unsteady/PlanName/...):
- 用HDFView工具打开文件,定位到
Velocity组下的Magnitude和Direction数据集 - 将这两个数据集导出为文本或CSV文件
- 用Python或GIS工具导入数据,计算分量后保存为GeoTIFF
关键注意点
- HEC-RAS的流向角度定义:正北为0度,顺时针旋转,计算分量时不要搞混三角函数的对应关系
- 一维模型的水流方向对应河道桩号方向,需结合河道的走向角度换算X/Y分量
内容的提问来源于stack exchange,提问作者yuanen Pang
相关产品推荐
相关产品推荐

