
别急着点开 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 工具算法选 PAEKPolynomial Approximation with Exponential Kernel平滑容差一般取等高距的 0.5 到 1 倍。我做过对比测试等高距 20 米、30 米分辨率的 DEMSimplify 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 配色与线宽让等高线看起来像印出来的颜色的选择在制图学上有一套约定俗成的传统。标准纸质地形图里等高线采用棕色系尽管理论上棕色深浅可以随海拔变化但我更推荐统一使用一个中等偏深的棕褐色例如 RGB151, 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 里的任务模板下次换一个区域的数据套上参数就能一键重跑整条流水线省下的时间足够多喝几杯茶。