尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
从DEM到山地晕渲图:地形图核心参数、制图流程与进阶技巧
做地形图不难做出一张能让人愿意多看几眼、愿意反复放大推敲的地形图才是真正花时间的地方。很多刚接触GIS的人一上来就问“晕渲图怎么生成”好像这是一个一键就有的神奇功能。我最初也这么以为直到某次项目汇报前整晚返工才真正明白晕渲图并不是地形图之外的另一张图而是地形图上叠加的“光”地形图的骨架始终是DEM数字高程模型。这篇文章就围绕“创建地形图、晕渲图”这件事把数据准备、参数调整、踩坑记录完整过一遍适合准备做第一张像样地形图的GIS新手也适合已经会出图但一直觉得效果“差点意思”的人。1. 地形图与晕渲图先理清关系再动手1.1 地形图到底在表达什么传统地形图的核心任务是表达“地表形态”哪里是山脊、哪里是山谷、哪里陡、哪里缓。它通过等高线、高程点、地貌符号来承载这些信息再加上河流、道路、居民地等要素形成一张既能看到自然骨架、又能定位人文要素的图面。关键问题在于等高线虽然精确但它的读取门槛很高。普通人看到一圈一圈密密的曲线很难立刻在脑子里建立“这是一座山”的形象。即使是长期看图的人也需要一定时间才能从等高线疏密中判断出坡度变化。所以实际制图中我们几乎不会只丢一张纯等高线图出去而是会配合分层设色或者叠加晕渲让地形起伏变得一目了然。1.2 晕渲图是“加了光的地形图”晕渲图也叫山体阴影图、地貌晕渲图本质上是对DEM做一次“模拟光照”。它假设有一束太阳光从某个方向照在地表根据每个栅格单元的坡度、坡向计算出哪个面被照亮、哪个面落在阴影中最后生成一张灰度或彩色的明暗图。你可以这样理解DEM像一个真实的地形模型晕渲就是打在手电筒光下拍出的照片。它和分层设色的区别很关键分层设色告诉你“这块地方海拔是多少”晕渲告诉你“这块地方看起来是凸还是凹、走向是什么”。晕渲图本身不直接表达海拔数值所以很少单独使用更多是叠加在高程色带、等高线之下作为“立体感图层”出现。一张专业感强的地形图通常就是“等高线分层设色晕渲人文注记”的组合。2. DEM数据准备一切质量问题的根源2.1 数据分辨率怎么选DEM分辨率直接决定成图精细度也决定后续处理的时间成本。常见公开DEM有30米、90米这个级别部分地区能拿到更高精度的数据。我个人的选择逻辑很简单先看制图范围和比例尺再反推数据分辨率。分辨率适合场景注意事项90米省级以上、大范围小比例尺示意细节少放大后块状感明显30米市县级、中比例尺制图最常见选择兼顾细节和文件大小10米小流域、局部山地精细制图数据量大需做平滑处理5米及更高工程级、峡谷冲沟等微地貌对机器性能要求高慎用有一个很常见的误区以为分辨率越高越好。实际上30米数据如果出A4小比例尺图效果已经完全够用用5米数据做全省范围除了卡顿看不出明显优势。分辨率的选择要配合出图比例尺而不是一味追求精细。2.2 坐标系、拼接与裁剪这一步是新手最容易翻车的地方。很多人下载DEM后直接生成坡向、山体阴影结果出来的晕渲形状奇怪、变形严重根本原因就是坐标系没处理好。DEM最初下载时通常是地理坐标系单位是度。做坡度、坡向、山体阴影这类计算时系统需要计算“水平距离”和“垂直距离”的比例关系。如果水平单位是度垂直单位是米两者不是一个量纲计算出来的结果就会失真。所以正规流程是先把DEM投影成米制单位坐标系比如常见的横轴墨卡托投影分带方式让栅格每个像元都对应真实的水平尺寸。投影完成后Z因子垂直夸张系数直接设为1就能得到比较准确的山体阴影。裁剪则要稍微细心一点。先拼接再裁剪不要先裁剪再拼接否则接边处容易出现拼缝痕迹。裁剪范围最好比制图范围外扩一圈防止后期加注记、做整饰时边缘出现空白或裁切过紧的问题。输出时确认NoData值设置正确否则黑色背景会混入渲染结果。2.3 空洞、异常值和填洼处理DEM不是完美的原始数据里经常有空洞、异常尖峰、水域数值异常等情况。空洞通常表现为黑色斑块多在湖泊、云覆盖区域异常尖峰则是某个像元突然特别高或特别低在晕渲图上会表现为“炸开的亮点”或“黑坑”。处理空洞时最简单的办法是使用邻域均值或样条插值填充千万不要用0填充。0在DEM里会被当成海平面导致整个区域出现一圈夸张的高差后续晕渲图边缘全是黑的。异常尖峰可以用低通滤波或中值滤波去除。这里要注意平滑程度要克制反复滤波会把真实山脊磨圆看起来“肉肉的”反而丢掉了地形骨架。至于填洼如果只做制图不一定非要填洼。填洼主要是给水文分析、流向计算用的。但如果你希望晕渲图上不出现“反常识”的封闭凹坑可以做一个轻微填洼。这一步不是必须我自己的习惯是先看数据如果目标区域是喀斯特地貌或有大量自然洼地就不填保留真实特征如果是平缓丘陵且要叠加水文线才考虑填洼。3. 制图实操从DEM到山地晕渲图的完整流程3.1 第一步生成山体阴影山体阴影的核心参数有三个太阳方位角、太阳高度角、垂直夸张系数。太阳方位角默认通常是315度也就是光源来自西北方向。这个方向是无数制图人试出来的“标准答案”它让大部分山脊产生一侧亮、一侧暗的效果符合北半球读者习惯性的心理预期立体感最强。如果你希望不同区域有晨昏感可以改成45度、90度但一份图里尽量保持统一否则会显得光线混乱。太阳高度角控制阴影的长度和对比度。45度是平衡值适合大多数地形想增强沟谷和陡崖的轮廓可以降到30度左右想整体柔和就抬到60度以上。高度角越低阴影拉得越长视觉冲击越强但也容易让大片区域变成死黑丢失细节。我的经验是先按45度出一版如果感觉立体感不足每次降5度试试不要直接跳到20度。垂直夸张系数也就是Z因子是另一个容易被忽略的选项。投影坐标系下通常设为1代表真实高差比例但如果工作区是平原地区整体地势平缓山体阴影会非常平淡这时可以把Z因子调到1.5或者2人为放大垂直起伏让丘陵轮廓显出来。反过来如果是高山深谷区域Z因子保持1就好否则阴影会过黑、过碎。提示生成山体阴影后先把它当成一张灰度图看不要急着叠加颜色。如果灰度层次丰富、山脊线清晰、没有大范围死黑死白说明参数基本到位如果整张图发灰、没有对比度多半是拉伸方式或NoData值设置有问题而不是参数不够。3.2 第二步高程分级与配色晕渲提供的是“光”颜色提供的是“高度信息”。两者结合的关键在于高程分级和配色的合理性。高程分级可以按统计方法自动分比如自然间断点分级也可以按海拔带人工划分。大范围地图建议按地形实际特征来平原、丘陵、低山、中山、高山分别设级每一级的色差要明显但不刺眼。这里有个容易犯的错为了追求“清晰”使用饱和度极高的红绿蓝结果晕渲一叠整张图像儿童画展。出版物风格的配色更倾向于低饱和度的色带比如低处用浅绿、中间用黄褐、高处用棕白渐变这样既能区分高程又给晕渲留出了表现空间。高程带建议用色使用要点低海拔平原浅绿、淡黄绿不要过艳避免与农田要素混淆丘陵台地黄、浅橙过渡要渐变不要硬切中高山地棕、红棕可随高度加深高海拔积雪区灰白、白保留少量纹理避免死白3.3 第三步叠加渲染与注记图层叠加顺序我习惯这样排最底层是分层设色色带第二层是山体阴影第三层是等高线最上面是水系和注记。注意山体阴影层和高程色带之间不是简单“放上去”而是要设置透明度。透明度的把握需要看实际效果。山体阴影透明度设在40%到60%之间比较常见太低立体感被颜色盖住太高颜色被阴影盖住图面发暗。有些GIS工具支持混合模式把山体阴影设置成“正片叠底”或“柔光”会比单纯调透明度更好看。正片叠底会让暗处更暗适合强化结构柔光则更柔和适合大面积图面。等高线一定要和晕渲配合来看。等高线间距要匹配比例尺和地形复杂度平坦区域如果等高线太密会压住晕渲的光影细节山区如果等高线太疏又表达不出地势变化。注记部分则要克制山峰名字、高程点、主要河流名称适量即可不要把所有数据一股脑放上去。3.4 第四步导出成图和版式出图最后一步导出参数反而最影响成品观感。很多人直接在屏幕上截屏或者导出默认尺寸结果打印出来模糊不清或者文件巨大。正确的做法是先确定成图幅面和分辨率。如果是A4幅面宽约21厘米300dpi下大约需要2480像素宽A3是3508像素宽。不要直接把全工作区原尺寸导成大TIFF那是给打印店用的不适合日常交付。交付电子版一般用PNG或JPG即可注意JPG压缩质量不要低于85否则色带过渡处会出现难看条纹。版式整饰上图例、指北针、比例尺、坐标网格这四件套一个都不能少。指北针建议放到图框的右上或左上比例尺要和当前出图比例尺匹配。图例中如果有高程色带最好以渐变条形式出现而不是块状色块这样看起来更专业。4. 工具选型桌面GIS和脚本化各有各的香4.1 桌面软件点选式操作对大多数单张制图需求桌面GIS软件的点选式操作完全够用。加载DEM找到山体阴影工具设好方位角、高度角、Z因子生成后调整色带、透明度、叠加注记最后导出。整个过程直观所见即所得非常适合“手工精修”的工作方式。用桌面软件时我有两个习惯一是每调一组参数就截一张图拼在一起对比而不是在众多图层里反复开关二是把常用参数记成自己的模板比如“区域地形图用东南330度、高度角35度、Z因子1.2”这类固定配置。下次换一块数据先套模板再微调效率会高很多。4.2 Python脚本自动化批量出图当处理几十上百个图幅时还在桌面软件里一个个点就是浪费生命。这类工作更适合脚本化处理。很多GIS桌面软件的底层计算库都是同一个生态用Python调GDAL就能批量生成山体阴影。from osgeo import gdal # 打开DEM src_ds gdal.Open(dem.tif) # 设置山体阴影参数 opts gdal.DEMProcessingOptions( azimuth315, altitude45, zFactor1.5, scale1, computeEdgesTrue ) # 输出晕渲图 gdal.DEMProcessing( hillshade.tif, src_ds, hillshade, optionsopts )这段代码的核心思路是先打开DEM栅格再用GDAL的DEM处理接口传入方位角、高度角、Z因子等参数最后输出一个GeoTIFF格式的晕渲图。桌面软件里那个“山体阴影”按钮底层逻辑和这个完全一致。通过脚本你可以循环遍历多个DEM文件批量产出晕渲成果。还有一点脚本化不只用于批量出图也适合参数探索。你可以写一个循环分别用高度角30度、45度、60度生成三个版本叠加对比后选最优比自己手动改参数快得多。4.3 什么时候该走自动化我的判断标准是单张精修图手工批量生产图脚本预处理流水线脚本参数探索实验脚本。自动化最大的优势是复现性和一致性同一套参数处理一百块数据成果风格完全统一这是手工很难做到的。但自动化也有坑一是脚本不会替你看图输出结果可能全部带着同一个问题必须在抽检环节多花时间二是脚本处理大文件时特别吃内存建议先做一个图幅测试再全量跑。实践中我通常的做法是先用桌面软件把1个图幅“试到满意”然后把参数固化到脚本里批量执行后再人工抽检10%的成果。5. 常见问题与排查技巧实录5.1 晕渲图发灰发糊山地像饼干症状整张图没有立体感山地像面包或者饼干没有锋利感。这个问题最常见的原因是原DEM在软件里被自动拉伸显示把实际高程范围之外的NoData或异常值也渲染了出来其次是Z因子太低平缓地区看不出起伏。排查顺序先看DEM的直方图和拉伸方式确认有效值范围再检查NoData是否被正确识别最后再决定是否调高Z因子。如果这些都没问题可以试试降低太阳高度角到30度阴影变长后立体感会立刻提升一个档次。5.2 图形边缘锯齿与拉伸伪影症状山脊线像锯齿或者地形表面出现一层规律的“水波纹”条纹。通常是重采样方式不当造成的。DEM重投影或者导出时如果使用最近邻法重采样边缘会出现明显锯齿如果数据压缩参数不合适会出现条纹。处理方法是把重采样算法改成双线性或三次卷积。这个选项在导出、投影、生成山体阴影时都能设置。如果已经生成了带伪影的晕渲不要试图用滤镜修复直接回到原始DEM重新计算换重采样方式重来一次。现象常见原因对应处理灰糊、无立体感拉伸异常、Z因子过低检查NoData、调高Z因子、降低高度角山脊锯齿状重采样方式不当改用双线性或三次卷积大块黑色阴影高度角过低、填充异常提高高度角、检查填充值色带过渡条纹导出压缩率过高提高JPG质量或改输出PNG/TIFF5.3 等高线跟晕渲对不上症状等高线明明看着是山脊晕渲却把那边渲染成了阴影面两者互相矛盾。这个问题多半是数据来源不一致等高线是从旧的矢量数据转过来的DEM是新的或者两者的坐标系、投影方式不一致。解决办法也简单等高线直接从同一份DEM里提取参数设置保持一致。提取时注意简化容差不要太大否则等高线会变得“圆滑过头”丢失真实拐点。另一个小细节等高线分层设色时计曲线和首曲线的颜色、粗细要区分开不然叠到晕渲上视觉会很乱。5.4 处理大范围数据时卡顿和内存不足症状加载全省或者更大范围DEM时软件转圈、内存飙升甚至直接崩溃。大范围高分辨率DEM的数据量非常可观把整个区域一次性读入内存再计算很容易爆掉。处理办法分三层第一制图范围不需要覆盖整个数据范围先裁剪到目标区域第二预览阶段把分辨率临时降低比如用90米替代30米先把版式调好出正式图再切回高分辨率第三如果必须大范围出图可以考虑分块计算后再拼接或者用金字塔/概览机制让软件按需调用不同层级的栅格而不是全部加载。6. 进阶思路让晕渲图更有质感的细节6.1 多光源叠加只用单一方向的光源总会有部分坡面完全在阴影里细节全丢。一个进阶技巧是用不同方位角生成多份山体阴影再以不同透明度叠加。比如西北方向光源做主光源透明度高一点东北方向光源做补光透明度低一点。这样既能保留立体感又能把背光面的细节带出来。多光源叠加适合大范围地图因为不会出现一整片“死黑区”。操作上并不复杂生成两组不同方位角的晕渲放在两个图层里调好透明度就好。6.2 透明度与混合模式除了常规透明度混合模式也能让最终效果完全不同。晕渲层使用“正片叠底”可以压暗颜色层让地形结构更扎实使用“柔光”则会让图面更通透、更接近传统水墨晕渲的质感。很多老式制图软件里的“地表晕渲”质感放到现代GIS里就是通过混合模式模拟出来的。这个没有标准答案我建议同一张图至少尝试三种组合透明50%、正片叠底、柔光放在一起对比再选。不要只盯着屏幕小比例尺看放大到实际输出比例尺检查两种模式下局部山地的观感差异会非常明显。6.3 局部兴趣点突出有时候整张地形图都做完了甲方突然说能不能把这片峡谷突出一下这时候不需要整体重做。可以对局部范围复制一份DEM把Z因子调高、高度角调低生成一个“加强版”晕渲再用掩膜把它融合到原晕渲上。局部区域的立体感一下子被拉起来而整体风格又能保持一致。这种方法同样适合突出山脊线、冰川谷这类关键地貌。不过要提醒一点局部强调要适度突出范围之外不要有生硬的接缝过渡区设置一些羽化会让融合更自然。做完之后再回看全图如果视觉焦点有两三处以上那就算过度处理了要收回一些效果。我个人在实际操作中的体会是制作地形图和晕渲图最忌讳的不是技术不够而是“什么都想要”。又想颜色鲜艳又想立体感强又想细节丰富结果最后图面互相打架反而什么都看不清。我后来给自己定了一条规矩每次生成晕渲后先把它变成灰度图只凭对比度和结构来判断参数是否合格合格了再叠颜色。这样一套流程走下来最终成图反而更干净也更接近出版级效果。如果你也想做出一张能拿得出手的地形图不妨从调整高度角和透明度开始多做几组对比感受一下“光”对地形的塑造力。
RELATED

