
写这篇东西的起因是我前阵子帮一个做水土保持规划的朋友处理数据。他拿到手的流域边界是一个几千平方公里的三级流域宏观统计勉强够用但真要落到“哪个山沟该修谷坊、哪片坡地是面源污染高风险区”这种颗粒度压根使不上劲。于是我们把整个流域按汇水关系自动切成了上千个几公顷到几平方公里的小单元——这就是微流域单元。 ArcGIS基于DEM提取微流域单元核心链路其实还是水文分析里那套“填洼→流向→汇流累积→分水岭”但参数逻辑和提取一个大流域完全两码事。这篇文章我会从数据准备、阈值设计到后处理把完整流程摊开讲一遍练习数据怎么获取、怎么整理也一并说明。适合刚开始接触水文分析、或者被ArcGIS中文界面里各种工具名绕晕的GISer参考。1. 微流域单元到底“微”在哪先理解需求再动手1.1 水文分析的完整链路是什么从DEM提取任何流域最底层的逻辑都可以用一滴雨水落地来理解。雨水落在山坡上会顺着最陡的方向往低处流一路汇入冲沟、支沟、主沟最后从某个出口断面流走。ArcGIS的水文分析工具集就是把物理世界里的这个汇水过程抽象成了一串栅格运算DEM → 填洼Fill→ 流向Flow Direction→ 汇流累积/流量Flow Accumulation→ 按阈值提取河网 → 河网链接Stream Link→ 分水岭Watershed这一步一个工具看起来名字都简单但它们的输入输出是严格串起来的。流向没算好汇流累积就是错的汇流累积栅格没仔细看阈值选出来的河网可能全是麻线。我见过太多人上来就点工具结果后面每一步都在补救。做微流域单元尤甚因为尺度变小之后几个像元的误差就可能生成一片错误的排水路径所以流程里的每一步都得先想明白再动手。1.2 微流域和普通流域提取的本质区别普通流域提取通常是这样的我已经知道某个水文站或者出水口的经纬度想算汇入这个点的范围有多大。操作上用“捕捉倾泻点”Snap Pour Point把出口点定位到河网上再直接调分水岭工具得到一个实实在在的流域边界。微流域不一样。它往往没有实测出口点而是希望把整个研究区自动切成许多个内部相对完整的小汇水区。这时候控制划分的不是出口点坐标而是汇流累积栅格里的一个数字阈值。这个阈值相当于“河源判定标准”只有上游来水像元数达到设定值的格网才被认定是河网的一部分每一条河段都会成为一个小流域的排水路径随后围绕整条河段圈出汇水范围。这里有两个关键推论第一微流域提取的核心门槛在于阈值怎么定第二提出来的单元不一定有常规意义上的“流域出口”而是围绕小沟道生成的闭合多边形。用途上这类小单元经常被当作SWAT等分布式水文模型的计算单元或者水土保持措施规划、面源污染负荷估算的最小空间单位。对比维度普通流域提取微流域单元提取控制方式有明确出水点用倾泻点控制无固定出口靠汇流累积阈值切分面积尺度几平方公里到数万平方公里几公顷到几平方公里单元数量通常一个或几个几十到几百上千个典型用途水文站集水区、洪水计算SWAT建模、水土保持规划、面源污染评价参数核心倾泻点捕捉位置河网阈值、最小单元面积1.3 为什么说“微流域”不是简单把阈值调小必须提醒一点有不少人觉得微流域不就是把提取河网的阈值从10000改成500吗真上手就会发现阈值一旦调小栅格层面的细小分叉、噪声、平行河网全都会冒出来转出的矢量面又碎又毛糙。尺度变化之后误差的性质也变了——对大流域不算影响的几个像元误差在微流域场景里可能直接让一条小沟的汇水范围完全扭曲。所以后面凡是跟“阈值”和“边界”相关的参数我都会解释取值逻辑而不是只告诉你填一个数。2. 数据准备DEM选型和预处理一步错步步错2.1 分辨率怎么选微流域目标面积说了算DEM分辨率决定了你不能提取多“微小”的单元。想象一下30m分辨率的DEM每个像元代表900平方米的地面。如果某个小沟谷的汇水区只有0.5平方公里那它整个集水区也只有555个像元提出来基本就是七八个像元拼起来的锯齿状多边形既难看也不具备水文意义。我的实践经验是目标微流域单元的平均面积至少应该是单个像元面积的100到300倍。按这个标准来选数据30m DEM单像元900平方米适合提取平均面积在0.1平方公里以上的微流域日常用得最多的是1到5平方公里的单元12.5m分辨率比如ALOS AW3D30单像元约156平方米能支持更小的单元如果非要做到0.05平方公里级别的微型集水区建议直接上5m以内分辨率的DEM。分辨率的选择顺序应该是先定目标单元面积再去找DEM而不是反过来。很多人一开始就下了个30m数据然后强行提0.1平方公里的小单元属于自己给自己挖坑。常见的公开DEM产品里ASTER GDEM V3 30m、SRTM 30m/90m、ALOS AW3D30、NASADEM都可以用国内下载的话“地理空间数据云”等平台也能按分幅检索。微流域尺度上做中小尺度规划用30m基本够用对边界精度敏感的话建议直接用12.5m数据运算量略大但结果会干净不少。2.2 坐标系流向计算的前提是“平面距离”这是初学者最容易踩的坑。ArcGIS里打开一个WGS84坐标系的DEM经纬度单位是度像元尺寸显示的数值看起来就是一个普通数字但实际计算坡度和流向时一个经度在一个纬度处的实地距离和一个纬度差对应的距离完全不一样。直接拿地理坐标系做坡度、流向算出来的方向很难保证正确。水流方向本质上是比邻域坡度差必须建立在平面直角坐标系的真实距离上。所以我拿到DEM后的第一件事就是把它投影到研究区对应的投影坐标系。国内中东部地区常用UTM 49N、50N等分带或者高斯-克吕格投影西部按3度带/6度带选择。ArcGIS里用“数据管理工具 → 投影和变换 → 栅格 → 投影栅格”即可。需要提醒的是转换后一定要看一眼栅格像元大小。有的数据在原坐标系里像元尺寸是0.000278度重采样成米制后必须手动指定输出像元大小比如30m否则软件默认生成一个奇怪的非整数值后面换算阈值时很容易出错。还有一个小细节如果原始DEM是CGCS2000坐标系其中一些分幅数据可能带带号投影时不要选错分带否则整个研究区会跑到奇怪的经度位置。不确定就先用一个点查询工具检查地理坐标是否落在研究区范围内再继续往下做。2.3 填洼前先给DEM做个体检填洼工具会把所有局部低点都填到能水流出去的高度但DEM本身如果有异常填洼就会把这个异常放大并传播到后面所有结果。我建议在填洼之前做三件事查看栅格统计信息确认最小值和最大值在研究区的合理范围内。比如陆地高程数据如果出现-32768这类填充值要先用条件函数处理掉。检查边缘NoData。如果DEM被裁剪得比较“抠门”研究区边缘紧贴数据边界产出的河网在边界处会出现大量不闭合的伪沟道微流域面也会很奇怪。所以裁剪时务必向外扩出缓冲区至少留出0.5到1公里的余量提取完成后再把多余部分裁掉。有条件的话对比几条真实水系。找研究区内一条已知河道或者在高分辨率影像上找一条明显沟道把填洼后的流向图层叠上去看看主流方向是否大致吻合。这一步看起来像“手工作坊”但能省掉后面一大半参数调试的冤枉路。2.4 练习数据怎么获取和整理这次演示用的练习数据我建议直接选公开平台上的ASTER GDEM V3 30m数据范围挑一个低山丘陵的小流域面积几十平方公里即可。因为不同平台的DEM文件体积大、许可条款也不一样直接挂链接反而不一定适合你自己的研究区从“地理空间数据云”这类公开平台按“ASTER GDEM 30m”检索选一块你熟悉的低山丘陵区下载再按本章的方法做投影和裁剪效果完全一样而且你对数据来源心里有数。文末我会把这套练习数据的关键整理参数列出来照着做就能跟着全文步骤跑通。3. 填洼、流向、汇流累积三个工具的水文逻辑3.1 填洼Fill不是无脑“铲平”洼地指DEM中没有出水口的局部低点。水流进洼地之后按D8逻辑无法继续往下游走所以必须先填洼。ArcGIS的填洼工具在“Spatial Analyst工具 → 水文分析 → 填洼”它会把洼地内部的像元抬高到与最低溢出点齐平相当于在虚拟地形里把内流盆地的水面抬到能外溢的位置。但这里有一个自然的疑问真实地形也有洼地比如喀斯特漏斗、人工水塘全都填掉符合实际吗对微流域提取来说这个取舍其实不算纠结。我们通常用的30m或12.5m DEM本身很难准确刻画小型封闭洼地其中大部分洼地都是数据插值和采集误差造成的伪洼地不填掉会导致河网中断后续什么都做不了。如果研究区确实存在大片真实洼地比如圩区、湖区、喀斯特区正确的做法是换更适合的算法或更精细的地形数据而不是在ArcGIS里强行填。实操上填洼工具有个可选参数Z limit中文版一般叫“z限制”含义是最大填挖深度。默认不填时会把所有洼地都填到能出水实测会发现提取出来的平坦区域特别多设置成几米到十几米的z限制可以避免把深度异常大的“坑”也一并填平。我以前在西南喀斯特地区试过不设限制时很多地下暗河对应的地表洼地被填出一大块平地河网形态完全失真设置Z limit后虽然保留了部分洼地但整体水系形态明显更接近实际情况。3.2 流向Flow DirectionD8算法的入口填洼完成后第二步是计算每个像元的水流方向。ArcGIS的“流向”工具默认采用D8算法每个像元看向周围8个邻域选出具有最大下降坡度的方向输出为1、2、4、8、16、32、64、128这8个二进制编码值分别对应东、东南、南、西南、西、西北、北、东北。第一次看到流向栅格属性表的人可能会吓一跳觉得数值像乱码。实际上这是ArcGIS为了在单波段栅格里同时存8个方向而采用的位编码方式后面所有水文分析工具都能识别这套编码。你不需要把每个方向值背下来但至少要会查看用识别工具点开某个像元看值和方位是否合理。补充一点ArcGIS Pro较新版本里流向工具增加了多流向算法选项比D8更适合在平坦地区模拟水流扩散。但微流域提取通常还是建议用D8原因是后续的河网链接和分水岭都建立在单流向假设上用多流向虽然“更真实”输出却很难稳定切分出一个个明确的单元。简单场景用D8复杂平原地带可以做对比测试再决定。3.3 汇流累积Flow Accumulation上游像元数怎么读流向栅格出来后用“流量”工具累计每个像元上游汇入的像元数量。这个工具的中文翻译确实容易误导它的输出不是水量而是上游像元计数。默认情况下每个像元权重是1输出值就是汇入这个像元的像元总数你也可以在工具里传入一个权重栅格比如用降水或径流系数给每个像元加权那输出就变成累积权重。理解这一点对阈值设定至关重要。比如30m DEM下单个像元面积900平方米如果河网起始处汇流累积值是1500那意味着该处的上游集水面积大约为1500×900/1,000,000约等于1.35平方公里。你在栅格计算器里写的阈值本质上是在规定“至少要汇聚多大面积的来水才算是河道起点”这个“面积”就是微流域单元尺度的开关。实操时建议先不要急着填阈值把汇流累积图层用符号系统里的“拉伸”方式显示找找河道从山坡冲沟过渡到正式沟道的位置再结合目标单元面积反推阈值。比如想得到1平方公里左右的小单元30m分辨率下阈值大约取1111像元想得到5平方公里阈值约5556像元。具体换算在下一章演示。4. 从河网到微流域边界完整操作链路4.1 阈值提河网栅格计算器的核心表达式在ArcMap或ArcGIS Pro里栅格计算器的表达式是Con(flowacc 1500, 1)含义是凡汇流累积值大于等于1500的像元赋值为1其余为NoData得到河网栅格。这里1500就是阈值。我在实际测试里发现很多人喜欢用“大于0”来试结果河网像毛细血管一样密密麻麻后面分水岭面全是碎片明显不具备可用性。阈值到底取多少建议结合第2章的目标面积来反推。以30m DEM、目标微流域平均面积1到2平方公里为例整理一个参考表DEM分辨率目标单元面积建议阈值像元单元面积换算30m约1平方公里1000~15000.9~1.35平方公里30m约2平方公里2000~25001.8~2.25平方公里30m约5平方公里5000~60004.5~5.4平方公里12.5m约0.5平方公里2500~30000.39~0.47平方公里12.5m约1平方公里6000~65000.94~1.02平方公里注意这个表只是一个起点。不同地形的河网密度差异极大黄土高原沟壑区和南方丘陵区用同样的阈值提取效果可能一个太密一个太疏。所以每换一个研究区都要先做两三次阈值试验对比河网形态再定最终值。4.2 河网链接与分水岭为什么必须是Stream Link有了河网栅格之后如果直接拿它去做分水岭工具输出往往不是按河段分割的微流域而是把整个河系当成一个整体去圈范围完全得不到一个个小单元。正确的做法是先运行“河网链接”工具。河网链接的输入有两个流向栅格和河网栅格。它会遍历河网在两条河的交汇点之间、以及河源到第一个交汇点之间给每一小段赋予一个唯一ID。比如一张河网里有120条河段输出栅格的值就是1到120。每一段都对应一个倾泻点和一块相对独立的上游集水区。接下来运行分水岭工具输入流向栅格和河网链接栅格软件会以每一段为出口生成该段对应的汇水区域输出栅格的值正好对应河段ID。这一套组合拳下来就会得到n个栅格化的微流域单元。这也是微流域和只有一个流域出口的普通流域提取之间最核心的技术差异。4.3 栅格转面与后处理让单元边界能入库、能制图分水岭输出是栅格通常还要转成矢量面才能用于后续面积统计、制图或模型输入。操作用“转换工具 → 从栅格 → 栅格转面”。转完之后做三件事按面积筛选。栅格转面会生成一些面积很小的碎屑图斑主要来自河网栅格中被阈值截断的细小分支和边缘效应。打开属性表新建一个Double类型的Area字段用计算几何算面积然后按Area筛选删掉小于目标单元面积十分之一的小图斑。用“消除”工具把筛选后剩下的碎屑合并到相邻的最大面积多边形中或者直接用“融合”按Gridcode字段合并避免碎屑造成拓扑碎片。对边界做轻度平滑。ArcGIS制图表现里有平滑工具但注意平滑容差不要设得太大设成DEM像元大小的1到2倍即可。否则边界会和真实分水岭偏差太多后面验证时会很尴尬。4.4 可直接照做的完整流程清单把上面几步串成一份可以抄作业的清单顺便标注每个步骤在ArcGIS中文界面下的菜单位置数据准备下载DEM → 投影栅格 → 按掩膜提取并留缓冲区。Spatial Analyst工具 → 水文分析 → 填洼输入投影后的DEM输出Fill_DEM。水文分析 → 流向输入Fill_DEM输出FlowDir_DEM。水文分析 → 流量输入FlowDir_DEM输出FlowAcc_DEM。地图代数 → 栅格计算器Con(FlowAcc_DEM 阈值, 1)输出StreamGrid。水文分析 → 河网链接输入FlowDir_DEM和StreamGrid输出StreamLink。水文分析 → 分水岭输入FlowDir_DEM和StreamLink输出WatershedGrid。转换工具 → 从栅格 → 栅格转面输入WatershedGrid输出WatershedPolygon。属性表 → 新建Area字段 → 计算几何按面积筛选、消除碎屑、融合。如有需要再用“分区统计”计算每个微流域的平均高程、平均坡度等属性。这套流程在ArcMap 10.x和ArcGIS Pro里都能跑通工具名略有差异Pro里直接搜“水文分析”也可以定位工具。中间栅格建议统一命名为拼音或英文避免中文图层名里的空格和括号导致栅格计算器表达式报错。5. 真实操作中的坑与排查思路5.1 汇流累积图全黑或全白怎么排查出现这种情况十有八九是流向栅格没算对或者填洼之前没有做投影。先检查流向栅格的属性表如果有大量NoData或值分布特别不均匀回到填洼那一步重新检查。还有一种常见情况是栅格计算器表达式里图层名带了特殊字符比如中文名中的空格和括号导致表达式报错却只输出一张全空栅格。所以操作前把所有中间栅格统一重命名为英文或拼音这是最省心的习惯。另外Flow Accumulation输出全白也可能是显示拉伸方式问题。先右键图层属性在符号系统里选择“拉伸”再调整拉伸类型别急着认定数据坏了。5.2 河网出现“平行线”和“麻线”状噪声这是低山丘陵区很常见的问题根源是填洼后的地形存在大范围完全平坦的区域。在平地上D8算法无法确定唯一最陡方向只能落向旁边固定方向形成一条条平行线。排查思路是对比填洼前后的DEM确认研究区是否存在比较大的人工平整区比如耕地、河谷阶地。如果是微起伏地区可以在流向计算前对DEM做一个很轻微的平滑比如用焦点统计取3×3均值再与原DEM按0.2到0.3的权重叠加打掉极小的纹理噪声。注意别把真实沟谷抹掉做完要叠加影像检查。如果某个区域实在平坦到没有水文意义也可以接受局部平行河网但要在后续面积筛选时把这条沟产生的过长过窄单元单独识别出来必要时手工编辑调整边界。5.3 碎屑图斑太多是哪里来的碎屑主要来自两个地方一是河网栅格中被阈值切断的细小支流末梢二是分水岭栅格边缘的溢出区域。栅格转面后删碎屑是正常操作。不过如果你发现碎屑占比特别高、超过总图斑数的20%说明阈值选小了、河网太密退回第4章把阈值提高20%到50%重新试比后处理反复删要省事得多。我一般习惯先用三个阈值各跑一遍河网比如1000、1500、2500比较河网形态和单元面积分布选一个最合适的再继续往下走绝不一次性在一棵树上吊死。阈值的选择是整个流程里最值得花时间的地方。5.4 练习数据怎么整理以及后续扩展方向练习数据整理的关键参数如下直接复刻即可数据源公开平台的ASTER GDEM V3 30m数据按目标研究区检索下载。范围几十平方公里的低山丘陵小流域四周比研究区多留约1公里缓冲区。坐标系原始WGS84地理坐标系 → 投影到UTM 50N中部地区输出像元大小指定为30m。格式保存为GeoTIFF.tifNoData值在属性里统一设置避免后续工具识别不了。做完微流域单元继续往下走的话可以叠加填洼后的DEM用“分区统计”给每个单元算平均坡度、平均高程、面积、周长等指标。把这些字段挂到面属性表后按坡度分级做水土流失风险评价或者导出为shp作为SWAT模型的子流域输入。这些扩展和微流域提取完全共用一套工具链熟练之后非常顺手。最后再说一个我自己的习惯每次跑完分水岭我不会直接采用结果而是先把边界叠到高分辨率影像上抽查几条沟道看看划分线是不是沿着山脊走。毕竟栅格计算器里的几个参数只是引导最终输出合不合理还是需要用真实地形来把关。水文分析这种事软件是辅助最后拿主意的还是自己的地形判读能力。我大概是2017年开始用这套流程做小流域划分的最早也是照着网上教程一步步点花了两天才跑出一个能看的结果。后来踩的坑多了才明白水文分析这套工具真正难的从来不是按钮在哪而是你怎么理解那个汇流累积值怎么根据自己的数据去定阈值。把这个想通了微流域单元提取就是一条流水线剩下的只是熟练度问题。希望这篇东西能帮你少走我当年走过的弯路。