ARTICLE DETAIL

资讯详情

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

ArcMap流域分析全流程:从DEM到流域边界的实操指南

ArcMap流域分析全流程:从DEM到流域边界的实操指南 第一次用ArcMap跑通流域划分、真正输出一张从DEM到流域边界的专题图那种兴奋感我到现在还记得。这张流域图听起来只是水文分析里的入门练习但它背后串联了DEM预处理、流向计算、汇流累积、河网提取、分水岭划分再到地图制图的一整条链路每一步都在教你怎么让计算机“理解”水往哪流。做完这张图你对栅格分析、数据流处理和GIS出图的理解都会上一个台阶。这篇文章适合两类人看一类是刚接触ArcMap、想找一份能直接跟着操作的流域分析教程的学生和从业者另一类是已经能跑通流程、但总觉得结果“哪里不对”的人——比如提取的河网断断续续、分水岭边界畸形、面积算出来偏差大。我会先把流域分析背后的核心逻辑讲明白再给出一套完整的实操流程最后把我踩过的坑和排查方法整理成清单你照着走至少能少折腾两三个晚上。1. 流域制图的整体思路与核心原理流域分析不是一步到位的它是一条数据链原始DEM → 填洼 → 流向 → 汇流累积量 → 设定阈值提取河网 → 确定出水点 → 分水岭 → 流域边界。新手最容易犯的错误就是直接跳到最后一步或者只记得点工具却不知道每个工具在算什么一旦结果不对连从哪里排查都不知道。1.1 流域在GIS里到底是怎么被“算”出来的先建立一个直观概念。你可以把DEM想象成一块起伏不平的地形模型每一格都带着一个高程值。水从天而降落在山坡上会沿着最陡的方向往下流汇入沟谷沟谷汇成河流河流再汇进主河道最终从一个出口流出——这个出口就是“出水点”而它所对应的整个汇水区域就是“流域”或者叫“汇水区”。ArcMap里的水文分析工具箱就是在模拟这个过程。它的核心算法叫D8单流向算法对每个栅格单元系统会检查它周围8个邻居栅格计算高度差找出落差最大的那个方向作为水流方向。然后根据水流方向计算每个栅格“接收”了多少上游来水这个量就是汇流累积量。累积量越大的栅格越有可能是河道。最后根据河网上的出水点回溯出所有能流到这个点的栅格集合这就是分水岭也就是流域范围。用一句生活化的话说ArcMap不是在“画”流域而是在“模拟水滴走路”。理解了这句话后面所有的参数设置你都能自己判断合不合理。1.2 为什么选择ArcMap而不是别的工具现在能画流域图的工具不少比如QGIS里有r.watershedPython里也可以用pysheds、WhiteboxTools这些库写脚本。但ArcMap至今仍然是很多人第一次做流域分析的首选原因在于它的成熟度和可视化调试能力。ArcToolbox里的Hydrology工具集把填洼、流向、汇流累积、河网分级、分水岭这些步骤拆得清清楚楚每跑完一步都会生成一个中间栅格产物你可以随时叠加到原始DEM上看到底哪一步出了问题。代码写出来虽然自动化程度高但对新手很不友好——流向数据在内存里调整半天你都不知道错在哪。ArcMap的图形化界面则是“边跑边看边改”对建立空间数据思维非常有帮助。另外一点很现实虽然ESRI现在主推ArcGIS Pro但很多高校教学、老项目和单位内网环境还在用ArcMap10.x版本的教程和经验帖存量极大。你遇到的绝大多数问题输入关键词都能搜到前人留下的解决方案。从这个角度说ArcMap是入门流域分析性价比最高的选择。2. 从DEM到流域边界ArcMap实操全流程下面进入正题。我以ArcMap 10.8为例把从数据准备到生成流域边界的全过程拆开讲。你会注意到我特别强调“每个中间产物都要检查”这个习惯能帮你省下大量返工时间。2.1 数据准备DEM下载、坐标系检查和预处理做流域分析第一步是搞到一块质量合格的DEM数据。国内可以从地理空间数据云下载ASTER GDEM或者SRTM数据数据精度一般在30米左右做中大尺度的流域分析完全够用精度要求更高的话可以用ALOS 12.5米数据。国际上常用的是USGS EarthExplorer。下载时注意选择你研究区完全覆盖的范围如果流域跨了好几景数据先拼接Mosaic To New Raster再裁剪Extract By Mask保证数据范围完整。拿到DEM之后第一件必须做的事是检查坐标系。很多从网上下载的数据默认是WGS84地理坐标系以度为单位。地理坐标做流域分析不是不行但后续算面积、算河网长度都会遇到单位混乱的问题。我建议在一开始就把DEM投影到合适的投影坐标系。国内一般用CGCS2000 / Gauss-Kruger投影或Albers等积投影如果你用的是WGS84椭球就投影到UTM对应分带。选择投影时注意你这片区域所在的带号选错了带会导致结果出现非常大的形变。检查坐标系的方法很简单在ArcMap里加载DEM右键图层打开属性切到“源”选项卡看“空间参考”一栏。如果显示的是GCS_WGS_1984就用ArcToolbox里的Project Raster工具给它做一次投影变换输出像元大小可以设为30米或你需要的分辨率。接下来是填洼这一步是整个分析里最容易被忽略但又最关键的一环。自然地表存在很多低洼地水会积在坑里不往外流如果不处理后续的流向计算就会在这里“卡死”生成的河网就断了。填洼工具在Spatial Analyst工具箱 → Hydrology → Fill输入DEM输出填洼后的DEM。Z limit参数一般不用动软件会按默认值把所有洼地填到能出水为止。2.2 流向计算与汇流累积量理解一、二、四、八填洼完成后就可以计算流向Flow Direction了。打开Hydrology工具集里的Flow Direction输入填洼后的DEM输出数据类型选择默认的Integer。跑完之后你会得到一张每个栅格数值都是1、2、4、8、16、32、64的栅格图这些数值不是随便定的它们对应东、东南、南、西南、西、西北、北、东北8个方向。这个编码方式是二进制的位运算设计方便存储和计算但新手看的时候很容易懵为什么方向是“东南西北”却是数字你只需要记住流向栅格里的数字不是高程值是方向代号。比如数值1代表水流向正东4代表流向正南64代表流向正北。分析过程中如果看到这个栅格把它换成“分类显示”或者用独特的色带渲染能直观看到水流方向的整体趋势。流向算完后就是汇流累积量Flow Accumulation输入就是流向栅格。输出的累积量栅格里每个像元的值表示有多少个上游像元的水流汇入该像元。值越大的区域就是沟谷甚至河道值小的区域就是坡面。这里有一个很实用的检查技巧把累积量栅格用“拉伸”或“分类”渲染调一调符号你基本上就能用肉眼看出一张“河网图”的雏形。2.3 河网提取、分级与出水点确定累积量栅格只是一个连续变化的数值面我们需要设定一个阈值把它二值化大于阈值的就是河道小于阈值的就不是。这一步在ArcMap里最常用的做法是栅格计算器打开Spatial Analyst工具 → Map Algebra → Raster Calculator输入条件表达式例如SetNull(flowacc 1000, 1)意思是如果汇流累积量小于1000就设为空值大于等于1000的地方设为1。这个阈值是经验值没有统一标准。阈值越小提取出的河网越密集、支流越多阈值越大河网越稀疏、只保留主河道。新手可以先从1000起步看看效果再调。判断标准是河网形态要符合实际地形不要碎成渣也不要稀疏到连主河道都断掉。如果你希望河网带分级信息可以在已有河网栅格的基础上用Stream Order工具按Strahler分级方法给河流分等级。一级河流是源头最细的支流两条一级汇流成二级以此类推。这个分级结果对后续出图非常好用可以用不同粗细的线来表示不同等级的河流。河网有了接下来要确定出水点。ArcMap里有一个快捷方法用Basin工具直接提取整幅DEM中所有独立的流域盆域它能一次性算出图中所有洼地系统对应的流域范围。如果只需要某个特定流域就得自己指定出水点用Watershed工具提取。具体做法是先根据河网栅格选出你关心的那一条河道位置用栅格计算器生成一个只在该位置为1、其余为空值的点栅格然后用Watershed工具输入流向栅格和这个点栅格就能得到该出水点上游的汇水区。这里有个大坑出水点位置必须精确落在河网栅格上偏移一格都可能让结果变成一片空白或者一个畸形区域。比较好的办法是先用手工数字化一个点图层再做Snap Pour Point操作把出水点自动吸附到累积量最大的河网像元上。2.4 分水岭矢量化与平滑处理栅格形式的流域范围是一格一格的锯齿状边界这在实际出图和后续分析中都不够用需要把它转成矢量面。用Raster to Polygon工具输入分水岭栅格把“简化面”选项勾上就能得到面要素。如果流域内部有空洞、碎斑可以在转换前先用栅格计算器或区域合并工具把分水岭栅格里的孤立像元处理掉避免生成几十个碎面。转换后的矢量边界往往带着明显的锯齿这种边界在专题图上很难看。你可以用Cartography工具箱里的Smooth Polygon工具做平滑容差设得越小越贴着原始边界设得越大越圆滑。我一般设20到50米左右。注意平滑只能用于出图如果后续要做水文模拟计算最好还是用未平滑的原始边界因为平滑容易改变面积和形状。到这一步你已经有了完整的矢量流域边界、河网线、填洼后的DEM和流向数据。第一张流域图的“灵魂”已经具备了剩下的就是怎么把它呈现得漂亮。3. 制图出图把分析结果变成一张专业专题图很多人跑完分析就觉得完事了其实制图出图才是让成果“拿得出手”的关键一步。ArcMap的制图能力非常强但默认设置非常朴素新手导出的图常常被批评为“不够专业”。这里我分享一下我在实际出图时用的流程和参数。3.1 布局视图与图层符号化设置先把ArcMap界面切换到布局视图菜单栏“视图”→“布局视图”。你会看到一张白纸这就是你的出图区域需要在上面调整数据框大小让研究区填满整张图。我习惯的页面设置是A4横向比例尺根据研究区大小手动调整保证图面不空旷也不拥挤。然后就是符号化。流域边界这一层最适合做半透明填充或淡色填充让它作为底图信息承载在上面展示DEM用高程分层设色配合斜线或山体阴影可以增强立体感河网按分级线宽显示一般一级河流用0.4毫米细线、二级用0.8毫米、三级以上用1.5毫米并换成深蓝色。如果再加上填洼前后的对比数据还可以做一个小插图对比显示显得你不仅会跑流程还懂分析逻辑。在图层属性里符号化的关键不只是选颜色还要注意分类方式。DEM建议用“分类”里的“分位数”或“几何间隔”比默认的等间距好看得多。河流建议按“唯一值”分类用“StreamOrder”字段做分级符号。3.2 图例、比例尺、指北针和导出设置布局视图里插入图例、比例尺、指北针这些要素位置要均衡不要遮挡研究区主体。图例只需要放核心图层千万不要把DEM、流向、累积量全部堆进去。一张合格的流域专题图图例一般只放流域边界、河网分级、出水点、行政区界或重要地名。比例尺和指北针默认样式虽然丑但微软雅黑、思源黑体这些中文字体挂上去之后效果会好很多。导出图片时文件菜单“导出地图”格式选PNG或TIFF分辨率至少300dpi这样放大或者打印出来才够清晰。很多人在这一步选了默认96dpi导出之后字全是虚的这是新手出图最常见的问题之一。如果你需要让图层在布局中实现任意旋转、拉线标注等灵活排版ArcMap里还有一个好用的技巧把数据框属性里的“裁剪”选项启用可以按研究区范围精确截取显示这样在图面上不会有大量多余空白。3.3 附送一个高频需求把Excel里的经纬度数据批量转成shp热水搜词里“怎么把Excel中经纬度数据导入ArcMap生成shp文件”是一个非常高频的问题而且和流域制图经常结合使用——比如你手头有雨量站、水文站的点位表想叠加到流域图上做分析。步骤其实非常简单先在Excel里把数据整理成规范表格字段名建议直接用英文比如Longitude、Latitude、站点名称等数量不要太多文件保存为xlsx或csv都可以。然后打开ArcMap点击“文件”→“添加数据”→“添加XY数据”选择你的Excel表X字段选LongitudeY字段选Latitude坐标系如实选择WGS84经纬度。点击确定后表格会以事件图层的形式显示在地图上。此时它还不是shp文件要右键该图层选“数据”→“导出数据”指定保存路径和名称导出的就是独立的shp点图层了。导完记得把原来的事件图层移除再把新shp加进来否则后面又容易误操作。经纬度进到ArcMap后经常会出现点位跑到很离谱的位置十有八九是字段选反了或者坐标系选错。再多说一句经度是X纬度是Y别搞反了我见过不少老手在导Excel时都在这里翻过车。4. 新手最容易翻车的5个问题和排查思路做第一张流域图踩坑几乎是必然的。我把带过的学生和自己在工作中遇到的高频问题整理出来附上排查思路你遇到问题可以直接对号入座。4.1 填洼之后河道还是断的流向栅格“卡死”这是最常见的问题。现象是提取出来的河网走到一处就突然消失或者上游一大片区域都没有累积量。多半是原始DEM里有大量平地和人为修饰过的地形水流方向没有明显梯度软件不知道让水往哪走。排查方法先看填洼后的DEM是不是还有大片平值区。如果有可以尝试在流向计算前用Focal Statistics做一次低通滤波把局部地形做一点平滑处理。另一种做法是设定一个最小河道长度阈值把特别短的支流剔除而不是调整填洼参数因为过度填洼会破坏真实地形特征。4.2 用Watershed工具提取分水岭结果是一片空白这个现象十有八九是出水点位置没有落在河网上。你可以先检查出水点栅格和流向栅格在空间上是否完全对齐投影坐标系是否一致。如果投影不一致比如一个用WGS84一个用UTM就算位置看着对实际单位不同也会导致结果异常。推荐的做法是使用Snap Pour Point工具。它会把你的点位自动吸附到设定半径内累积量最大的像元上这样就能万无一失地把你指定的出水点固定到河网干流上。还有一个隐蔽问题出水点栅格和流向栅格必须具有完全相同的行列数、像元大小和范围。如果两者范围不重合Watershed就会算出空值。4.3 算面积和算河长时数字明显不对面积偏差有两个常见原因一是数据还是地理坐标系单位是度直接算出来的多边形面积根本不能用二是投影坐标系虽然设置了但是投影带选错导致区域被拉长。不管哪种情况都要先确认矢量边界图层的坐标系是投影坐标系吗单位是米吗如果显示是degrees那就先Project到合适的投影坐标系再在属性表里新增Double类型字段用几何计算算出面积。河长同理线要素的长度也要在投影坐标系下计算。还有一个细节如果流域面积很大选用的投影应该是等积投影而不是等角投影否则面积误差会比较大。4.4 提取的河网支离破碎看起来不像天然水系河网断裂和碎片化的原因很复杂最常见的有两类。第一类是累积量阈值设置过低把坡面径流也当成河道了忽细忽粗。第二类是DEM噪声大特别是一些原始DEM没有经过很好的滤波处理在平缓区域会出现很多伪河道。处理方式上我建议先对DEM做一次Focal Statistics的均值滤波再做填洼和流向计算效果会比直接改阈值好很多。另外可以把Stream Order得到的结果按分级过滤只保留二级以上的河段作为主河网次级支流单独放一层显示这样图面也更干净。4.5 导出图片模糊或者栅格数据在布局里显示不了导出模糊的问题前面说过就是分辨率太低。布局视图里右键数据框属性 → 常规可以调整显示分辨率但导出时还是以“导出地图”对话框里的分辨率为准记得设300dpi以上。栅格在布局里显示不出来通常是显示比例超出了源数据的默认显示范围可以在图层属性→“常规”里关闭“仅显示栅格数据分辨率范围内的数据”选项。还有一个经常被忽略的问题布局里插入了中文图例导出的图片里中文字体变成“口口”乱码。解决办法是在导出地图前把图例文字的字体改成系统里确定存在的中文字体比如微软雅黑或黑体并且在“导出地图”对话框里勾选“将地图的字体嵌入到导出文件中”。5. 把流程固化下来从第一张图到自动化批处理做完第一张流域图之后你其实已经掌握了ArcMap水文分析的核心链路。我强烈建议你把整个流程用ModelBuilder串起来让ArcMap自动执行一遍这样以后换一块DEM、改一个阈值只需要重新输入数据十几分钟就能出一张新流域图。具体操作不难在ArcToolbox里右键 → 新建 → 模型把填洼、流向、累积量、栅格计算器、分水岭、栅格转面这些工具依次拖进模型窗口一个个连接起来最后把DEM路径和阈值设置成模型参数。保存好之后这就是你私有化的小工具。再把整个模型发布成Geoprocessing服务后续给同事用都非常方便。如果你要做的流域范围比较大、数据量很多台栅格计算会很吃内存。我遇到过一台普通办公电脑跑一个3000×4000格网的累积量需要十几分钟这时候可以先把DEM重采样到60米分析出轮廓后再局部用高分辨率数据细化效率会提升很多。另外如果你想把成果共享到团队或发布成在线地图可以结合热搜里提到的PostgreSQL空间数据库把shp导入PostGIS通过ArcSDE或者直接连接在ArcMap里读取再配合ArcGIS Server发布要素服务。这套组合很适合多人协作和Web端展示但那是后话第一张流域图你把分析逻辑吃透这些扩展都是水到渠成的事。踩过几次坑之后我自己的体会是做流域分析卡住你的往往不是工具不会用而是对每一步在算什么没有概念。ArcMap把过程拆得很细这反而是好事——你每点一次鼠标都应该问问自己这一步改变了数据的什么属性。等你想明白了不但ArcMap熟练了换个QGIS、换套Python代码也一样跑得通。第一张流域图只是个开始后面洪水淹没、径流模拟、水资源评价都是在这个骨架上搭肉。
返回列表