别急着点开 Contour 工具,先把整个成图的逻辑捋清楚。
我见过太多拿着 DEM 的同行,进 ArcGIS 第一件事就是打开 Spatial Analyst 里的 Contour,等距选个 10 米,点确定,然后开始怀疑人生——线条断断续续、毛刺一大把、一个个莫名其妙的闭合小圈满地都是,放大全是锯齿,缩小又糊成一团。其实这不是 ArcGIS 不行,也不是 DEM 质量差,而是你从头到尾就把"空间分析"和"地图制图"这两件事混在了一起。等高线在 ArcGIS 里既可以当分析产物,也可以当地图语言,你既然要的是"地形图既视感",整个流程就得按制图逻辑来走:DEM 预处理、等高线生成、符号分级、掩膜注记、可视化组合,每一步都有讲究。
这篇文章就把我这些年用 ArcGIS 做地形图风格等高线的完整流程摊开讲,重点放在三个部分:等高线生成前 DEM 怎么收拾、生成后线条怎么从"分析图"变成"制图线"、以及最容易被忽略也最影响成品感的掩膜注记怎么做。适合刚入手 GIS 制图的新人,也适合已经会点按钮但总感觉出图效果不对的老手。
1. 准备DEM:别让数据源拖了等高线的后腿
很多人做等高线觉得 DEM 是现成的,拿过来直接生成就完事。实际上 DEM 的数据源、分辨率、坐标系预处理这几个环节没做好,后面出的等高线怎么调都不对劲。这一步我习惯叫它"收拾数据",往往要花掉整个流程 30% 的时间,但回报是后面省心十倍。
1.1 分辨率与等高距的匹配逻辑
DEM 的分辨率直接决定了等高线的"下限"。你用 30 米分辨率的 ASTER GDEM 生成 5 米等距的等高线,结果就是锯齿、碎环和中途断线多到你怀疑数据是假的。这不是数据假,是分辨率撑不起这个密度。
我自己的经验值是这样的:30 米分辨率的 DEM,等高距至少 20 米,勉强做到 10 米但图面已经偏碎;12.5 米分辨率的 ALOS 或 10 米分辨率的国产数据,等高距 5 到 10 米比较舒服;如果是无人机生成的厘米级 DSM 或 DEM,等高距 1 到 2 米都很干净。
关键逻辑在于:等高线的最小弯曲半径和表达细节,必须显著大于 DEM 单个像元的尺寸。你可以把 DEM 想象成一张像素图,像素越粗,能表达的曲线细节越有限。强行让等高距变小,相当于让曲线去描述小于一个像元的地形波动,结果自然是锯齿加碎圈。
选数据源的时候还要区分 DEM 和 DSM。SRTM、ASTER、ALOS 这些是裸地表高程(DEM),植被和建筑被过滤掉;无人机处理出来的往往是地表覆盖物高程(DSM),树顶、房顶都在里面。如果不做滤波直接生成等高线,一片林子就能让等高线乱成一团。做地形图风格的山地等高线,一定要用 DEM,不是 DSM。
1.2 填洼与裁剪:消除碎乱闭合圈的第一步
DEM 里天然存在大量洼地,尤其是流水沉积区和喀斯特地貌区。当 Contour 工具碰到这些洼地,会在局部生成一圈圈闭合的小圆环,图面上就是密密麻麻的小圈,看着极其廉价。
处理方式是先用 Spatial Analyst Tools 里的 Fill(填洼)工具跑一遍。填洼的核心参数是 Z limit,默认会按无限深度填掉所有洼地。但对于真实存在的地形凹陷(比如采石坑、火山口),这样做会损失真实信息。我的做法是:先看一下 DEM 的直方图和最小值,把 Z limit 设置为该区域地形起伏的 1% 到 2%,只填掉那些明显是噪声级别的浅洼,保留真正的地形特征。
还有一个步骤容易漏掉——裁剪。很多人拿到的是整个县域或流域的 DEM,生成等高线的时候把建筑区、水域和平坦城区全卷了进来。结果出图时边缘全是密集短线和零碎圈,根本没法看。在填洼之前,建议先用掩膜裁剪出你真正要做的范围,同时保留一个稍微往外扩一点的缓冲区(我通常外扩 200 米),避免等高线在边界处被生硬截断。
1.3 坐标系与Z因子:一个容易被忽略的参数
这一步是我踩过最大坑的地方。你拿到的 DEM 如果自带的是 WGS84 地理坐标系(经纬度,单位是度),直接生成等高线时,ArcGIS 会在水平地面上以度为单位,垂直方向以米为单位来算,这时候如果不设置 Z factor,等高线的垂直比例尺和水平比例尺就完全不在一个体系里。
ArcGIS 里 Contour 工具有一个 Z factor 参数,就是为了解决这个问题的。当水平单位是"度"的时候,Z factor 需要乘上一个约 111320(一个纬度对应的米数)。更稳妥的做法是:先把 DEM 用 Project Raster 工具投影到目标投影坐标系(比如高斯-克吕格或 UTM),单位变成米之后,Z factor 设为 1 就行,后面做坡度、坡向、山体阴影也都不会出错。
从这里可以看出一个制图工作的基本纪律:投影做在前面,而不是等图出来发现问题再回头找原因。等高线疏密、线条方向和距离计算全都依赖水平单位与垂直单位的一致性,这一步偷懒后面全是坑。
2. 生成等高线:参数背后才是真正的门道
DEM 收拾干净后,终于可以生成等高线了。Contour 工具的入口在 Spatial Analyst Tools > Surface > Contour,界面非常简单,但真正影响结果质量的就四个参数:等距、基线、Z factor,以及输入 DEM 是否已经过填洼。
2.1 Contour工具的核心参数选择
等距(Contour interval)的选择逻辑上一节已经说过,这里只补充一点:要和你的出图比例尺配套。A4 幅面打印 1:50000 的地形图,20 米等高距是常规选择;1:10000 的详细地形图,5 米等高距更合适。你不可能用同一个 DEM 在同一种比例尺下应对所有场景,所以要在出图之前就想好比例尺,反过来定等高距。
基线(Base contour)也是个容易被忽略的参数,但恰恰是"地形图既视感"的起点。传统纸质地形图里,所有计曲线的高程都是等间距分布的,通常取等高距的整数倍。比如等高距 20 米,计曲线就是 100 米、200 米、300 米……这些数值对应的就是基线。ArcGIS 里设置 Base contour 让你指定从哪个高程开始画,把它设为 0 或者区域最低点的计曲线高程值,可以保证后面符号化时计曲线的位置落在漂亮的整数上。
Z factor 上面讲过,如果投影后单位统一了,设为 1 就行。还有一个容易被忽略的细节:输出的等高线要素类里,每个线要素都有一个 Contour 字段记录高程值。后面做注记、做分层设色、做计曲线筛选,全都要用这个字段,千万别删。
2.2 抽稀与平滑:让线条从"分析图"变成"制图线"
刚生成的等高线一定毛糙。原因在于它严格贴着 DEM 像素边缘走,每过一个像元都可能产生一个微小的折点。这时候需要做两件事:线要素化简和曲线平滑。
线要素化简用 Simplify Line 工具(Cartography Tools 下),算法选 POINT_REMOVE,容差我一般设为 DEM 分辨率的 0.5 到 1 倍。它的作用是去掉那些冗余的小折点,把线型变干净,但不会把大的地形转折抹掉。曲线平滑用 Smooth Line 工具,算法选 PAEK(Polynomial Approximation with Exponential Kernel),平滑容差一般取等高距的 0.5 到 1 倍。
我做过对比测试:等高距 20 米、30 米分辨率的 DEM,Simplify Line 容差设 20 米、Smooth Line 容差设 15 米,处理出来的等高线既干净又保留山脊山谷的基本骨架。如果容差设得太大(比如等高距的 2 倍以上),曲线虽然美观,但山脊线会被明显"推平",地形真实性打折扣,做分析时就别用它了,做制图表达也容易失真。
这里要提醒一点:平滑和化简的顺序有讲究。先化简再平滑,曲线不会在化简后重新长出尖锐的折角;反过来先平滑再化简,往往多一道无用功。还有,这两个工具都会自动计算并填充 Length 字段,后面做注记和空间分析时留意一下字段刷新即可。
2.3 我的实操经验:如何判断平滑是否过度
平滑参数没有一个万能公式,因为不同地形的"性格"差异很大。石灰岩峰丛、冰川槽谷、冲积平原,它们的等高线语言完全不同。我以前用同一套参数处理过两个项目,一个在中国西南喀斯特区,一个在华北平原边缘的丘陵带,结果平原那个平滑后完全失去了微地形的起伏感。
我的判断方法是:把平滑前后的等高线叠到 DEM 上,设置不同的透明度对比目检。好的平滑效果是"首曲线不刺眼、计曲线能认出山脊走向"。如果山脊线和山谷线的转折点被拉直了,就是过度;如果线条上还有细碎的折点,就是不足。做两三次参数微调就能找到舒服的中间值。切记不要为了图面漂亮把平滑容差拉到等距的三倍以上,那样做出的是"塑料感"地形,内行人一眼就能看出失真。
3. 地形图既视感的真正来源:符号分层与叠加表达
曲线本身是"分析产物",剩下的问题在于,如何通过符号化让它看起来像一张印刷出来的地形图。地形图的"既视感",不是某一条等高线画得有多顺,而是符号逻辑本身符合人们的读图习惯。
3.1 首曲线与计曲线的分层逻辑
传统地形图的基本规则:一组等高线中,每隔四条或五条首曲线加粗一条计曲线,计曲线的高程必须是等高距的倍数。这样做是为了让读图人隔着老远就能从线条粗细的变化中快速数出高程档次,而不必逐条去读数字。
在 ArcGIS 里实现这个逻辑有两种常见做法。一种是生成一遍等高线之后,属性表里用查询选择出高程值能被计曲线间隔整除的要素,单独导出成一个新图层,给粗线符号;剩下的作为首曲线,给细线符号。另一种用 ArcGIS Pro 的符号系统按属性查询分两组渲染,同样把计曲线组单独设置线宽。
我推荐第二种做法,省去导出图层的麻烦。在 Layer Properties 的 Symbology 里选 Unique Values 或按"规则"分组,表达式大致是MOD(ROUND([Contour] / 等高距, 0), 计曲线间隔) = 0,这样可以直接在图层层面分出粗细两级,后续改动参数也很方便。
3.2 配色与线宽:让等高线看起来像"印出来的"
颜色的选择在制图学上有一套约定俗成的传统。标准纸质地形图里,等高线采用棕色系,尽管理论上棕色深浅可以随海拔变化,但我更推荐统一使用一个中等偏深的棕褐色,例如 RGB(151, 96, 63),也就是常见制图印刷里的"等高线棕"。这个色在白色背景下辨识度高,叠加山体阴影时也不会被灰色吃掉。
线宽方面,首曲线我习惯设 0.2 到 0.3 毫米,计曲线设 0.5 到 0.7 毫米。这里要特别提一点:ArcGIS 的线宽单位默认是磅(pt)还是毫米(mm),经常被人忽略。如果你把图层符号单位设为"毫米",但出图比例尺是 1:50000,那线条在图纸上的物理粗细就是稳定的;如果单位设成了"磅",不同比例尺下视觉粗细变化很大。做制图输出,我一般直接在线符号编辑器里把单位切到毫米,按照目标图纸的物理尺寸反向推算。
首曲线和计曲线的密度比例不要太大,否则视觉上会失衡。我用一个经验公式:计曲线数量占总线条数的 1/4,整幅图的纵深感和可读性最好;如果用的是传统 5 条一计的规则,占比就是 1/5,也成立。关键是不要让图面同时出现太多粗细等级的线条,否则会显得杂乱。
3.3 叠加山体阴影:从"线条图"到"立体地形"
等高线本身是二维的,但地形图之所以有立体感,重要一部分来自与之叠加的晕渲(Hillshade)。这一步的原理不复杂:通过模拟光照方向给 DEM 计算出一个灰度网格,光源从左上照下来,朝光面亮、背光面暗,叠上等高线之后,山体的"鼓"和"谷"就立体起来了。
ArcGIS 的 Hillshade 工具默认参数是方位角 315 度(西北方向光)、高度角 45 度。对地形图成品而言,这两个默认值通常够用。但如果你所在的研究区地形特别复杂,也可以多生成几个方位角的山体阴影做融合,不过那是进阶玩法,文章后面会专门提到。
实际操作中,把 Hillshade 放在图层最底端,等高线叠在上面。这里最关键的是透明度设置——山体阴影图层透明度 50% 到 70% 是我常年用的区间,这样既能通过明暗层次把山脊山谷凸出来,又不会让深色阴影压过等高线的可读性。如果你用 ArcMap,直接在图层右键把透明度调整到 55%;ArcGIS Pro 里则是在 Symbology 面板的 Layer 透明度处调整。
线条颜色和阴影明暗的关系也要互相配合。灰色系的山体阴影如果过暗,棕色等高线会显得发闷;如果阴影偏灰白,线条则更清爽。我一般把 Hillshade 先转成灰度(Stretch 类型选 Minimum-Maximum),再把灰度图层的对比度微调至 60%,然后叠线,效果比较接近传统制图"印出来的"那个味道。
4. 不压盖等高线的注记:掩膜的完整工作流
这是全文最容易踩坑、也最容易被忽略的一步。注记如果不做任何处理,直接叠加在等高线上,文字会把等值线"截断"成破碎的路线,整个图面像被开了无数个天窗,这是最典型的新手痕迹。真正的地形图制作,注记与等高线之间的空间关系有明确要求:文字必须盖在线条之上,但又不能模糊地"骑"在线上,要保证文字周围留出干净的空白区域。
4.1 问题根源:动态标注与要素压盖
在 ArcGIS 里,渲染注记的方式分两种:动态标注(Label)和注记要素(Annotation)。动态标注是生成速度快、但本质上是"贴"在图上的一层文字,它不参与空间运算,也不懂它脚下有一条线需要礼让。所以默认情况下,等高线注记会把等高线覆盖住,文字和线交叠在一起,读图时两眼一抹黑。
解决思路不是让文字"避让",而是主动给文字周围创造一个"空白保护区",让它脚下和附近的线被隐藏。这个空白保护区在制图学里就叫掩膜(Mask)。接下来看两种实现路径,按效率和效果分别说明。
4.2 第一板斧:晕圈(Halo)快速救场
短平快方案——给标注文字加一个晕圈。所谓晕圈,就是文字外围的一圈轮廓背景色,颜色跟底图一致(通常是白色),这样它线下方的等高线就被"视觉隐藏"了。
操作路径:在动态标注的属性里打开 Symbol 编辑器,勾选 Halo(晕圈),大小我习惯设为文字字号的一半。例如字号 8 磅,晕圈就设 4 磅左右。这个方案五分钟搞定,适合临时出图、草图查验和对底图颜色要求不高的情况。
它的问题也明显:晕圈是一层实心背景,如果底图除了白色还有其他颜色,晕圈边界会显出"白框感",跟地形图的精致感冲突。另外,晕圈只能让文字下的线"看起来"被遮住,线本身还是连续的,如果你需要在线要素层面真正被隔断(比如后续做拓扑检查),这个方案不满足。
4.3 第二板斧:标注转注记+Create Mask+擦除等高线
这是我要重点讲的成图工作流,也就是标题里"利用掩膜进行等高线注记"的标准实现方式。它做出来的效果是:文字周围形成一个真正的空白区,等高线在其中被物理性擦除,线条和文字完全不相交,视觉上干净利落。
具体分三步走。
第一步,把动态标注转成注记要素类。在图层上右键选择"将标注转换为注记"(Convert Labels to Annotation),建议"将注记存储在地理数据库中",这样它就可以像普通矢量要素一样参与后续空间分析。转换时注意选清楚与当前地图文档相同的比例尺,否则注记的大小和位置在后续缩放时会错位。
第二步,用 Create Mask(创建掩膜)工具生成掩膜面。这个工具在 ArcToolbox 的 Cartography Tools > Masking Tools 下。输入图层选刚才生成的注记要素类,输出的是一个面要素类,这个面要素会把每个注记文字的外包区域记录下来,并且允许你额外扩展一个边距(Margin)。我一般设 2 到 4 毫米,边距越大文字周围空白越宽,但注意别把相邻等高线的信息相隔太远。最后可以设置参考比例尺,确保掩膜面尺寸与出图比例尺匹配。
第三步,用生成的掩膜面去擦除等高线。用 Analysis Tools > Overlay > Erase,输入要素选等高线图层,擦除要素选掩膜面。输出命名一个"等高线_掩膜后"的图层。这样处理完,等高线与注记文字重叠的那一小段就会被删除,两侧断开的位置距文字边缘留出预设的边距,纸面效果非常接近传统制图。
这套流程的整个逻辑其实是在模仿手工制图时代一个很经典的动作:等值线注记位置先把线"让"出一个空隙,再把高程数字放进去。用工具模拟这个手工步骤时,Create Mask 里的 Margin 参数就对应了"让出的空隙大小",参数设小了文字边缘拥挤,设大了又会让线条缺口太宽,建议先做一版默认 2 毫米试试,再根据出图效果微调。
4.4 关于注记的实操建议
掩膜做完之后,注记内容本身也需要花心思。高程点注记不要每条等高线都标,否则图面变成一串串数字,毫无节奏感。我一般只对计曲线标注高程值,首曲线不标。这样图面上每隔四条或五条才出现一个数字,配合粗细分层,一秒钟就能读出地形高度区间。
自动标注时还要注意数字的排布方向。ArcGIS 动态标注默认跟线平行,但地形图惯例是注记字头朝向上坡方向。这个 ArcGIS 原生动态标注比较难精确控制,我通常转换注记后手动拖动个别高程注记位置和旋转角度,工作量不大,但对"既视感"的提升非常明显。
还有一个隐藏技巧:出图前做一次"注记压盖检查"。ArcGIS 里可以用拓扑规则或者直接用肉眼对比检查,我一般是把注记图层设置成全黑半透明叠加在等高线延伸出的 1 毫米缓冲线上,黑色覆盖到线的位置就是压盖,这样快速扫一遍就能发现掩膜边距没留够的地方。
5. DEM可视化的多种表达方式:别只会画等高线
等高线只是 DEM 可视化的一种形式,真正的制图家在拿到一份 DEM 之后,会结合山体阴影、坡度、坡向、分层设色等多种表达方式,组合出最有信息量的图面。这一节把几种常用表达方式整理清楚,供你在不同需求场景里灵活选择。
5.1 山体阴影的表达细节
前面在叠加那一步已经提过 Hillshade 默认参数,这里展开讲参数调优。
方位角决定光线从哪个方向来,默认 315 度会让地形阴影像传统制图的左上光。但特定研究区有特定地貌,比如南北走向的峡谷地形,315 度的光会把一半谷壁完全照亮,另一半完全压黑。这时候试几个方位角(45、90、315 度),找到一个能把主要山脊和冲沟都分出明暗的角度。
高度角默认 45 度适合中纬度,但对高海拔地区,太阳的实际高度角往往更低,阴影更长、更强烈。如果想强调微地形,把高度角降到 30 到 35 度左右,小冲沟会显现出来;如果想表达宏观山脉,45 度以上就够了。
ArcGIS Pro 的多方向山体阴影(Multidirectional Hillshade)算法同时从多个方向合成光照,阴影更平滑也更不容易出现局部死角。老版本 ArcMap 没这个功能,但可以生成多个方位角的 Hillshade,然后用栅格计算器取平均,效果类似,只是计算时间长一些。
5.2 坡度、坡向与分层设色
坡度图(Slope)可以快速呈现地形的陡缓分布,非常适合做工程选址和灾害评价。栅格符号化时我建议重分类成 5 级,比如 0 到 5 度、5 到 15 度、15 到 25 度、25 到 35 度、35 度以上,对应绿、黄、橙、红、深紫,读图直观。
坡向图(Aspect)表达斜坡朝向,对植被、日照分析很有用,但它是一个 0 到 360 度的连续变量,直接彩色渲染容易花成一片。我会把坡向重分类成八方位或四方位,用色相环状配色去表达方向感,图面既有装饰性又有明确信息。
分层设色是传统地形图的重要表达手段:按海拔高度给 DEM 分层配色,低海拔用绿色系、中海拔用黄色系、高海拔用棕色系或红色系。ArcGIS 里可以用 Symbology 的 Classified 或使用栅格函数按高程区间配色。分层设色再叠加 40% 到 60% 透明度的山体阴影,可以同时保留海拔色彩和立体明暗,这种组合几乎就是现代电子地形图的标准配方。
5.3 组合出图:一张"地形图既视感"的完整图面
真正一份成品,很少只用单一图层。我的标准组合是:最底层是分层设色的 DEM,一层半透明山体阴影叠在它上面,再往上叠"等高线_掩膜后"的图层,最顶层是根据需要开启的注记、河流和道路。
在 ArcGIS 的布局视图里,图面要素还包括图例、指北针、比例尺。这里有个容易被忽略的点:ArcGIS 里指北针默认是 0 度表示正北,但地图若是倾斜或旋转过,要检查布局里指北针的"磁偏角"设置,你不需要它完全对应真实磁偏角,但至少不能和地图本身的旋转角度冲突。
出图 DPI 也直接影响线条观感。屏幕上看 72 或 96 DPI 够用,但打印输出到 A3 或 A1,我一般设 300 DPI。等高线线宽在 0.2 到 0.3 毫米的范围内,低 DPI 下容易发虚或过粗,高 DPI 下才能表现出干净的线条质感。最后导出的 PDF 或 TIFF 建议保留图层信息,方便后续在印前软件里微调整体配色。
最后分享一个小习惯:每次出图我都会把 DEM 预处理、等高线参数、符号设置和掩膜参数记在项目说明文档里。因为这类制图成果通常要按甲方或自己所在项目的要求反复修改,间隔一两个月回头改图时,如果没有记录,光靠记忆去还原当初的参数组合非常痛苦。你甚至可以把这个过程录成一个 ArcGIS 模型构建器(ModelBuilder)的流程,或者存成 ArcGIS Pro 里的任务模板,下次换一个区域的数据,套上参数就能一键重跑整条流水线,省下的时间足够多喝几杯茶。