相关推荐

用 lab 命令行提交并盯完一次训练:Transformer Lab CLI 任务执行完整指南

用 lab 命令行提交并盯完一次训练:Transformer Lab CLI 任务执行完整指南

用 lab 命令行提交并盯完一次训练:Transformer Lab CLI 任务执行完整指南 【免费下载链接】transformerlab-app The open source research environment for AI researchers to seamlessly train, evaluate, and scale models from local hardware to GPU clusters. …

📅 2026/10/15 11:45:45
JVM类加载机制深度解析与性能优化实战

JVM类加载机制深度解析与性能优化实战

1. JVM类加载机制深度解析在Java虚拟机执行引擎的核心架构中,类加载机制如同精密运转的齿轮组,承担着将字节码转化为运行时数据结构的关键使命。作为从业十余年的JVM调优专家,我见证过太多因类加载问题导致的性能瓶颈和诡异故障。本文将聚焦类…

📅 2026/10/15 11:45:45
微信小程序电商闭环实战:云开发+支付+后台全链路代码

微信小程序电商闭环实战:云开发+支付+后台全链路代码

简介:这是一份面向微信小程序开发者的学习型实战代码资源,聚焦小程序商店类应用的全栈实现,适用于希望掌握小程序生态内应用分发平台开发逻辑的中初级开发者。资源包含57个文件,涵盖9个JS业务逻辑文件、8个WXML页面结构文件、8个W…

