ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

地形湿度指数TWI计算全流程:从DEM预处理到栅格计算的避坑指南

地形湿度指数TWI计算全流程:从DEM预处理到栅格计算的避坑指南 地形湿度指数Topographic Wetness IndexTWI这个东西在水文分析、土壤侵蚀评估、植被适宜性建模里出现的频率非常高。但我在实际带项目和帮人看数据的过程中发现一个挺普遍的现象很多人拿到DEM之后直接打开栅格计算器敲一个公式出来的图看着花花绿绿挺像回事可一旦拿去和实地情况对照或者换个分辨率重跑一遍结果就完全对不上了。问题出在哪不是公式写错了而是从DEM预处理到流向算法选择再到汇流累积量的口径中间有一连串容易被忽略的细节。这篇内容我打算把TWI从原始DEM到最终栅格的全流程拆开讲一遍重点不是复述工具按钮在哪而是把每一步背后的逻辑、参数选择的依据、以及我自己踩过的坑说清楚。适合已经会用ArcGIS基本操作、但想把手头水文分析结果做得更靠谱的人看。如果你刚接触GIS也能跟着走下来因为我会把关键概念用生活化的方式解释一遍。1. 先搞清楚TWI到底在算什么1.1 公式背后的物理含义TWI的经典表达式是TWI ln(a / tanβ)其中a是单位等高线长度上的汇流累积量specific catchment areaβ是局部坡度。这个公式最早来自Beven和Kirkby在1979年提出的TOPMODEL框架核心思想是一个地方越容易积水要么是因为它上游汇水面积大a大要么是因为它地势平缓、水不容易流走tanβ小。两者一除再取对数就把汇水能力和排水能力的比值压缩到了一个相对温和的数值区间里。你可以把它想象成屋顶排水。同样一场雨屋顶面积大a大且坡度小tanβ小的位置积水概率就高反之屋顶面积小、坡度陡的地方水很快就流走了。TWI做的就是给每个栅格算一个积水倾向分。这里有个容易混淆的点公式里的a不是简单的汇流累积量flow accumulation而是单位宽度上的汇流面积。在ArcGIS的默认输出里Flow Accumulation给出的是上游汇入的栅格数量要转成a需要乘以栅格面积再除以等高线宽度通常近似为栅格边长。很多人直接拿Flow Accumulation的结果往公式里代量纲就错了结果虽然能出图但数值没有可比性。1.2 为什么不同人算出来的TWI不一样我见过同一个研究区、同一份DEM两个人算出来的TWI范围能差出一倍。原因通常集中在三个地方流向算法不同D8、D-Infinity、MFD多流向对水流分配的处理方式完全不同D8会把所有水流分配给一个方向在平缓区域容易产生平行流线而MFD会分散到多个低洼方向。汇流累积量的单位处理不同有没有乘以栅格面积、有没有除以栅格边长直接决定a的量级。坡度单位不同tanβ里的β必须是弧度还是角度ArcGIS的Slope工具默认输出是角度如果直接取tan结果会偏小。正确做法是先把角度转弧度再取tan或者直接用Slope工具的输出乘以π/180后再算。这三个点任意一个出问题TWI的绝对值就会漂移。所以我在做任何TWI项目之前都会先把这三件事在笔记里写清楚避免中途换参数导致前后结果不可比。2. DEM预处理TWI精度的第一道关口2.1 原始DEM里的坑必须先填掉拿到的DEM不管是5米、12.5米还是30米分辨率几乎不可能是干净的。最常见的两类问题是洼地sink和平坦区flat area。洼地是指那些周围都比它高、水流不出去的栅格。自然地形里确实存在真实的洼地比如喀斯特地区的落水洞但更多时候是DEM采集误差造成的假洼地。如果不填Flow Direction算到这些地方就会断掉下游的汇流累积量全部为0TWI图上一大片异常低值。ArcGIS里用Fill工具处理位于Spatial Analyst Tools → Hydrology → Fill。这里有个参数叫Z Limit默认是空。它的作用是只填充深度小于这个值的洼地超过的保留。我一般会先不设Z Limit跑一遍看看填了多少如果填出来的面积大得离谱再回头检查DEM是不是有系统性问题。对于大多数中小流域项目直接全填Z Limit留空是稳妥的选择。注意Fill之后一定要用Flow Direction重新算一遍流向不能拿填之前的流向数据接着用。2.2 平坦区的处理逻辑填完洼地之后会出现新的问题大片被填平的区域变成了平地这些地方没有坡度Flow Direction算不出来方向会输出一堆-1或者随机方向。ArcGIS的Flow Direction工具内置了一个选项叫Force all edge cells to flow outward但这对内部平坦区没用。标准做法是Fill → Flow Direction →Sink检查是否还有残留洼地→ 如果有平坦区问题用Flow Direction配合Fill迭代或者直接用ArcGIS Pro里改进过的Flow Direction算法。在ArcGIS 10.x时代我习惯用Fill之后再跑一次Flow Direction然后用Basin工具检查有没有异常的小碎斑。如果碎斑很多说明平坦区处理不干净需要回到DEM检查是否有大面积同高程值。一个实操技巧在Fill之前先对DEM做一次Focal Statistics邻域均值3×3窗口可以平滑掉一些微小的采集噪声减少假洼地的数量。但这会轻微改变地形所以只建议在DEM质量确实差的时候用且要在报告里注明。2.3 投影和分辨率的隐性影响TWI对投影非常敏感因为a的计算涉及面积。如果DEM用的是地理坐标系经纬度栅格面积会随纬度变化直接算出来的a没有物理意义。必须先把DEM投影到等面积投影或至少是局部投影坐标系比如UTM或Albers。分辨率的影响更微妙。5米DEM和30米DEM算出来的TWI空间格局可能相似但绝对值分布会差很多。高分辨率DEM能捕捉到微地形对水分再分配的影响TWI的局部变化更剧烈低分辨率DEM则趋于平滑。所以如果你的研究涉及不同分辨率的对比千万不要把两套TWI数值直接放在一起做统计检验要先做标准化或者分位数映射。3. 流向与汇流累积量TWI计算的核心引擎3.1 D8还是MFD一个必须做的选择ArcGIS的Flow Direction工具默认使用D8算法每个栅格的水流全部流向8个邻域中坡度最陡的那个。这个算法简单、计算快但在实际地形中有一个致命弱点在坡度差异不大的区域水流会呈现明显的平行线状这在TWI图上表现为条带状异常。如果你的研究区是山区坡度变化剧烈D8通常够用。但如果是缓坡、平原或者湿地我强烈建议考虑D-Infinity或MFD。ArcGIS原生工具箱里没有直接的MFD但可以通过Flow Accumulation的Flow Direction Type参数选择D8、D-Infinity或MFD在ArcGIS Pro的 Hydrology 工具集中。D-Infinity会把水流按角度分配到两个相邻栅格MFD则分配到所有低洼方向结果更符合实际的水流扩散。代价是计算量增加而且MFD的汇流累积量数值会比D8小因为水流被分散了所以TWI的绝对值也会变。这不是错误是算法差异。关键是在同一个项目里保持一致。3.2 汇流累积量到比汇水面积的转换这是最容易出错的一步。ArcGIS的Flow Accumulation输出的是上游栅格数量如果输入是栅格。要得到公式里的a需要a (FlowAccumulation × 栅格面积) / 栅格边长因为栅格面积 边长²所以简化后a FlowAccumulation × 栅格边长举个例子如果DEM分辨率是30米某个栅格的Flow Accumulation值是100那么a 100 × 30 3000平方米/米。这个数值的单位是长度符合比汇水面积的定义。在栅格计算器里如果DEM是投影坐标系且单位是米可以直接写a FlowAcc_30m * 30但如果DEM是地理坐标系栅格边长不是常数这个简化就不成立了。所以再次强调先投影再计算。3.3 坡度计算的单位陷阱ArcGIS的Slope工具输出默认是角度0-90。TWI公式里的tanβ要求β是弧度。转换方法有两种在栅格计算器里写Tan(Slope_deg * 3.1415926 / 180)或者先用Raster Calculator把Slope转成弧度Slope_rad Slope_deg * 0.0174533我习惯用第一种直接在最终公式里一步到位减少中间数据。但要注意如果坡度接近0平坦区tanβ会趋近于0a/tanβ会爆炸TWI出现极大值。这是TWI的固有特性不是bug。处理办法通常是对坡度设一个下限比如tanβ最小取0.001或者在出图时对TWI做截断比如取1%和99%分位数之外的做极值处理。4. 栅格计算器里的完整实现与参数调优4.1 一步步搭建计算公式假设你已经有了Fill_DEM填洼后的DEMFlowDir流向栅格FlowAcc汇流累积量栅格Slope_deg坡度角度在ArcGIS的Raster Calculator里完整公式可以写成Ln((FlowAcc * 30) / Tan(Slope_deg * 3.1415926 / 180))这里的30是DEM分辨率米需要根据你的实际数据替换。如果坡度有0值Tan会返回0导致除零错误。稳妥的写法是Ln((FlowAcc * 30) / (Tan(Slope_deg * 3.1415926 / 180) 0.001))加一个极小的偏置量避免除零同时不影响正常坡度的计算结果。4.2 结果验证怎么判断TWI算得对不对算完之后不要急着出图先做三个检查第一数值范围检查。正常的TWI范围一般在3到30之间极端情况下可能到40以上。如果最小值是负的说明a/tanβ小于1可能是FlowAcc有0值或者坡度异常大。如果最大值超过100检查是不是有除零或者坡度接近0的栅格。第二空间格局检查。把TWI图和DEM叠加看看高TWI值是不是出现在河谷、洼地、缓坡底部低值是不是在山脊、陡坡。如果高值出现在山顶那肯定是哪里反了。第三与已知地物对照。如果有河流、湖泊或者湿地分布数据叠加看看TWI高值区是否吻合。我一般会随机选20个点用Google Earth或者实地照片对照确认TWI的排序合理。4.3 不同分辨率下的参数适配5米DEM和30米DEM在计算TWI时除了分辨率数值要替换还有几个参数需要调整参数5米DEM30米DEM说明栅格边长530用于a的计算填洼Z Limit建议设1-2米建议留空高分辨率DEM噪声多限制填洼深度可保留真实洼地坡度偏置量0.00050.001高分辨率下坡度变化剧烈偏置量可更小流向算法D8或D-InfinityD8高分辨率下D8的平行流线问题更明显建议D-Infinity这个表是我自己在多个项目里总结的经验值不是绝对标准但可以作为起点。5. 那些让我返工过的典型问题5.1 填洼之后流向还是断的有一次做南方某丘陵区的项目Fill跑完Flow Direction也跑了但Flow Accumulation出来之后下游河道位置还是有一大段0值。排查了半天发现是DEM边缘有NoData区域水流到边缘就断了。解决办法是在Fill之前先用Con工具或者IsNull把NoData区域用一个大值填充或者用Mosaic把相邻图幅拼进来保证流域完整。这个坑的教训是TWI计算的范围必须大于研究区至少要把上游汇水区完整包含进来。如果只裁剪了研究区边界边界上的汇流累积量会严重偏低TWI也跟着偏低。5.2 坡度图层和流向图层分辨率不一致ArcGIS里不同工具输出的栅格如果环境设置里的Cell Size不一致会导致后续计算时自动重采样引入误差。我习惯在每次操作前打开Environments→Raster Analysis→Cell Size设为与DEM一致并且Mask设为研究区边界。这样所有中间产物都在同一网格上避免对齐问题。5.3 TWI图上的条纹从哪来如果你用的是D8算法在缓坡区域看到明显的平行条纹这是正常的算法伪影。缓解办法有三个一是换D-Infinity或MFD二是对DEM先做一次轻微的平滑Focal Statistics3×3均值三是在出图时用Focal Statistics对TWI结果做一次3×3中值滤波视觉上会好很多但会损失一些细节。我通常只在最终制图时做滤波分析时用原始结果。5.4 投影转换后TWI全变了有人把DEM从地理坐标系转到投影坐标系后发现TWI的数值范围完全变了。这太正常了因为栅格边长从度变成了米a的计算结果完全不同。正确的流程是先投影再做所有水文分析。如果已经用地理坐标系算了一遍不要试图通过数学变换去修正直接重跑。6. 从TWI到实际应用几个延伸方向TWI本身只是一个中间指标真正有价值的是它在下游分析里的应用。我做过和见过的典型用法包括土壤水分制图。TWI和实测土壤含水量之间有较强的相关性可以用TWI作为协变量结合少量实测点做回归克里金生成连续土壤水分图。这里要注意TWI和土壤水分的关系在不同季节、不同土层深度下不一样模型要分季节标定。植被适宜性评价。很多植物对水分条件敏感TWI可以作为生境适宜性模型的一个环境变量。我一般会把TWI分成5到7个等级而不是直接用连续值因为植被响应往往是阈值型的。洪水风险初筛。TWI高值区在暴雨条件下更容易积水可以作为洪水风险图的辅助图层。但TWI是静态的不包含降雨强度、土壤渗透性等信息只能做初筛不能替代水文模型。侵蚀潜力评估。TWI和坡度、土地利用结合可以估算饱和地表径流产生的概率进而评估侵蚀风险。常用的组合是TWI 坡度 植被覆盖度。这些应用里TWI的精度直接影响最终结论。所以回到最开始说的不要小看DEM预处理和参数选择它们决定了你的TWI是能用还是好用。7. 我个人的几条实操建议第一建立可复现的模型流程。在ArcGIS ModelBuilder里把Fill → Flow Direction → Flow Accumulation → Slope → Raster Calculator串成一个工具链每次换数据只需要改输入路径和分辨率参数。这样既省时间又避免手动操作漏步骤。第二保存中间数据。Flow Direction和Flow Accumulation的栅格文件不大但重算很耗时。我习惯把这两个中间结果单独存一个文件夹后续调参时直接调用不用从头跑。第三记录参数日志。每次计算TWI时在文本文件里记下DEM来源和分辨率、投影信息、填洼Z Limit、流向算法、坡度偏置量、计算公式。这个习惯帮我省了很多次这个图当时怎么算的的麻烦。第四出图时注意配色。TWI的直方图通常右偏高值少但重要。用分位数分类比如自然断点或分位数比等间距分类更能突出空间差异。色带建议用蓝-绿-黄-红低值冷色、高值暖色符合水文直觉。第五不要迷信绝对值。TWI的绝对值受算法和参数影响很大跨研究区比较时用相对排名或分位数更可靠。如果一定要比较绝对值确保两套数据的DEM分辨率、投影、流向算法、汇流累积量单位完全一致。最后说一个我最近才注意到的细节ArcGIS Pro 3.x版本的 Hydrology 工具集里Flow Accumulation的默认输出类型和10.x有些差异如果你是从旧版本迁移过来的建议先跑一个小测试区对比一下确认数值口径一致再批量处理。这个差异不大但在做长时间序列对比时会被放大。
返回列表