ArcGIS等高线提取与分幅地形图拼接实操指南
做GIS的人早晚都会碰到这么一件事手里攒了一批分幅地形图或者从公开DEM数据里导出了等高线想拼成一张完整的大图顺便把研究区的等高线边界一块儿理清楚。以前我干这活儿全靠手动画线、逐幅拼接一天下来眼睛都快瞎了。后来把ArcGIS里那一整套流程跑顺之后才发现这事儿其实可以拆成几个标准步骤快的话十几分钟就能出一版可用成果。这篇东西就把我的实操过程完整写出来包括等高线怎么提取、边界怎么生成、分幅图怎么拼、接缝和黑边怎么处理以及我踩过的一些坑。适合谁看呢一是测绘、规划、地信相关专业的学生课程作业里要出地形图二是做项目需要用等高线底图做展示或者叠加分析的工程师三是刚接触ArcGIS、想把数据整理出个样子的新手。你不需要精通ArcGIS只要装好了软件、能打开界面跟着一步步走就行。我会尽量把每一步的“为什么”也讲清楚省得你换了个数据集就不知道怎么调整。1. 整体设计思路先搞清楚你要的“边界”是什么1.1 等高线边界到底是什么“等高线边界”这个词在不同场景下含义不太一样我理解你的需求大概率是这两种之一。第一种是等高线的外围轮廓也就是把一组等高线围出来的区域外缘提取成一个闭合多边形用它来限定制图范围或作为后续裁剪的掩膜。比如我用公开DEM提取等高线之后山地区域的等高线会覆盖整个矩形范围但实际有效的、闭合的区域往往是不规则的做一个外边界出来出图才好看。第二种是图幅边界也就是你手上的分幅地形图每幅有它的图廓线、图名、编号拼图之前得先把这些信息理清楚知道每幅图落在什么位置、什么投影坐标系下。这两种边界在实操中是相互关联的等高线的外边界决定了内容范围图幅边界决定了数据的排列方式。我在下面会分开讲但整体流程是串起来的——先准备数据和坐标系再提取等高线紧接着生成边界最后做镶嵌拼接。1.2 为什么用ArcGIS而不是其他工具做等高线和拼接可选工具其实不少Global Mapper、QGIS、CAD都能干类似的事。但我个人在项目里还是优先用ArcGIS原因有三点。第一等高线提取的核心工具Contour在ArcGIS里非常成熟参数直观输出直接就是带高程属性的矢量线不需要额外写脚本去组织属性结构。第二图幅拼接需要的镶嵌、裁剪、投影转换、NoData处理这些工具在ArcToolbox里都集中在一起不用来回切换软件。第三也是最实际的很多项目交付要求的数据格式就是ArcGIS的GDB或者SHP直接用ArcGIS做可以减少格式转换的麻烦。当然如果你手头只有QGIS也能做但后续处理像坐标定义、拓扑检查这些会比较绕。我的建议是主力用ArcGIS特殊情况下用QGIS做辅助检查就够了。1.3 一次完整流程分几步走我自己的标准流程是四步第一步准备数据。包括DEM或者已有的等高线数据、分幅地形图栅格、以及必要的行政区划或研究区范围。第二步统一定义坐标系。所有数据必须在同一坐标系下工作否则后面提取、拼接全是错的。第三步提取等高线并生成边界。用Contour把DEM转成等高线再用线转面、融合等手段生成外围边界必要时做平滑处理。第四步镶嵌拼接地形图。把多幅栅格用Mosaic to New Raster拼起来处理重叠区域、NoData、色彩平衡最后按边界裁剪输出。这个流程适合大部分情况。如果你的数据源已经是有等高线的矢量文件那第三步就变成了“清理和边界生成”整体思路不变。2. 数据准备与坐标系统的坑2.1 数据源怎么选DEM和已有等高线提取等高线的首选是DEM数据。现在公开的DEM来源不少比如SRTM、ASTER GDEM、ALOS等分辨率从30米到12.5米不等。项目要求精度不是特别高的时候用30米的DEM做1:5万甚至1:2.5万的示意图完全够用。如果要做1:1万的精细地形图建议找更高分辨率的DEM或者直接用测绘部门提供的已有等高线成果。如果你手上已经有等高线矢量数据那就省去提取这一步直接跳到边界生成。不过已有的等高线经常存在断线、压盖、属性缺失的问题后面排查部分我会说怎么处理。我自己常用的是从地理空间数据云这类公开渠道下载DEM下载时注意选择经纬度或者UTM分带的投影方式尽量保持一致。下载后第一时间用“定义投影”工具确认坐标系别等到拼图的时候才发现一堆数据各说各话。2.2 定义投影和投影转换千万别搞混了这个坑太典型了我见过无数人在这儿翻车。ArcGIS里有两个长得非常像的工具Define Projection定义投影和Project投影变换名字像功能完全不同。定义投影是给数据“贴标签”——数据本身没写坐标系信息你告诉软件它是什么坐标系。它不改变坐标数值只增加投影信息。投影变换是真正把坐标数值从一套系统换算到另一套系统比如从地理坐标WGS84经纬度转到投影坐标UTM或高斯克吕格。如果你把定义投影当作投影变换来用数据坐标值不会变化但系统会误以为它已经是目标坐标系后续叠加时直接错位跑偏。我操作的时候有个习惯任何数据进来第一步先右键看属性确认坐标系信息是否完整。属性里是空的那就用定义投影补上属性有值但和实际对不上那就用投影变换重新算一遍。2.3 环境设置里的处理范围、像元大小和捕捉栅格很多新手不知道ArcToolbox左下角有一个“环境”按钮点开之后可以设置很多全局参数。拼接或提取之前建议在这个环境设置里做三件事。第一处理范围设为“与图层相同”或手动框选研究区这样工具只处理你关心的范围快很多。第二栅格分析里的像元大小设成统一值比如DEM是30米那后续所有栅格输出都保持30米避免工具自动取最小像元导致数据量爆炸。第三捕捉栅格设为你的基准DEM这样多个栅格在空间上严格对齐后续镶嵌不会出现半像素错位。别小看这三步特别是多个栅格叠加分析的时候像素没对齐最直接的后果就是属性值对不上、边界锯齿严重。3. 等高线提取与边界生成的完整实操3.1 从DEM提取等高线参数怎么设打开ArcToolbox找到“Spatial Analyst Tools → Surface → Contour”双击打开。核心参数就几个输入栅格选DEM输出要素存成SHP或者进GDB等值线间距是关键。间距怎么定我一般看两个因素。一是DEM的分辨率和技术规范30米DEM要提取等高线间距小于10米就没意义了因为地形细节根本达不到那个精度。二是看制图比例尺和用途做1:5万的示意图间距20米或者50米都可以做工程前期分析间距10米比较合适真要精细的话可以用间距5米但地形起伏平缓的地方线条会非常密出图反而乱。还有一个容易忽略的参数是“起始等高线”和“Z因子”。Z因子是垂直单位与水平单位的换算因子如果DEM是经纬度坐标水平和垂直单位都是度那就得设置Z因子来转换否则提取出来的等高线会严重失真。不过大多数情况下我们会先把DEM投影到平面坐标系Z因子通常保持默认1。提取完成后属性表里会有一个“CONTOUR”字段存放高程值后面用来做标注或者符号化都用它。3.2 填洼处理为什么不能跳过直接对DEM跑Contour经常会发现等高线莫名其妙断开、出现闭合小圈圈这是因为DEM里有很多“洼地”——比周围都低的区域。这些洼地可能是真实地形比如坑塘也可能是DEM生成的伪洼地最常见的就是山谷里的伪凹陷。处理办法是用“Spatial Analyst Tools → Hydrology → Fill”先填洼。填洼工具会设定一个z限制值把低于周围一定高度的栅格填平。实际操作里我建议填洼和原始DEM都保留填洼后的DEM用于提取水文分析相关的等高线特征原始DEM用于常规地形展示。如果你只是要一张常规等高线图优先用填洼后的DEM能省掉后面大量手动接线的时间。填洼之后重新跑Contour等高线会干净很多。注意填洼工具是水文分析的常用操作用于其他场景也OK但不要过度填洼Z限制设太大会把真实地形特征给抹掉。3.3 等高线转边界线到面的几种打法现在有了等高线接下来要生成外围边界。这里分两种情况说。如果等高线已经是闭合的比如从一个封闭区域内提取的推荐用“Feature to Polygon”先把线转面再用“Dissolve”按一个公共字段融合。这样能快速得到外围的多边形轮廓。为什么要先转面再融合因为直接对线做“Convex Hull”或者“Minimum Bounding Geometry”得到的是最小外接矩形或者凸包会把凹进去的山谷地形给填平边界失真。如果等高线是断开的、或者你需要的边界更贴合地形的自然轮廓那就别用凸包了。我常用的做法是先用“Buffer”给等高线加一个很小的缓冲区比如一个像元大小再用“Dissolve”融合最后用“Convex Hull”或者干脆手动修整。这个方法虽然绕一点但出来的边界能保留山谷沟壑的凹凸形态在起伏大的山区效果尤其明显。3.4 边界生成后的简化与平滑生成的边界通常会有很多锯齿特别是栅格DEM转出来的线棱角很多。这时要用“Cartography Tools → Generalization → Smooth Line”算法选PAEKPolynomial Approximation with Exponential Kernel平滑容差设10米到50米之间比较稳妥。容差设太小没效果设太大边界会严重偏离真实地形。我的经验值是容差设为DEM像元大小的3到5倍比如30米DEM容差设90米左右能既平滑又不跑偏。平滑完之后还有一个检查点边界线有没有自相交、有没有尖角。热词里你搜到的“尖锐角检查插件”“不要压盖线”都是这个环节的事情。ArcGIS里可以用“检查几何”功能查自相交尖角的话我一般用“增密”工具加一些插值点让曲线转弯更圆润。做制图出图之前这块务必检查不然出图很掉档次。4. 地形图拼图的核心环节4.1 分幅图和影像镶嵌的区别“地形图拼图”在ArcGIS里通常指的是栅格拼接工具在“Data Management Tools → Raster → Raster Dataset → Mosaic to New Raster”。这里先把概念理清。分幅地形图往往是印刷扫描后的栅格图每幅图有图廓线还可能自带一些边缘信息、图例、图名。直接拿这些图做镶嵌拼接处会有很明显的图廓线或色差。这时有两种处理思路。思路一是把图廓线区域设为NoData只保留图面内容再镶嵌适合拼接后还要做矢量化或者叠加分析的情况。思路二是保留图廓线直接把整幅图拼接起来适合输出一张大版面的展示图。影像镶嵌则针对的是航片、卫片、DEM这类无图廓的连续栅格。重叠区怎么融合是核心问题后面细说。实操时还有一个快速替代方案ArcMap或ArcGIS Pro的“影像分析”窗口里直接选中多景影像右键“添加”也能快速显示合并效果但那只适合预览不适合最终成果输出输出的正确姿势还是用Mosaic to New Raster。4.2 拼接前必须检查的参数波段、像元类型、NoDataMosaic to New Raster里面有几个参数特别容易出问题。波段数地形图扫描件通常是单波段灰度或三波段RGB混在一起镶嵌时系统可能报错建议先统一转换灰度图转成三波段或三波段抽成单波段。像元类型8位无符号、16位有符号这些必须统一。如果你有一幅8位和一幅16位的图一起镶嵌输出结果可能会变成16位但显示不正常。我用过一个笨办法先把全部转成8位无符号再镶嵌省事很多前提是图像灰度范围不超过255。NoData值这是黑边问题的源头。扫描地形图的黑边或白边如果没设NoData镶嵌后就是一圈突兀的黑色或白色边框。正确做法是在镶嵌前给每幅图设置NoData值或者镶嵌后使用“复制栅格”工具重新定义NoData。还有“像元大小”和“重采样技术”也要统一。像元大小建议设成所有输入图里最大值最粗的那个重采样选双线性或三次卷积能兼顾几何精度和灰度连续性。最近邻法虽然快但锯齿明显出图效果差。4.3 重叠区域的融合策略分幅图相接时一般会有少量重叠融合策略直接决定接缝处看不看得出来。Mosaic to New Raster里有个“Mosaic Operator”参数我的建议是薄弱的接缝、边缘过渡用BLEND混合在两个影像重叠区域做渐入渐出平滑过渡。强调新数据的覆盖用LAST重叠区用后面镶嵌的那幅图覆盖前一幅。分析性数据比如高程、坡度用MIN或MAX根据业务需求取同一个波段的极值。影像质量差异明显用FIRST优先使用第一幅前提是质量差的留在后面。你可以多做几个版本对比肉眼看不出来就用BLEND最保险。4.4 拼接后的色彩均衡与接缝消除即使融合策略选了BLEND大幅面影像之间还是容易出现色调不一致的情况特别是一个晴天一个阴天拍的图色差会非常明显。这时候用“Spatial Analyst Tools → Multivariate → Histogram Matching”做直方图匹配校正图像的色调分布。第一步选一幅色彩最标准的图作为参考。第二步用Histogram Matching把其他图调到和参考图相近的色调。第三步如果接缝还有残留用“影像分析”窗口里的“匀色”功能或者Photoshop手动修掉。ArcGIS里匀色功能在镶嵌数据集的“色彩平衡”选项里打开后选择“色彩平衡方法”为“直方图匹配”再选“匀光匀色”处理。我自己实操下来的经验对于地形图的拼接色差问题主要在接缝线附近如果色差不大BLEND混合基本就够了。真正让人头疼的是那些边缘畸变和断线这些后面单独说。4.5 输出前的裁剪和格式选择拼好的大图最后一步是按之前生成的等高线边界做裁剪。工具用“Spatial Analyst Tools → Extraction → Extract by Mask”掩膜就是第3步生成的边界面像元大小和NoData从环境设置里读取直接输出一个形状贴合地形轮廓的成果图。输出格式我推荐GeoTIFF.tif兼容性好、压缩率高、支持NoData设置。分辨率设300dpi用于出图打印150dpi用于屏幕展示超过300dpi在制图领域意义不大文件却会大得吓人。5. 常见问题与排查技巧实录5.1 等高线断线、不闭合怎么办这是提取等高线最常见的毛病尤其是从粗分辨率DEM里提取的时候。原因有三个一是DEM存在洼地或平地等高线在低洼处无法闭合二是因为等高线在DEM范围边缘被截断了三是原始DEM在某些区域是空值NoData导致算法无法追踪。处理办法第一步填洼第二步用“边界裁剪”把DEM边缘之外的等高线剪掉或者反过来补全DEM的边缘值第三步用编辑器里的“自动完成”工具手动连接断线但数量多的时候就别硬扛了回到填洼环节重新调整参数更靠谱。我遇到过一次最离谱的情况30米DEM提取10米间距等高线山顶区域出现大量同心圆小圈圈清洗了半天才发现是DEM在尖峰处有异常值。这种情况先把DEM用“Focal Statistics”做一遍低通滤波去掉噪点再重新提取。5.2 拼接后出现黑边或白边黑边白边基本是NoData的问题不是数据错了是软件不知道该把什么值当空值。解决方法是镶嵌前用“复制栅格”工具给每幅图重新设置NoData值把黑色或者白色对应的灰度值设为NoData或者镶嵌后用“栅格计算器”写一句条件语句把黑边范围内的像元值赋为空。另外如果镶嵌过程中环境设置里没勾选“删除NoData”边缘那些没有数据的区域也会呈现黑色看起来像黑边其实是大面积的数据空洞。这种情况要把环境设置里的“删除NoData”勾上或者把输出范围限定到研究区内。5.3 拼出来的图位置对不上、坐标错位拼图时出现整体偏移或者局部错位大概率是坐标系不统一或者投影定义错误。我排查这类问题的顺序是先看每一幅图的属性确认坐标系一致再叠一个已知坐标的参考数据比如行政边界或者GPS轨迹看偏移量是固定的还是变化的固定偏移往往是定义投影写错了变化偏移往往是数据本身有问题或者投影参数选错分带。这里特别提醒一下ArcGIS Pro和ArcMap对坐标系不一致的数据叠加处理策略不一样Pro默认会动态投影显示有时候看着能对上但实际导出成果图时还是乱的。所以任何时候不要依赖动态投影老老实实把数据统一到一个坐标系。5.4 等高线交叉、自重叠、尖锐角的清理如果你用的是已有等高线数据很容易发现线与线之间互相压盖、交叉、有尖锐角。这些在制图和空间分析中都是大忌拓扑检查必须做。ArcGIS里打开“拓扑”工具条新建拓扑规则选“不能相交”和“不能自相交”把错误标注出来再逐条修。尖锐角的检查可以写一个简单的角度判断脚本或者用第三方插件原理是把线上连续的三个点构成的角度算出来小于阈值就标记。修尖角我一般两种方式一是用“增密”工具插入辅助点二是直接手动移动转折点让转折更圆滑。这里我要多说一句网上搜“尖锐角检查插件”能找到很多工具但我建议你搞清楚它的算法再去用不然误删有效地形特征就麻烦了。5.5 软件操作层面的其他常见问题除了数据处理本身还有几个搜索频率特别高的操作问题顺手说一下。第一ArcGIS安装和启动问题。装10.x版本时License Server启动失败、界面发虚基本都是安装包完整性或者环境变量配置问题重装前先把杀毒软件和旧版本清干净。第二加载在线地图、天地图作为底图时注意配置正确的服务地址和坐标系加载后先投影到与工程一致的位置再叠加分析。第三CAD转SHP或者点转面、面转线这类转换如果属性表丢失多半是转换工具选错了要在ArcToolbox里找对工具而不是直接复制粘贴。6. 快速出图图廓整饰与输出好数据有了、拼图完成了、边界也生成好了到这一步就进入出图环节。ArcGIS的布局视图可以添加图廓线、比例尺、指北针、图例这些基本操作我不赘述但有几个提高效率的技巧值得说一下。第一用“格网”而不是手动画图廓线。右键数据框属性在“格网”选项卡里选择经纬网或方里网自动生成的网格和图廓线更规范改起来也方便。第二比例尺尽量用“交替比例尺”美观又规范。第三图例只保留你符号化了的内容不要一股脑全列出来。输出时在“文件→导出地图”里选择PDF或者TIFF分辨率选300dpi。PDF格式可以保留矢量要素后续在Illustrator里二次编辑很方便我做最终成果图一般都用PDF出。至于出图快不快很大程度取决于数据组织的整洁程度。建议从一开始就把数据分门别类放进GDB一个要素数据集放等高线、边界等矢量数据一个栅格数据集放镶嵌好的底图和管理系统里的文件一样层次清晰后面找起来才不慌。7. 批处理与模型构建器一劳永逸的办法如果你以后要经常做类似的事情——换个区域、更新DEM、重新拼图——强烈建议用ModelBuilder把流程串起来。把填洼、提取等高线、生成边界、镶嵌、裁剪这几个工具拖进模型画布设好参数下一次只需要换输入数据点一下运行就全自动完成了。构建模型不复杂记住一个原则把“不常变的”设为固定参数把“每次要换的”设为模型参数工具右键→参数。这个模型还可以进一步用ArcGIS Pro的Python窗口跑但原理都是一样的。我自己的模型里还会加一个“条件判断”如果DEM是否填洼就自动跳过填洼步骤省了重复的时间。批处理的意义在于当你面对20幅分幅图需要逐幅裁剪、逐幅重设NoData、逐幅做直方图匹配的时候手工操作会让人抓狂模型一跑下班前点个运行第二天成果就躺在那里了。从我个人的使用经验来说ArcGIS这个软件功能确实庞杂但一旦你把常用工作流固定下来效率会指数级提升。这套流程我前前后后用了几十次从最初的半天折腾到现在十分钟出图靠的就是把每个环节的参数和原理都吃透了。你现在拿着这篇文章照着做第一遍可能需要一小时左右第二遍应该就能明显熟练起来到第三遍基本不用再看工具在哪了。最后再提一句等高线边界生成和地形图拼图这两件事最核心的永远不是工具操作而是你对数据的理解和检查习惯——坐标系对不对、NoData设置了没、接缝处理干净了没这些检查到位了成果基本不会出大问题。