黄河流域DEM数据处理与流域面积提取流程详解
简介一份黄河流域综合地理信息数据集面向GIS、水利、环境及城乡规划领域的科研人员和从业者可用于地形分析、水文建模、流域管理与制图表达。资源共178个文件以shp矢量数据、dbf属性表、tif高程栅格、gdb地理数据库及xls表格为主压缩包约36.07MB结构清晰便于分类使用。目前已有1068人学习下载。数据集内含黄河流域数字高程模型、干流与支流走向、湖泊分布、城市点位、流域界线及黄土高原地区界等多类地理要素依托这些数据可计算坡度坡向、提取水系网络、划定汇水范围也可结合GIS软件进行污染源分布、水资源配置和生态敏感性分析。对于需要开展黄河流域空间规划、科研制图或本底调查的用户这份资料能节省大量数据预处理时间直接支撑多场景研究工作。1. 先聊聊我看到这套黄河流域数据的第一反应网上有人分享了一套黄河流域的数据集评论区一片点赞。我点进去翻了翻文件列表第一反应是这种把DEM和流域资料打包整理好的活儿终于有人干了。以前自己想凑齐黄河流域的基础数据得跑好几个平台下载几十个分块文件再花一整个下午拼接对齐还不一定保证坐标系统一。为什么黄河流域数据历来难凑齐这里先解释一下。黄河从青藏高原出发穿过黄土高原、河套平原、华北平原横跨好几个大的地貌单元。不同地形区域的数据来源不同精度差异大发布机构也不同。比如上游需要高精度的高山峡谷数据中游黄土高原需要能看清冲沟和塬面边界的精细DEM下游平原又得注意建筑和灌渠的干扰。过去做一次全流域的GIS分析光前期数据整理就能把人磨到没脾气。这套数据集至少帮后来者省下了最繁琐的一步说一句“资料很详细”真不是客套话。但拿到数据只是开始。黄河流域的数据集里到底包含什么、怎么判断精度够不够、DEM提取流域面积的流程该怎么走、黄土高原这种特殊地形有什么隐藏的坑这些问题才是更值得展开聊的。这篇文章我就从这套数据集出发把实际使用的经验和方法一次说清楚。2. 数据集内容盘点不只有DEM2.1 数据分层能对应哪些实际需求从标题描述看这套数据至少包含以下图层黄河流域城市点、干流线、湖泊面、流域界线、重点支流线、黄土高原地区界线以及DEM栅格数据。逐个分析一下它们的实际用途。城市点是流域内主要城镇的位置看起来简单却是很多分析的基准层。比如判断一条支流周边有哪些县城、评估洪水影响范围涉及多少居民点、分析污染源与城市排污口的空间关系都离不开这个点层。没有准确的城市点空间关联分析就缺了骨架。干流和重点支流线作用非常大。我拿到DEM后第一件事就是做河网提取但提取结果是否可靠不能自己说了算需要参照权威的矢量水系来做对比。官方干支流线就是最直接的“标尺”。如果提取的河网与矢量水系大体吻合说明填洼、流向这些环节处理得当如果明显偏出那就要回头查参数设置。所以这套数据里的干支流线既可以直接用于成图也可以当作水力分析的质量验收参照。湖泊面层适合做蓄滞洪区和湿地分布分析。黄河流域的湖泊虽然不如南方密集但像乌梁素海、红碱淖这些水体在区域生态研究中是绕不开的。流域界线则决定了分析范围汇水统计、面积计算都要以它为准绳。让我比较意外的是黄土高原地区界也单独成层这种边界通常藏在学术报告附件里能直接拿到矢量形式做水土流失分析时可以少画不少线。2.2 DEM的底细与坐标系问题DEM是整个数据集的核心。按现在主流的公开数据源来看黄河流域常用的DEM有三种SRTM 90米、ASTER 30米和ALOS 12.5米。标题没说具体分辨率但从“资料很详细”这个评价推断大概率是12.5米或30米的产品。12.5米分辨率的数据一般由ALOS PALSAR传感器生成可以从ASF和OpenTopography平台下载。这个分辨率在黄土高原地区表现相当出色冲沟、塬面边界、破碎地形都能看出层次。不过要提醒一句ALOS 12.5米数据的坐标系通常是WGS84有些国内数据源的成果却用的是CGCS2000或者Xian 1980。拿到手先别急着分析打开属性面板确认坐标系再统一投影到适合黄河流域范围的中部Albers等积圆锥投影或UTM 49/50带。很多人处理DEM时出现面积结果偏差根子往往不在算法而在坐标系没统一。2.3 12.5米分辨率是一把双刃剑12.5米听上去肯定比30米更精细但实际使用是有代价的。第一是文件体量全流域范围的12.5米DEM镶嵌和渲染都极其吃内存笔记本电脑经常转圈转到怀疑人生。第二是在河套灌区这类人工地貌明显的区域田垄、灌渠、排水沟在12.5米DEM上都会被识别成线性凹槽提取水系时容易混入大量人工沟渠造成伪河网。我的建议是差异化的用法。黄土高原沟壑区、峡谷段做重点分析时优先使用12.5米数据做全流域性的概览和制图时30米数据更稳计算效率也高。两层DEM互补使用比一味追求高分辨率更理性。另外经常有人搜索“DSM生成DEM”顺带说一句DSM是包含建筑物和树冠的地表模型要生成真正可用于水文分析的DEM需要先做滤波把非地面点剔除再插值成连续地面。这套数据集里如果直接提供的是DEM说明已经有人帮你处理好了这一层省心不少。3. DEM在流域分析中的用途从下载到出图3.1 下载DEM的靠谱渠道与预处理心态如果手上没有现成DEM需要自己下载我常用的渠道是OpenTopography和ASF。OpenTopography支持按框选范围下载SRTM、ASTER等多种产品页面操作直观适合需要批量下载的人。ASF则是ALOS 12.5米数据的主要分发渠道注册后可以按轨道号或地理范围检索下载速度也比较稳定。下载时有几个细节值得注意。一是要先用流域界线的外接矩形去圈定范围不要下载整景不留余量否则数据量太大后续镶嵌和裁剪都变慢。二是下载前确认输出格式和坐标系尽量统一下载成GeoTIFF避免后续格式转换引入误差。三是记录好每块数据的来源和时相不同时期的DEM在河谷地区可能因水库水位变化存在高程差异这会影响后续镶嵌质量。3.2 镶嵌与裁剪先把数据拼齐从平台下载的DEM通常是一块一块的拼接是绕不开的步骤。我习惯用ArcMap里的Mosaic to New Raster做镶嵌但有两个经验补充分享一下。第一镶嵌前必须把所有分块的像素类型、波段数和坐标系统一。比如有的块是16位整型有的是32位浮点型直接拼接会在接缝处形成错误的像素值过渡看起来像一个亮一个暗。第二重叠区域要检查。如果两块数据的重叠部分高程值不一致说明可能来自不同轨道或不同时相这类区域拼接后容易出现网格状接缝。简单的做法是镶嵌完成后在出现接缝的地方用局部平滑或重采样处理。裁剪时也有一点心得先用流域界线的外接矩形切一遍减少数据范围再用精确边界掩膜提取这样速度更快而且边界区域的可控性更好。3.3 用DEM计算河流流域面积的操作逻辑很多人搜索“ArcGIS用DEM计算河流流域面积”我来把这个过程拆开讲清楚。它本质上是ArcToolbox中Hydrology工具集的流水线组合步骤并不复杂但每一步都有思维陷阱。第一步是填洼Fill。DEM里存在很多由高程噪声造成的虚假凹陷不填掉的话水流会在里面打转流不到下游。第二步是流向Flow Direction常用的D8算法会把每个像元的水流方向指定到最陡的下坡邻域。第三步是流量累积Flow Accumulation统计每个像元上游到底汇入了多少个像元的水量这个值越大越可能是河道。第四步是设定阈值把流量累积超过某个值的栅格提出来转换成矢量河网。最后一步是用Watershed工具指定出水口位置回溯生成子流域边界。流域面积其实不是直接由一个公式算出来的而是Watershed生成的子流域矢量之后用几何计算工具求的。关键在于出水口要定准出水口偏移几个像元上游集水区范围就会明显变形。整个流程里填洼的质量决定了流向的正确性流向正确性又决定了后续所有结果所以预处理阶段多花时间是值得的。4. 我实际做过的DEM处理流程含Python4.1 填洼、流向、累积量的一连串步骤我在处理黄河流域资料时用的是一套混合流程先用ArcMap做可视化预览和人工检查再用Python做批量计算遇到特殊地貌再手动调参。整套流程按顺序执行下来基本可以覆盖大部分分析需求。填洼不能无脑用默认参数。默认填洼会把所有低于周边一个像元的坑全部填平这在较平坦的地形上没问题但黄土高原上有很多天然的坝地和侵蚀洼地一旦被全部填掉后续水系提取就会丢掉真实地貌信息。一个折中的办法是设置限制条件只填充深度小于特定阈值的洼地或者采用不完全填洼的算法保留那些确实有水文意义的洼地。流向计算完成后流量累积量是一个大栅格直接看会非常花需要用累积量值的对数拉伸或分级渲染来观察。4.2 用Python批量叠加DXF等矢量数据“DEM和DXF叠加”也是高频搜索词这套需求常见于工程项目手上有大量CAD格式的边界线、房屋点、钻孔位置需要叠加到地形表面上。核心问题就是坐标基准不统一。我之前处理过一个项目甲方提供了几百个DXF点文件需要与12.5米DEM叠加显示手动在GIS里一个个导入再配准工作量很大。后来改成用Python的rasterio库读取DEM取得它的仿射变换参数和投影信息再用osgeo.ogr读取DXF矢量先检查投影是否一致不一致就用osr.CoordinateTransformation做投影转换最后把矢量坐标换算成DEM像素坐标。这样不仅能在图像上叠加显示还能直接提取出每个点所在位置的高程值批量输出成表格。这套流程的核心是投影转换必须明确不能靠肉眼对齐。4.3 ArcMap和QGIS中镶嵌DEM的不同手感ArcMap里镶嵌DEM遇到“颜色很怪”的问题是常态。我调试过很多次发现大多数情况下不是数据坏了而是默认渲染方式坑人。DEM灰度拉伸的范围如果不对不同分块的亮度反差会被放大看起来像拼接出了巨大的高程断层。解决办法很简单在图层符号系统里选择Percent Clip拉伸或者切换到一个统一的色带马上就会正常。QGIS处理镶嵌更轻量一些我常用Raster菜单里的Build Virtual Raster搭建一个虚拟栅格它不复制数据只在后台建立索引打开大范围DEM时几乎不占内存。虚拟栅格可以直接参与后续分析也可以等到最终结果需要固化时再实际合并。对于动辄几个GB的黄河流域DEM来说这个特性实在太有用了。5. 黄土高原特殊地貌下的数据处理经验5.1 大起伏地形中填洼参数的调整黄土高原的地貌特点是塬、墚、峁和冲沟交错高差大、细沟发育。最典型的一个坑是默认填洼完成后提取出来的河网变得一段一段的像被切断一样。排查原因后发现深切的冲沟中存在大量“伪洼地”这些区域在DEM里高程比周边低但并非真正的集水洼地而是沟道里的噪声点。默认填洼把它们全填平改变了局部汇水方向河网自然就乱了。解决思路有几个方向。一是把填洼深度限制在一个较小范围只填掉低于周围一定值的像元保留沟道内的自然起伏。二是先用低通滤波对DEM做平滑去除高频噪声再填洼。我实际用下来先轻微平滑再限制深度填洼提取的河网连续性好很多。还有一个偏技巧的做法给DEM加上一个微小的梯度增量让水流更倾向于朝某一个方向流动在平缓地区尤其有效。5.2 干流与支流提取的阈值选择提取河网时阈值的选择讲究一个“度”。阈值太小生成的河网密集得吓人很多坡面漫流都被当成河道阈值太大又只剩干流支流细节全丢。我不建议拍脑袋定一个常数更靠谱的方法是用参照矢量去反推。具体操作是这样的先算出流量累积栅格的最大值记为Max然后用0.5%、1%、1.5%、2%四个阈值分别生成河网再和数据集里的干流及重点支流线做空间相交率分析。相交率最高的那个阈值就是当前范围内最贴近真实河网的参数。这一招写进自动化脚本里可以批量处理多个子流域。在河套平原这类人工地貌强烈的区域还要加一个动作就是把灌溉渠系所在区域做成掩膜提前排除掉否则提取出的河网会呈现网格状和真实自然水系完全两回事。5.3 边界对齐流域界线与DEM的边缘效应数据集里的流域界线、黄土高原界线和DEM栅格边界往往不是严丝合缝的。用界线去裁剪DEM时边界外可能会有少量DEM像元残留在掩膜内虽然单个像元很小但周长一长统计面积和长度时误差就能累积到几平方公里。我的办法是在用Extract by Mask提取之后把结果和流域界线做一次栅格转矢量后的边界平滑剔除面积明显小于一个像元的碎块。如果分析项目对面积统计要求极高比如要出正式的径流系数报告我还建议在边界上人工检查几个关键节点确保这些位置没有出现锯齿偏差。这个步骤细碎但对成果质量的影响非常直接。6. 拿到这套数据后可以怎么玩出花来6.1 干流、湖泊与城市点的空间关联数据集里同时具备干流线、湖泊面和城市点这三层叠加起来能做的事情很多。最常规的操作是把城市点和干流线做一次Near分析计算每个城市到最近河道的距离这个指标在流域水环境评价里很常用。再把湖泊面和流域界线叠加识别出位于流域边界附近的湖泊这些湖泊对洪水拦蓄的作用和流域内部湖泊完全不同值得单独标记出来做水文分析。如果想把分析做深一层还可以把DEM转换出坡度、坡向结合城市点和支流位置评估城市上游汇水区的产流产沙潜力。这些分析放在以前往往要自己拼凑好几个不同来源的图层现在一份数据集基本上就能打通。6.2 黄土高原范围线在分析中的辅助作用黄土高原地区界线单独成层实际用途比想象中多。做统计报告时可以把黄土高原范围作为掩膜单独计算该区域内的子流域数量、河网密度、高程起伏度这些指标直接关系到水土流失治理重点区域的描述。也可以用来做城市点分布分析看看有多少城市落在黄土高原范围内配合土地利用数据进一步评估裸露地表和植被覆盖情况。我自己在做一次生态环境敏感性评估时就是拿这条界线把黄河流域切成两个大区黄土高原区执行一套指标体系其他区域执行另一套比一张图打天下合理得多。6.3 可以继续扩展的分析方向如果熟用R或Python这套数据可以延伸出很多更深入的课题。比如用DEM重新划分子流域再叠加上降雨格网数据做分布式水文模型的初步概化。也可以把湖泊、支流和流量累积栅格联合起来识别潜在的洪水调蓄节点。还可以用DEM计算地形湿度指数与黄土高原范围线叠加圈定优先治理区域。数据本身是静态的但分析思路一旦打开那这份数据就能在不同项目中反复发挥价值。我自己的感受是这套黄河流域资料最讨喜的地方不在于某一张DEM有多精细而是把干流、支流、湖泊、界线和DEM整合到了一个统一空间基准里。它让“拿到数据就能干活”这件事变成了现实。接下来要做的就是带着自己的分析目标好好用起来。本文还有配套的精品资源点击获取