
做GIS项目、无人机航测或者山区地形分析都绕不开一个东西——高程数据。我最早做某个流域的地形分析时从数据下载到能用的DEM整整折腾了两天其中一大半时间都耗在“拼接完有条缝”、“裁剪完有黑边”这类问题上。后来流程走熟了才发现这些事情本身不难难的是你在一开始就选对工具、定好参数、避开那几个老坑。这篇文章就从一线干活的角度把DEM数据从下载、拼接到裁剪的完整流程拆开揉碎讲一遍。文中会涉及具体的数据源选型思路、不同处理软件的选型对比、详细的操作步骤以及我踩过的和帮别人擦过的常见问题。不管是刚接触GIS的学生还是做测绘、遥感、城市规划的老手按着这套思路走能少走很多弯路。1. 数据源选型别急着下载先想清楚要什么分辨率1.1 主流免费DEM数据源怎么选很多朋友上来就问“哪里有免费的DEM数据”其实免费数据源并不少关键是你要什么样的分辨率。不同数据源覆盖范围、空间分辨率、高程精度、更新年代都不一样选错了直接影响后面分析和出图的精度。我用过的几款主流免费数据源先简单列个对比数据源空间分辨率覆盖范围数据特点适用场景SRTM 1弧秒约30米全球北纬60°至南纬56°2000年航天飞机雷达数据精度稳定使用最广区域地形分析、流域提取、大范围制图SRTM 3弧秒约90米全球同一数据源降采样文件小、处理快小比例尺制图、宏观地形浏览ASTER GDEM30米全球光学立体像对生成局部有云遮挡、噪点作为补充数据源需检查质量ALOS AW3D3030米全球日本ALOS卫星立体数据山区细节相对较好山区地形分析、坡度坡向计算TanDEM-X 90米90米全球德国TerraSAR-X雷达卫星数据较新部分区域精度好高纬度地区、SRTM覆盖缺口的补充这里需要特别提醒一句分辨率数字只是像元大小不代表每个区域的高程精度都一样。SRTM在水体、陡峭山区会出现数据空洞或异常尖峰ASTER GDEM的云遮挡和条纹问题也比较常见。所以下载以后千万别直接拿去用先做一轮基本的质量检查——把DEM拉伸显示看一下有没有明显的坏值、空值区域。1.2 各平台下载的实操细节数据下载渠道国内用得最多的是地理空间数据云原文中用到的下载入口之一国外是USGS EarthExplorer还有德国的DLR也可以下TanDEM-X。从我自己的操作经验来说地理空间数据云对国内网络环境友好下载速度快且集成了SRTM、ASTER GDEM等多类数据USGS的数据目录更全但界面交互相对繁琐下载速度偶尔不稳定。在地理空间数据云下载的操作路径大致是这样注册登录后在“高级检索”里选择数据集比如SRTMDEM 90M或ASTER GDEM 30M然后在右侧地图框选出你的研究区范围或者直接输入经纬度坐标范围。系统会把你选择的矩形框覆盖的所有分幅列出来勾选后批量下载。下载到的是打包的压缩文件每个压缩包对应一景标准分幅数据解压后里面是.tif格式的DEM和一个说明文档。在USGS上的路径略有不同进入EarthExplorer后点击左侧“Search Criteria”用地图拉框或输入坐标确定范围再在“Data Sets”里展开“Elevation Products”勾选SRTM 1 Arc-Second Global等数据集最后点击“Results”查看覆盖你范围的分幅列表逐条下载。这里有一个比较坑的地方是USGS默认结果页只显示几条记录你在“Results”界面要把每页条数调到最大否则很容易漏掉和你想覆盖范围相邻的分幅。下载完成之后你会发现自己手上多了好几个tif文件相邻图幅之间还有或者没有重叠区。这时候就进入下一环节拼接。在做拼接之前我一直坚持一个强制步骤先用软件快速预览一下所有分幅简单记录每幅数据的最小高程、最大高程、像素深度、有无缺测再统一建一个文件夹把它们集中管理。这个习惯在后续处理多个项目、多个批次数据时能省掉大量回溯时间。2. 多幅DEM拼接从“拼得上”到“拼得自然”2.1 拼接前必须做好的三件事拿到多个分幅的DEM先别急着扔进工具里点“拼接”。有三件检查工作缺一个后面都可能翻车。第一检查所有分幅的坐标系是否一致。常见的情况是一部分分幅是WGS84地理坐标系经纬度另一部分因为是从其他平台下载或经过预处理的已经是UTM投影坐标系。坐标系不一致拼接时要么软件直接报错要么拼出来的结果是扭曲错位的。解决办法是在ArcGIS或QGIS里先看每幅数据的属性右键图层——属性——源确认坐标系信息不一致的先做投影转换统一。第二检查分辨率是否一致准确说是检查像元大小是否一致。SRTM 30米数据下载下来有的是0.00027度左右的地理坐标像元有的则是30米整的投影坐标像元直接拼接时软件可能重采样或错位。我的习惯是统一转换到同一个坐标系和像元大小后再拼接。这样拼出来的结果是规规矩矩的矩形网格后续分析和计算不会出幺蛾子。第三检查NoData值设置。DEM在空洞区域通常用-32768或0作为无效值标记。如果NoData值没识别对拼接后会出现两种情况一是空洞区域被当作真实高程0米参与计算二是有效数据边缘因NoData值冲突出现黑色边界。检查方法很简单在ArcGIS里右键图层查看符号化系统里有没有显示“NoData”的黑色块或者用“栅格计算器”快速统计最大值最小值看看有没有异常大或异常小的值。2.2 主流拼接工具选型对比拼接DEM的工具很成熟常见的有ArcGIS的Mosaic to New Raster、QGIS的Merge基于GDAL、Global Mapper的Mosaic/Layer融合。三款我都长期用过各有优势。工具优点缺点适合场景ArcGIS Mosaic to New Raster参数控制灵活能处理重叠区和NoData输出类型可控大数据量时速度一般需要ArcGIS许可单机批量处理、专业GIS生产环境QGIS MergeGDAL开源免费速度快命令行支持批量重叠区融合策略相对单一对NoData处理不如ArcGIS丰富批量拼接、脚本自动化、无商业许可环境Global Mapper Mosaic操作直观开启“自动接边羽化”后效果好能实时预览高级参数藏得深新手容易忽略关键设置快速查看、快速出成果、无人机航测内业选工具的核心逻辑不是谁“最强”而是你的数据量级、对接下游软件、以及你愿意花多少时间调参。如果你只是要一个能看的整体DEMGlobal Mapper最快如果你要严格的像元级精度控制用ArcGIS一步步来。2.3 以ArcGIS为例的拼接实操ArcGIS里最常用的拼接工具是“Mosaic to New Raster”位于ArcToolbox的“数据管理工具——栅格——栅格数据集——镶嵌至新栅格”。点开后按顺序填参数输入栅格把需要拼接的几个tif全部选中导入。输出位置选一个目标文件夹这里要注意的是输出位置必须是文件夹不能是某个数据库内部路径输出文件名可以自定义比如merge_dem.tif。接下来几个关键参数我自己总结了一套推荐组合像元类型Pixel TypeDEM通常是16位带符号整型Signed Integer或32位浮点型Float。数据源如果是SRTM常见是16位整型如果是ASTER GDEM很多是32位浮点型。这个参数选不对输出会损失精度或报错。波段数Number of Bands1DEM是单波段栅格。镶嵌方法Mosaic Method如果分幅之间基本无重叠选“FIRST”或“LAST”都无所谓如果有重叠且重叠区高程相近选“BLEND”可以得到平滑过渡如果重叠区高程差异较大可能需要对数据先做差检查。实测下来SRTM分幅之间通常有一圈重叠BLEND效果最自然。镶嵌运算符Mosaic Operator配合镶嵌方法使用通常选“BLEND”即可。拼接完成后把输出图层加载进ArcMap拉伸显示看一下整体效果。我通常还会顺手做一次山体阴影Hillshade渲染这样拼接缝、错位、异常值在三维光影下一目了然。如果发现重叠区域出现了明显的分界线或色调突变多半是两幅数据的高程基准有偏差或者投影没有完全对齐这时候就得回退到上一节说的检查项而不是硬着头皮继续往下做。QGIS里拼接也很快打开“栅格——其他工具——合并”Merge把所有分幅文件选中设置输出文件路径点运行。GDAL的Merge在无重叠场景下效率很高但在重叠区默认策略是“最后一个值覆盖前面的值”也就是LAST模式。如果重叠区高程有细微差异想平滑过渡可以在命令行里加一句或者直接用Global Mapper做羽化融合。QGIS更适合批量脚本化处理写一段PyQGIS或GDAL命令行脚本把几十上百幅DEM一口气拼完有效减少手工重复劳动。3. 按研究区裁剪从“含着”到“边界干净”3.1 Clip与Extract by Mask怎么选拼接完了之后手里的DEM范围往往远远大于实际研究区。这时候就要按行政区边界、流域边界、项目红线或自定义矩形框把范围裁小。ArcGIS里有两个常用工具一个是Clip裁剪一个是Extract by Mask按掩膜提取很多新手搞不清差别。简单说Clip工具位置在ArcToolbox——数据管理工具——栅格——栅格处理——裁剪。它适合用矩形范围或比较规整的矢量面进行裁剪速度快、参数少支持“使用输入要素裁剪几何”选项。Extract by Mask工具位置在ArcToolbox——Spatial Analyst 工具——提取分析——按掩膜提取。它可以接受任何矢量面作为掩膜输出结果会把掩膜边界外的像元直接设为NoData特别适合处理不规则流域边界。用生活化类比Clip像用切刀把一大块蛋糕切成你要的矩形块外面部分丢弃Extract by Mask像拿一个模具从蛋糕上扣出你需要的形状边界是不规则的。实际项目中如果只需要研究区矩形范围用Clip如果研究区是任意不规则多边形流域、行政区、地块用Extract by Mask更合适或者也可以用Clip但勾选“在裁剪时使用输入要素几何”并确保边界外的值为NoData。工具裁剪形状边界外值适用场景Clip矩形或矢量面直接去除默认丢弃规则范围、批量分幅、简单边界Extract by Mask任意矢量面NoData不规则流域、精确到研究区边界QGIS Clip raster by mask layer任意矢量面NoData开源替代方案3.2 ArcGIS裁剪实操ArcGIS里用Extract by Mask剪DEM的流程是先在内容列表里加载拼接好的DEM图层和你要用的矢量边界.shp或要素类然后打开“按掩膜提取”工具输入栅格选DEM、输入栅格数据或要素掩膜数据选边界矢量输出路径命名好点确定。一般几秒钟到几分钟就出结果。这里有一个很多人不注意到但影响很大的细节掩膜矢量边界的坐标系必须与DEM一致。如果矢量边界是地理坐标系DEM已经转成了投影坐标系工具会提示“空间参考不匹配”有时候软件自动重投影有时候直接报错。稳妥做法是先用“投影”工具把边界矢量统一到DEM的坐标系再执行裁剪。另外输出结果的边界质量也值得留意。如果矢量边界是锯齿状的高精度边界裁剪出来的DEM边缘自然也是锯齿状这本身没问题但有些用户希望最终成果更平滑可以在裁剪前对矢量边界做一个轻微简化Simplify或者在制图阶段用“平滑线”工具处理后再裁。QGIS对应的操作是打开“栅格——提取——按掩膜图层裁剪栅格”Clip raster by mask layer输入栅格选DEM掩膜图层选边界矢量指定输出文件路径点击运行。GDAL会自动处理NoData和投影转换整体体验很流畅。Global Mapper里的裁剪则更视觉化加载DEM后加载边界矢量选中边界图层右键选择“在选中区域中裁剪”Crop to Selected Area再用“导出栅格”输出即可。3.3 裁剪后的边界质量问题裁剪完成不意味着万事大吉。我经常在裁剪后的DEM边缘发现两类问题。一类是边缘出现一圈黑边。这在Extract by Mask输出里很常见原因是矢量边界外没有数据而被设置为NoData在某些软件渲染下显示为黑色。如果你只是用这张DEM做后续统计分析NoData并不影响计算结果但如果要出图、要喂给其他不识别NoData的程序这圈黑边会成为很大的麻烦。解决办法是用“栅格计算器”把NoData替换成一个明显超出研究区范围的无效值比如-9999或者在导出时统一设置NoData值为-9999。另一类是边缘出现明显的高程跳变也就是边界内齿状突起。这往往不是裁剪工具造成的而是原来的DEM本身沿边界有数据空洞裁剪后空洞被暴露在边缘。处理方法是裁剪前先对原始DEM做一次“焦点统计Focal Statistics”或“填洞”处理把空洞补上再裁剪。4. 常见问题与排查技巧实录4.1 拼接缝明显怎么处理我遇到过很多次拼完后接缝处有一条明显的分界线两边灰度深浅不同。这种情况最可能的三个原因一是两幅DEM的获取时间或传感器不同导致高程基准差异二是投影转换时重采样方法不一致三是NoData值处理不当导致有效数据范围有差异。排查顺序建议是先看坐标系是否统一再看重叠区高程相差多少。如果重叠区高程整体偏移也就是一幅比另一幅普遍高几米这时候别用BLEND硬拼否则重叠区会形成斜坡。正确做法是在拼接前先用“栅格计算器”对其中一幅做一个高程校正加上实测差值或者用ArcGIS的“校正”工具把两幅数据配准到一个公共基准上。实测下来SRTM1弧秒和3弧秒混拼特别容易出现这种基准不一致的问题所以最好不要混合不同源数据。4.2 裁剪后黑边始终消不掉这条坑我踩过不止一次。ArcGIS默认把NoData显示为黑色但当你把裁剪结果导出成tif再重新加载时黑边还在。多数时候是因为原始DEM的NoData值为-32768而裁剪工具或导出工具没有把它正确识别为NoData。我的解决办法是在ArcGIS里先用“栅格计算器”写一句条件语句Con(IsNull(raster), -9999, raster)把NoData统一改成-9999然后再用“复制栅格”工具在“NoData值”选项里手动填上-9999导出为新的tif。这样任何软件打开它都会把-9999当作无数据黑边问题彻底解决。4.3 处理大数据时报内存不足现在免费DEM动辄上百GB的国家范围数据并不罕见普通笔记本处理起来确实吃力。我在处理某个大范围拼接时曾经在ArcGIS里直接报“内存不足”被中断。经验总结下来有三条优化路径可选一是分块处理不要一次性把所有分幅喂进去。把研究区按行列切成几个大方块每个方块内拼接、裁剪最后再做一次总拼接。二是转换格式中间过程全部用tif不要用ArcGIS的File Geodatabase Raster作为中间载体。tif文件有良好的流式读取特性处理大数据时要稳定得多。三是用Global Mapper做先行拼接它的内存管理比ArcGIS流畅很多处理完再导出tif继续回到ArcGIS做精确裁剪和分析。4.4 快速排查速查表下面这个小表格整理了我日常排查DEM处理问题时的优先清单分享出来供参考现象优先排查项常用处理拼接报错或位置错位坐标系一致性、分辨率一致性统一投影、统一像元大小拼接后有条明显的线重叠区高程差异、数据源混用高程校正、避免混合来源裁剪后边缘黑边NoData值识别、导出设置重设NoData、栅格计算器替换边缘锯齿严重边界矢量精度、像元分辨率简化边界、重采样到较高分辨率处理大数据卡死单次输入过多、格式问题分块处理、用tif中间格式高程分布有异常尖峰原始数据有空洞或异常点焦点统计或滤波处理后使用这套排查逻辑不仅适用于DEM凡是做栅格数据的拼接、裁剪、镶嵌思路都是一样的先统一坐标和分辨率再检查无数据值最后才是拼接和裁剪。顺序对了90%的奇怪问题都不会出现。5. 结语与一点实操补充基于我多次处理DEM数据的经验再有类似任务时我的操作顺序已经固定为统一坐标系和分辨率——批量预览数据质量——拼接——裁剪——检查边缘和数据范围。这套流程从拿到原始分幅数据到产出研究区DEM顺利的话半小时以内能完成。最后分享一个小技巧拼接和裁剪完之后我会用同一套矢量边界把原始下载的分幅文件也裁剪一遍作为备份。这样万一后续需要调整分析区范围不用重新下载数据直接用备份做增量处理就行。数据备份这个习惯救过我好几次急。如果你正好在处理DEM或者类似的栅格数据这个流程可以直接拿去用。踩过坑的朋友欢迎在评论里分享你的排查思路。