📅 2026/10/15 11:45:45
MORE NEWS

更多资讯

📰

在HMI触摸屏上跑贪吃蛇:威纶通EBpro宏指令与内存映射实战

做这个项目的起因其实特别简单:在工业自动化里摸爬滚打这么多年,HMI 编程翻来覆去就是画面切换、数据展示、报警弹窗,时间长了总觉得缺了点什么。贪吃蛇这种小游戏,放在触摸屏上看起来像个玩具,但它几乎把 EBpro 宏指令…

📰

从“标题五个字”到完整文章:极简输入的内容创作方法论

你有没有收到过这样的需求——项目标题一栏只写了五个字:“标题五个字”。正文空白,关键词空白,摘要描述也空白。乍一看像是个没填完的草稿,甚至有点像拿来测试的假需求。但我在实际工作中发现,这五个字恰恰是信息量最…

📰

Windows底层能力实战指南:分盘/安全日志/服务治理/虚拟化四维精讲

1. 这不是“系统设置大全”,而是Windows老手每天真正在用的底层能力清单很多人把Windows当成一个点点鼠标就能用的工具,装完系统就开浏览器、开微信、开办公软件——这当然没问题。但如果你在某次磁盘突然告急时手忙脚乱地删照片腾空间,或在电…

📰

Flutter GraphQL在鸿蒙平台的适配与API治理实践

1. 项目背景与核心价值作为一名长期深耕移动端开发的工程师,我最近在将Flutter应用迁移到鸿蒙平台时遇到了GraphQL集成难题。经过两周的实战摸索,终于成功将angel3_graphql这个强大的Flutter GraphQL客户端库适配到鸿蒙环境。这个过程中积累的经验&#…

📰

二维图像压缩感知重构:MATLAB完整实现与OMP算法解析

简介:一个面向二维图像压缩感知(CS)重构算法的MATLAB实现代码包,适合电子信息、计算机视觉与医学成像等领域的研究者、工程师及学生用于算法验证与二次开发。压缩包共26个文件,包含18个.m脚本(覆盖测量矩阵…

📰

中医方剂知识图谱构建:SpringBoot与Neo4j实践

1. 项目背景与核心价值中医方剂知识图谱构建这个项目,本质上是在用现代信息技术解决传统医学领域的知识管理难题。我接触过不少中医馆的电子病历系统,发现普遍存在方剂数据零散、关联性弱的问题——某个方子的组成药材、适用症状、禁忌人群这些关键信息往…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