关于 terrain-hydrology
terrain-hydrology 是用于地形栅格分析的技能,可从高程数据生成并验证地形导数、河网、流域和视域。它帮助 GIS 从业者检查 DEM、选择算法并排查单位和水文处理错误。
主要功能
- 01检查 DEM 来源、单位和无数据值
- 02计算坡度、坡向和曲率
- 03洼地处理与水流路径计算
- 04河网和流域划分
- 05视域参数指导
- 06验证与结果记录
适用场景
- 01准备高程栅格用于分析
- 02划分河网和汇水流域
- 03将流域结果与参考数据核对
- 04为选址分析生成视域
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ muend/ geoai-skills --skill terrain-hydrology安装后在 Claude Code 中输入/terrain-hydrology确认已加载。
附带文件agents/openai.yamlreferences/authoritative-sources.md
详细介绍
地形与水文
目的:生成数值具有物理意义的地形产品。反复出现的两种问题是:单位不匹配(经纬度坐标与米制高程混用,会悄然破坏所有导数计算)和未进行水文处理的 DEM(水流汇入虚假的洼地,导致河网零散且不真实)。
先处理 DEM
| 检查项 | 规则 |
|---|---|
| 地表类型 | 水文分析/坡度分析使用 DTM(裸地);视域分析/太阳能分析使用 DSM(包含树冠/建筑物)。使用 DSM 划分流域会导致河流沿着树冠流淌。 |
| 来源 | 对大多数全球范围的工作,Copernicus GLO-30 优于 SRTM;有条件时使用国家级 LiDAR DTM(参见 point-cloud-lidar 自行制作)。记录来源和采集日期。 |
| 无数据值 | 识别无数据值(-9999、-32768、3.4e38)并进行掩膜处理——切勿让它进入统计或填洼算法,被当作“极深的坑”。 |
| 空洞 | 在水文处理之前填补数据空洞(从边缘插值);记录填补区域。 |
| CRS + 单位 | 重投影到投影 CRS,使水平单位与垂直单位一致(米)。对 4326 DEM 计算坡度而不校正 z 因子,是典型的隐蔽错误。如果继续使用地理坐标系,则应用随纬度变化的 z 因子——更好的做法是:不要这样做。 |
派生指标
import whitebox
wbt = whitebox.WhiteboxTools()
wbt.slope("dem.tif", "slope_deg.tif", units="degrees")
wbt.aspect("dem.tif", "aspect_deg.tif")
wbt.plan_curvature("dem.tif", "plan_curv.tif")
- 坡度:注明单位(度数还是百分比——45° = 100%);Horn 方法 (3×3)是标准方法;地形越陡,越应考虑分辨率的影响 (像元尺寸增大时,坡度会变缓——每项坡度统计都应报告像元尺寸)。
- 坡向:这是循环变量——切勿直接进行算术平均;使用向量 (sin/cos)平均;平坦像元的坡向未定义(应进行掩膜处理,不要赋值为 0)。
- 曲率:平面曲率(汇流)与剖面曲率(流速变化)—— 根据问题选择。
- 山体阴影用于制图(参见
cartography-geoviz),切勿作为分析输入。 - 地形崎岖度/位置:TRI、TPI(取决于半径——应报告半径)、 用于地貌分类的 geomorphons。
水文处理——顺序很重要
voids filled → breach depressions (preferred) → fill remaining pits
→ flow direction → flow accumulation → streams → watersheds
- 先挖沟后填洼(WhiteboxTools
BreachDepressionsLeastCost):在障碍物中开挖通道(例如穿过涵洞上方的道路堤坝),而不是将上游区域淹平。对平坦/有堤坝的地形直接填洼,会形成大型人工湖,流路也会随意生成。 - 真实洼地确实存在(喀斯特、草原壶穴、蓄水池)。如果地貌确实蓄水,就不要把它们处理掉——应使用显式洼地处理进行建模,并说明这一点。
- 流向:用于河网/流域划分时使用 D8(离散、标准);在坡面上计算扩散量(湿润度指数、侵蚀)时使用 D-infinity/MFD。
河流与流域
- 河流提取阈值(最小汇流累积量)是建模选择:根据已绘制的参考河网推导(使河流总长度相匹配),或报告阈值并展示两种备选结果——切勿将某个阈值生成的河网说成“真实”的河流。
- 出口点捕捉:出口坐标很少正好落在建模的河流像元上。将其捕捉到搜索半径内汇流累积量最高的像元(
wbt.jenson_snap_pour_points)——未捕捉的出口点会悄然产生一个很小且错误的流域。 - 验证划分结果:将流域面积与权威流域数据对比(误差 ±5-10%),并在 3 处将建模河网叠加到影像/地形图上检查。
- 湿润度指数(TWI)、河流功率(SPA):根据经过水文处理的 DEM 和 MFD 汇流累积量计算;它们是相对指数——不要跨区域比较绝对阈值。
可视域
- 使用 DSM(或 DTM + 地物高度)——裸地可视域会夸大树木或建筑物所在区域的可见性;请注明使用了哪种表面。
- 明确设置观察者高度(约 1.7 m 的行人高度、基础设施的塔高)和目标高度;不同工具的默认值各不相同。
- 在距离超过约 5 km 时考虑地球曲率和折射(
wbt.viewshed会处理;请核实相关标志)。 - 在元数据中提供二值可见/不可见结果、观察点和参数;对于选址问题,候选点集的累积可视域可用于
mcda-suitability-analysis。
工具
WhiteboxTools(地形校正、完整水文分析套件、速度快)· pysheds(轻量级 Python 流域分析)· richdem(地形派生量)· GDAL(gdaldem),用于快速计算坡度/山体阴影 · GRASS(r.watershed),用于超大 DEM(无需显式填洼——采用最小成本路径)。
验证流程
- 派生量直方图:大范围坡度 > 60° 或负值累积量 = 单位/NoData 错误。
- 在 3 处将河网叠加到影像上检查,其中包括一处平坦区域(伪影容易集中于此)。
- 将流域面积与权威流域多边形交叉核对。
- 报告中应列出 DEM 来源/日期/分辨率、地形校正方法、流向算法和河流阈值。
常见问题检查清单
- 从地理坐标系 DEM 计算坡度时未使用 z-factor(数值偏差约 100 倍)。
- 使用 DSM 划分流域(河流会流过树冠)。
- 仅填洼进行地形校正,导致道路路堤处出现虚假湖泊。
- 出水口未吸附到河网,导致产生 3 个像元的“流域”。
- 对坡向取算术平均(350° 和 10° 的平均值指向南方,而非北方)。
- 在填洼/统计时将 NoData 当作高程处理。
- 将一个任意的河流阈值当作排水网络呈现。
执行规范
- **工作流:**检查 DEM 来源、CRS、垂直单位、基准面、分辨率和 NoData;校正地形;推导梯度和流向;划定产品;测试阈值;根据影像和控制点进行验证。
- **决策规则:**对栅格高程产品使用地形工作流,在生成 DEM 前使用点云工作流,并根据景观特征和尺度选择地形校正方法及流向算法。
- **验证流程:**检查派生量分布、山体阴影伪影、河网叠加结果、流域面积、出水口吸附、阈值敏感性和高程控制点残差。
- **失败模式:**因误用 DSM、地理坐标单位下的坡度、垂直基准面不匹配、障碍物未校正、NoData 污染、出水口未吸附,或分辨率超出源数据支持范围而拒绝产品。
- **交付物:**校正后的 DEM、派生量和水文产品、参数与阈值记录、CRS 和垂直基准面、QA 地图、验证指标及局限性。
- **来源时效性:**应用工具算法或产品规则前,请查阅权威来源注册表,并记录查阅日期。
评论
支持 Markdown