ArcGIS等高线提取与分幅地形图拼接实操指南
2026/9/15 12:34:20 网站建设 项目流程

做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”,算法选PAEK(Polynomial 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 拼接前必须检查的参数:波段、像元类型、NoData

Mosaic 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设置了没、接缝处理干净了没,这些检查到位了,成果基本不会出大问题。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询