尧图精选

ArcGIS等高线生成与地形图拼图:从DEM到规范出图全流程指南

🕒 发布时间:2026/9/15 13:13:51 📁 来源:尧图网络
从接触ArcGIS到现在我大部分时间都在跟地形图打交道。很多刚入行的朋友拿到高程点或者DEM第一反应是打开ArcToolbox找等值线工具点一下生成完事。结果出来的等高线要么锯齿感明显要么穿出研究区边界老远更别说后续拿去拼图出成果图了。这一篇我会把整个流程——等高线快速生成、边界提取、裁切、到地形图拼图出图——完整走一遍把背后涉及的原理和关键参数一起讲透希望能给正在做类似项目的同行省掉几个晚上的加班时间。这篇文章适合两类人一类是测绘、城乡规划、地质、水利背景需要频繁出地形图的技术人员另一类是刚接触ArcGIS、想把数据变成规范图件的学生或转行新人。文章里我会尽量把工具路径和参数逻辑说明白即使你以前没怎么碰过空间分析也能按步骤跟下来。1. 为什么90%的人做等高线都在低效加班先看清工作流的全貌先说一个我观察了很久的现象。很多人在拿到原始数据之后不做任何检查和处理直接就把高程点丢进“3D Analyst”或者“Spatial Analyst”工具里生成表面。这样不是不行但后续麻烦非常多生成的等高线会越过图幅边界或者是围绕孤立的高程异常值生成一堆不闭合的小圈也就是我们常说的“炮弹线”。最后为了保证图面干净你得手工删线一条一条去修剪工作量直接翻倍。真正高效的流程应该是在生成等高线之前先把数据准备、边界控制、成果裁切这几件事一次性想清楚。整个流程拉通之后大概是这样几大块数据检查与预处理检查原始高程点或等高线数据有没有错误包括高程异常、平面坐标是否统一、有无缺失区域。DEM构建与修正把离散的高程点转为连续表面填洼或者按需平滑让后续生成的等高线符合地形逻辑。等高线自动生成这一步不是单纯点一下工具而是要选对方法、设对参数保证等高线走势合理、精度够用。地形图边界构建要得到测量规范要求中的图幅边界或者工作区边界并据之裁切生成的等高线让图面范围干净、规范。拼图与制图整饰在ArcGIS里完成图幅拼接、取舍、注记避让、配色、图廓整饰输出满足交付要求的地形图。你注意一下这里面“边界”和“裁切”是关键。很多人的等高线之所以后期难处理就是因为第二步和第五步之间缺少一个“边界控制”的概念。先有边界再有裁切最后才是出图。从技术路线来说ArcGIS Desktop和ArcGIS Pro都能完成这些工作只是界面和部分工具位置有差异。如果条件允许我个人推荐直接用ArcGIS Pro因为Pro在多线程处理、大数据的平稳性上比Desktop的ArcMap好很多尤其是做填洼和等值线提取时特别明显。当然ArcMap 10.x的流程也完全一致工具名称基本不变所以这套操作思路在两个平台上都通用。2. 数据理清之后等高线生成的几个关键参数不能拍脑袋2.1 高程点转DEM插值方法决定了等高线的“骨架”等高线本质上是对连续表面的等值抽取。也就是说你得先有一个连续的栅格表面才能在上面切出等值线。这个连续表面通常用高程点或者等高线数据通过插值得到。ArcGIS里最常用的两个工具是“反距离权重法(IDW)”和“克里金法(Kriging)”都在ArcToolbox的“Spatial Analyst工具—插值分析”下面。IDW的原理是距离越近影响越大计算速度快适合地形变化不算太剧烈、点密度比较均匀的数据。克里金插值会考虑空间自相关性能给出一个相对平滑且有统计意义的表面但参数设置相对复杂如果数据本身质量一般反而容易插出夸张的极值。我自己的习惯是如果只是出1:10000甚至更小比例尺的地形图用IDW就足够了power值默认2。如果做水库淹没分析这类和精度强相关的项目才会考虑克里金。需要注意一个细节DEM是栅格数据像元大小很关键。像元设置得太大微地形会被抹平等高线细节丢失设置得太小数据体积暴涨处理速度下降而且可能把插值带来的噪点放大。一个比较实用的经验值是像元大小设置为原始高程点平均间距的1/2到1/3。比如你的数据点平均间距是5米像元大小设在2米左右比较合适。2.2 等值线工具忙于输出之前先把基线和计曲线分开在ArcGIS里生成等高线工具路径是“Spatial Analyst工具—表面分析—等值线”。这个工具的界面极其朴素就三个必填参数输入栅格、等值线间距、输出要素。我第一次用的时候也没多想输入10米间距直接生成结果后续做图例、做标注的时候难受得不行。因为地形图规范里计曲线和首曲线是分开的计曲线加粗、标注也只标在计曲线上。所以正确的做法是不要一次生成全部等高线而是分开生成两次首曲线基本等高距比如5米间距用于表达地形细部。计曲线加粗等高线通常是基本等高距的5倍比如25米用于读图和标注。这样做的好处非常多。你可以在符号化时直接给计曲线一个较宽的线宽而首曲线保持细线不需要额外写表达式去判断Z值是否是整倍数。而且做注记的时候直接用计曲线那层去做标注数量和压盖问题会大大减少。等值线工具有个隐藏的选项叫“Z因子”我见过很多人忽略它。Z因子用于转换高程值的单位比如水平单位是米、高程单位也是米那Z因子填1就行。如果你的数据是经纬度坐标、高程又是米就必须设置正确的Z因子否则生成的等高线会完全拧巴。这种情况在往届学生作业和刚入职的同事身上出现过不止一次。2.3 DEM要不要填洼看地形别一刀切等值线工具是直接在栅格表面提取等值线的它不会管这个表面里有没有不合理的洼地。如果你的DEM做出来有很多“假坑”等高线在这些区域会出现一圈一圈的闭合小圆像蟾蜍皮一样难看。“填洼”工具在“Spatial Analyst工具—水文分析”里作用就是把这类低洼区域填平。但这里要特别提醒填洼是给水文分析用的不是给等高线出图用的。盲目把DEM填洼会抹掉真实的负地形比如采坑、凹地这些在地形图上恰恰是需要保留表达的。如果只是为了出图好看我建议先做一次“焦点统计”或者“低通滤波”来平滑表面而不是直接填洼。ArcGIS里也可以用“Spatial Analyst工具—邻域分析—焦点统计”设置一个3×3的矩形邻域、统计类型为MEAN生成平滑后的栅格再做等高线。注意平滑会带来高程值的一定偏移在要求严格的生产项目里这个操作要谨慎最好在交付说明里记录清楚。3. 边界抽取与等高线的“修剪战”这一步才是图面干净的关键3.1 从哪里得到边界矢量转换是成本最低的方法很多项目里工作区边界在数据一开始就有比如甲方给的勘测定界图、村界、林班界等等。但如果你手里只有DEM或者影像没有现成的矢量边界就得自己从栅格数据里抽。常规做法是把DEM先做一个“提取分析—按属性提取”把有效值范围提取成栅格然后使用“转换工具—从栅格转出—栅格转面”。这样能得到一个覆盖整个有效区域的完整面状要素。但这个面往往边缘破碎锯齿感很强还得进一步做“平滑”和“简化”。ArcGIS里简化面有“制图综合—简化面”工具建议选择“PAEK”算法容差设置为DEM像元大小的2~3倍这样得到的边界既不会过度变形又能去掉大部分狗牙状的凸起。如果你面临的是流域边界提取那就需要用“水文分析”那一整套工具填洼、流向、流量、栅格计算器提取河网、分水岭。这是另一个大话题这里不展开。但核心流程是填洼后的DEM - 流向 - 流量流量阈值设为合适值之后再用“分水岭”工具提取汇水区。得到的流域边界再转成矢量之后一样可以用下面讲的裁切流程。3.2 用边界裁切等高线按要素裁剪和按掩膜提取的区别有了边界之后就要用它来裁剪等高线。ArcGIS里的裁剪方式有两种很多人分不清“分析工具—提取分析—裁剪”这个工具适用于矢量对矢量裁剪直接按照边界面的形状把等高线切出来。用起来简单但有个问题裁剪出来的等高线只是在边界处被硬生生切开边缘处没有闭合严格说还不是一幅“画完”的地形图。“ Spatial Analyst工具—提取分析—按掩膜提取”这是栅格层面的裁剪。它会先按边界范围把DEM裁出来再在裁好的DEM上生成等高线这样生成的等高线天然就在边界范围内不会出现穿出边界的现象。如果你的边界是面状矢量又希望保证等高线完全落在范围内最理想的流程是原始DEM——按掩膜提取——得到裁剪后的DEM——然后在这个DEM上生成等高线。这样做还有一个附带好处因为参与计算的栅格变小了等值线工具的运行速度明显更快。3.3 边界处的“半截线”要怎么处理即便用了按掩膜提取边界处的等高线依然会出现“断头”现象。地形图规范里等高线是可以闭合在边界上的这个闭合有两种表现一是碰到边界线就自然终止二是环绕成闭合圈。在ArcGIS里断在边界处的线在显示上够用但如果甲方要求每条等高线都得闭合这种情况多发于CAD出图场景就需要做一步拓扑处理。做拓扑检查时对等高线图层启用“不能有悬挂点”规则把边界处的悬挂点找出来然后在编辑会话里用“延伸”工具将断头线延伸到边界线上。这个过程比较繁琐但这是保证CAD画幅完整性的常见做法。如果你最终交付的是ArcGIS的mxd/aprx工程文件断头线完全可以接受不必强行闭合。4. 把裁切好的等高线变成拿得出手的地形图制图整饰实操4.1 合理地分层与符号化地形图第一眼观感来自线型等高线生成之后默认的符号是黑色细实线一眼看去就是一团乱麻。要让地形图读起来舒服符号化是关键。在图层属性的“符号系统”里用“类别—唯一值”的方式分别给首曲线、计曲线设置符号。具体来说首曲线线宽0.2mm颜色可以用棕褐色CMYK约41/53/70/12也可以纯黑色。计曲线线宽0.4mm颜色同样用棕褐色但要加粗。如果地形图还要叠加高程点注记高程点的小十字丝一般用灰黑色点大小控制在2pt左右。实际操作中很多朋友会把等高线导出到CAD里再符号化其实ArcGIS自带的制图效果已经足够了而且再导出到CAD会面临字体、线型重新调整的问题得不偿失。4.2 等高线注记的避让别让标注堆成一坨注记是地形图里最考验耐心的一环。直接用“标注”功能时ArcGIS会自动根据优先级避让遇到复杂地形还是会冒出密密麻麻的标签。这里分享一个标注表达式技巧。右键点击计曲线图层进入“标注”——“表达式”在表达式框里输入Function FindLabel ([ContourElev]) Dim elevation elevation [ContourElev] If elevation Mod 25 0 Then FindLabel elevation End If End Function这段代码的作用是只有高程值是25的整数倍时才显示标注。在计曲线上等高距为5米的前提下每隔25米标注一次图面一下子就清爽了。Mod函数会判断是否是整倍数你根据实际等高距去改那个25就行。另外在“放置属性”里把“放置压盖要素”勾掉让标注自动避开线状要素也能减少注记和等高线交叠。你可能注意到了ArcPy表达式在Desktop和Pro里略有差异但Function FindLabel这个结构两边通用。我当年第一次在Pro里写这段代码发现它执行不了后来看了日志才知道是因为字段名大小写的问题Pro的字段名默认带全大写需要用[字段名]方式访问把字段换成你属性表里实际的高程字段名就好。4.3 图幅拼图ArcGIS中“数据驱动页面”解决分幅难题地形图拼图在ArcGIS里的核心功能叫“数据驱动页面”位于“视图—数据驱动页面”菜单里而ArcGIS Pro中对应的是“布局—地图系列”。这个功能的逻辑是你事先准备一组分幅面每个面代表一幅图的范围软件自动按照这些面逐页生成布局每页聚焦一个图幅范围。拿一个具体的项目场景说某村庄地形图项目需要按1:2000分幅我把村庄范围用“格网索引要素”工具按规定的图幅大小切分成了8个图幅面然后图层按这个格网来出图。这样每页输出一幅图图名、图号、比例尺、指北针都会随着格网属性自动更新。这里最关键的一步是用“新建格网索引要素”工具在“制图工具—制图综合”里而不是手工画格网面。该工具可以设定格网的宽度、高度和原点坐标自动生成的图幅面带“PageNumber”字段。数据驱动页面正是依据这个字段来控制出图顺序。如果你手工画8个矩形没有PageNumber字段后面做自动分幅会很麻烦。分幅还有一个重要细节相邻图幅之间的接边。ArcGIS数据驱动页面并不会自动做接边处的等高线拼接处理你必须保证相邻图幅的等高线在接边处坐标一致。如果你是从同一个DEM裁切出来的那么坐标一致性是天然满足的如果是多个项目拼起来的数据需要先做交叉检查确保重叠区域的高程误差在允许范围内。数据库里我常听到的“接边检查”就是这个过程。4.4 输出打印按比例尺出图别用“适合页面”当你要输出最终的纸质地形图或PDF请注意ArcGIS布局里的输出比例尺设置。很多人做完数据驱动页面后直接把布局缩放到合适大小然后导出PDF结果是图纸打印出来后比例尺完全不对。正确做法是在布局视图里右键页面打开“布局”属性把“比例”设置为1:2000或你需要的比例尺然后调整数据框的大小和位置让图幅完全充满。再往“文件—导出地图”走设置分辨率至少300dpi这样打印出来比例尺才严谨。这个坑几乎每个测绘新人都会踩一次。我有一个师弟头一回出图导出的PDF在屏幕上看着挺好打印出来发现图廓里标注的1:2000和实际量测的距离对不上。他来找我排查我到布局里一看“缩放地图以适合页面”勾上了比例尺早就不是1:2000了。那一次我们花了几个小时重新出图。这个教训让我后来每次出图都先看布局属性里的“比例”再谈导出。5. 遇到的那些“折腾死人”的问题来自实测现场的排查复盘5.1 等高线锯齿感严重先别急着平滑检查原始数据的噪点有次我帮朋友处理某矿区地形图生成的等高线锯齿感非常严重看起来像心电图而不是地形。当时我第一反应是等值线工具的平滑阈值不够正准备调参数。后来仔细看了一下问题出在原始数据上——那份高程点数据里混入了不少异常值比如某个点高程显示为-9999这是很多软件的无值编码或者个别点高程比周边突然高了十几米。这类情况一定要在生成DEM之前就处理掉。可以用“栅格计算器”快速把所有小于等于-9999的无效值设为NoData公式类似SetNull(dem -9999, dem)“栅格计算器”在“Spatial Analyst工具—地图代数”里是最常用的工具。如果异常值不是固定编码而是随机的大偏差你可以先用“查找异常值”工具在“空间统计工具—工具”里做一次统计筛查。这个工具专用于识别那些在空间分布上明显偏离邻域的值跑一遍基本能圈出问题点。排查完异常值之后再看锯齿感往往已经好很多了。实在还不够的话再用“制图综合—平滑线”工具对等高线做一次PAEK平滑。注意PAEK平滑的容差设置为等高线间距的1/3到1/2即可容差太大会导致等高线之间相交这在几何上是不允许的。5.2 等高线在平缓区域拉得跟面条一样等值线间距的关键影响平缓地区比如冲积平原地形高差很小等高线会非常稀疏甚至出现长距离的平行线读图效果特别差。这种情况有两个应对思路在关键区域加密等高线保持全局的等高距不变单独对重点区域比如地块中心增加辅助等高线半距等高线。调整等高距某些情况下可以和甲方沟通把基本等高距从5米改为2米。但注意改等高距会直接改变图面表达和后续土方计算的精度必须提前确认。在ArcGIS里做半距等高线其实很简单等值线工具的间距参数填2.5米就行生成后用属性表的Z值字段筛选出非整数倍的那部分单独放到“辅助等高线”图层里符号用长虚线。5.3 生成等高线时内存崩溃大数据量场景的分块策略处理的DEM如果范围特别大等值线工具很容易报内存不足。尤其是32位ArcMap环境里这是家常便饭。我的经验是先用“分割栅格”工具按图幅把大DEM切成若干块每块分别生成等高线最后用“合并”工具把生成的线要素合到一起。分割栅格工具位于“数据管理工具—栅格—分割栅格”可以按指定的行数、列数或者面要素去切。切的时候注意设一点重叠范围比如相邻块重叠50米避免接边处出现等高线断裂。合并之后再用“修复几何”工具检查一下有没有几何错误这个步骤耗费的时间很少但能省去后续大量的制图麻烦。5.4 尖锐角与自相交把“高级编辑”工具用起来针对网络热词里被反复提到的“尖锐角”“线压盖”问题ArcGIS里有一个被低估的工具高级编辑工具条上的“修整线”和“要素转面”。如果你的等高线在某些地方形成了极窄的V字形夹角在出图比例尺下几乎看不出间距这种尖锐角是不符合地形图规范表达的。排查尖锐角可以用一个取巧的方法做一个“缓冲区分析”对等高线做一个极小宽度的缓冲比如0.01米然后在属性表里筛选出那些自相交或者和其他线距离过近的要素。缓冲区的面积异常可以从侧面反映尖锐角问题。接下来在编辑会话里用“整形要素”工具手工调整这些位置。这个工作没什么捷径只能靠经验判断哪里需要修修多了自然会形成肌肉记忆。6. 定制你自己的“等高线工作流”一些可供参考的制作路线从更宏观的角度看上面这套流程完全可以固化成一套个人或者团队的“等高线工作流”。我这里分享一个我自己在用的标准制作路线你可以直接把它当作清单来用阶段核心任务关键工具常见错误数据准备检查点/线数据、统一坐标系投影、定义投影、查找异常值跳过检查直接生成DEMDEM构建插值、裁剪、平滑IDW/克里金、按掩膜提取像元大小过大或过小等高线生成首曲线计曲线分离等值线、标注表达式一次性生成所有等高线边界处理提取/简化边界栅格转面、简化面、裁剪边界锯齿感强制图整饰分层符号化、注记避让符号系统、数据驱动页面标注堆叠、比例尺错乱输出交付打印PDF、导入CAD导出地图、转换工具分辨率不足、比例尺出错这张表打印出来贴工位上每次做地形图项目之前过一遍能挡掉很多返工。特别是“首曲线和计曲线分离”这一条对后期出图效率的影响最明显。我见过太多人到了制图阶段为了把计曲线单独标粗写了一大段表达式去区分Z值倍数白白浪费几个小时。如果你经常处理批量任务还可以把整个流程录制成ArcGIS Python脚本用ArcPy把DEM裁剪、等值线生成、边界提取串起来。比如下面这个简单流程可以自动完成“按掩膜提取→等值线”两步import arcpy from arcpy.sa import * arcpy.env.workspace rC:\Project\Terrain arcpy.env.overwriteOutput True dem dem_mosaic.tif boundary work_area.shp out_dem_clip dem_clip.tif out_contour contour_5m.shp outExtractByMask ExtractByMask(dem, boundary) outExtractByMask.save(out_dem_clip) arcpy.gp.Contour_sa(out_dem_clip, out_contour, 5)这段脚本很短但它背后对应的流程我已经在上文拆解过了先裁DEM、再生成等高线。脚本的好处是不受GUI的限制可以批量处理几十个图幅。如果你对ArcPy不熟也不用急着学先把手工流程跑顺再慢慢把脚本化提上日程。这里有个CASS平滑等高线的思路顺便说一下。很多人之前用CASS画等高线然后被“如何一键平滑”折磨。CASS里等高线平滑主要是“等高线—等高线滤波”和“等高线—等高线内插”这类命令。但在ArcGIS里我们更倾向于在DEM层面做平滑而不是在已经生成的等高线层面做滤波。因为在要素层面平滑相当于“事后补救”线在几何上会被移动精度受影响而在栅格层面做滤波保证的是原始地形的连续性和合理性。这也是我为什么在流程里坚持“先DEM后等高线”的原因。7. 几个我踩过之后不再犯的细节样式、坐标系与图面整洁最后再分享一些散但很重要的细节都是实际项目中经常被忽略的。关于坐标系统。如果给的是经纬度坐标GCS_WGS_1984而你最终要输出的是高斯投影例如CGCS2000 / 3-degree Gauss-Kruger zone一定要在数据准备阶段完成“投影”工具转换而不是直接在地图文档里用“动态投影”将就。动态投影只管显示改不了数据本身导出到CAD或者做面积量算时坐标还是错的。很多人做面积统计时候以为什么都没动结果一切换投影面积数值就变了其实就是底层数据坐标系没有真正转换。关于等高线压盖。“arcgis中不要压盖线”这个搜索词背后的问题其实多半出在矢量线图层相互之间的叠置顺序以及符号线的透明度。合理设置图层绘制顺序能解决大部分压盖高优先级的面在下然后是等高线最上面是注记这样注记不会被线吃掉。如果两条等高线之间距离太近、符号本身叠在一起就要回溯DEM精度问题了。关于无效值和背景。等高线生成区域如果存在NoData等值线是不会跨过NoData区域的所以在DEM阶段要把无效值处理好。有时NoData在栅格边缘形成一圈等高线就跟着绕开一圈看起来像沿边界画了个框非常丑。用“按掩膜提取”之前先确保掩膜范围没有破碎或者先做一次“栅格计算器”把NoData赋值为有效高程值再用边界裁切一次。关于成果版本管理。地形图项目经常要反复修改。我的习惯是每一版成果都存一个带日期的文件夹比如“Terrain_20240115”里面分好“01_Data”“02_DEM”“03_Contour”“04_Layout”四个子目录处理过程中产生的临时数据全部丢到“Temp”里。这个习惯最初只是为了防止自己把回归测试的数据弄混后来发现同事协作时也方便很多不会出现“谁覆盖了谁的成果”这种扯皮情况。ArcGIS里保存的mxd或者aprx工程文件也建议跟着这个目录结构一起走。关于平滑和简化的度量。简化面、平滑线这类制图综合工具每一次处理都会改变几何形状。做之前记录一下要素的面积和周长做完之后再对比一次——面积变化超过0.5%就要警惕过度简化这时候应该调整容差。这种方法虽然土但非常有效至少能保证你的成果数据在精度上站得住脚。搞地形图拼图这件事说白了就是把一堆离散的高程点变成一张能让人看得明白、量得准确、出得了图的地形图。ArcGIS提供的工具链本身的逻辑并不复杂每一步背后的选择和参数才是真正拉开效率和成品质量差距的地方。上面这套流程是我自己反复打磨沉淀的结果也还在持续根据新版本的功能做调整。你在实际项目中遇到更奇怪的情况欢迎带着现场截图和参数设置来交流。做GIS这行很多经验就是在一次次的“这次怎么又出问题了”当中磨出来的。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →