十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

GIS地形分析实战:从DEM预处理到坡度坡向水文分析全攻略

GIS地形分析实战:从DEM预处理到坡度坡向水文分析全攻略 做GIS的人十有八九都绕不过地形分析这道门槛。不管是做规划选址、水文模拟、灾情评估还是搞个可视域分析看看信号塔覆盖范围底层都离不开对DEM数字高程模型的深度“压榨”。很多人一提起地形分析第一反应就是ArcGIS里那个“Spatial Analyst”工具条点几下出张坡度图就完事了。但真正到了实际项目中从数据预处理到参数选择再到结果验证处处都是坑。这篇文章就基于我多年实操的经验把地形分析这条线上最核心的环节拆开揉碎从原始数据怎么收拾到坡度、坡向、山体阴影、水文分析、可视性分析怎么做再到坐标偏移、栅格转面这类高频疑难杂症怎么解一次性说透。这篇文章既不是软件菜单的说明书式罗列也不是纯理论推导而是站在“一个活生生的项目怎么落地”的角度来写。这里的每个步骤、每个参数、每个坑都是我以及我身边的同行们在真实业务场景里反复试出来的。如果你正在为毕业论文里的地形因子提取发愁或者刚接手一个需要出地形分析成果图的项目再或者只是单纯想把DEM玩明白这篇都值得你花十分钟静下心来看完。1. 地形分析的整体设计与思路拆解1.1 地形分析的本质从DEM网格里“提取”地球表面的数学形态先搞明白一件事所谓地形分析本质上是利用离散的高程采样点也就是DEM里的每个像元通过特定的邻域运算或全局运算反演出地表的坡度、坡向、曲率、粗糙度等连续变化特征或者提取出山脊线、沟谷线、汇水区等结构化要素。通俗点说DEM就像一张布满数字的网格纸每个格子记录着这一小块地面的海拔而地形分析就是从这张网格纸上“看出”山的形状、水的流向、太阳照射的角度。理解了这一点你就知道为什么DEM的数据质量能直接决定分析结果的生死。像素值精度不够、有孔洞、有异常尖峰那后面算出来的坡度图就是一张“鬼图”——明明是个平缓的坡地却能算出七十多度的“悬崖”。在我做过的项目里最常遇到的就是原始DEM来自不同来源比如航天飞机雷达地形测绘任务SRTM、先进星载热发射和反射辐射计ASTER GDEM、无人机航测生成的DSM等它们的分辨率、坐标系、高程基准五花八门直接堆在一起分析结果完全不可信。1.2 为什么“先预处理、再分析、后验证”是唯一可靠的流程地形分析在项目里最常见的失败原因不是工具不会用而是流程乱套。很多人拿到DEM上来就打开【坡度】工具开跑结果出了图才发现范围不对、单位不对、甚至出现了大面积空值然后才回头查数据一来一回浪费大半天时间。真正的标准流程一定包含四道关第一关是数据体检检查DEM的范围、分辨率、坐标系、坐标系单位度还是米、值域范围有没有负值或异常高值、是否有空值区域第二关是数据预处理包括投影转换、重采样、裁剪、填洼水文分析前必须做、空洞填补第三关才是正式分析按需选择坡度、坡向、山体阴影、曲率、等高线、水文分析、可视域等工具第四关是结果验证把生成的图层叠到原始影像或地形图上肉眼检查是否正确再辅以统计指标比如坡度均值、标准差判断是否合理。这套流程听起来繁琐但它能救你于水火之中。举个真实案例我曾处理过一批某县城的规划用地地形分析原始DEM是WGS84地理坐标系而项目要求输出CGCS2000高斯投影坐标系的成果。如果跳过投影转换这一步直接做坡度分析工具会默认用经纬度单位计算算出来的“坡度”根本不是真正的坡度而是某种没有物理意义的数值整个成果直接报废。后来我统计过凡是遵循这套流程的项目地形分析返工率不超过一成而跳过预处理的十有八九要回头补课。2. 核心数据准备与三大“隐形杀手”2.1 坐标系与投影一失足成千古恨的第一步做地形分析坐标系绝对是第一道鬼门关。因为ArcGIS里的坡度、坡向、山体阴影、填洼、流向等工具全部依赖像元实际代表的物理尺寸来计算。如果你的DEM是地理坐标系比如WGS84单位是度那一个像元代表的距离在不同纬度上完全不同算出来的坡度自然就是错的。正确的做法是分析之前把DEM投影到合适的投影坐标系。国内项目一般用CGCS2000 / 3-degree Gauss-Kruger zone或者旧的Xian 1980 / 3-degree Gauss-Kruger zone或者UTM投影。选择投影带的原则是让研究区尽量位于投影带中央减少变形。投影转换时有一个高频翻车点直接对DEM做“投影栅格”Project Raster时重采样方法一定要选“双线性插值Bilinear”或“三次卷积Cubic”而不是“最邻近Nearest”。最邻近重采样适合分类数据如土地利用用到连续高程数据上会产生锯齿状台阶后面提取等高线时会出现大量生硬的锯齿非常难看。提示检查DEM坐标系最快的方法是在ArcGIS Pro的内容列表中右键图层查看【源】→【空间参考】。重点确认两项一是坐标系名称二是线性单位是不是“米”。如果单位是“度”趁早先投影再做分析。2.2 分辨率与重采样不是越细越好很多新手拿到DEM第一反应是“分辨率不够细给我重采样成1米的”。这其实是个误区。重采样不会创造信息它只是把已有的信息“插值”到更密的网格上差值出来的像元并没有真实测量依据反而可能引入虚假的地形细节。选分辨率的原则是与你的应用场景和原始数据精度匹配。比如SRTM 30米的数据你非要重采样到5米除了让文件体积变大、处理变慢没有任何实际收益而无人机航测得到的DSM可能本身就是0.5米分辨率你为了加快计算强行降采样到10米又会丢失大量关键地形细节坡度分析结果变得粗糙不堪。实操中怎么取舍我一般遵循“原始分辨率的1倍到0.5倍之间”的原则。比如原始DEM是30米分析用30米或15米原始是5米分析用5米或10米。另外如果后续要做流域分析、可视域分析这类对计算量敏感的任务可以适当降采样但不要低于应用需求的下限。2.3 填洼Fill水文分析前不可跳过的一步填洼这步是我见过很多人忽略但又极其关键的预处理。DEM中难免存在一些“虚假洼地”——明明现实中水流可以通过的沟谷在DEM网格里却因为数据噪声、插值误差或者真实存在的闭合凹坑形成了一个无法排水的“坑”。如果不填掉这些洼地后面做流向分析和累积流量分析时水流就会卡在这些局部低点导致汇水区划分出现大片错误。ArcGIS的【填洼】Fill工具有一个Z limit参数默认是空值表示把所有洼地都填平。但在有些场景下我们需要保留真实的地形凹陷比如真实的喀斯特漏斗、采石坑这时就应该设置一个合理的Z limit只填掉那些深度小于阈值的“噪声洼地”。用多少阈值合适我的经验是先用【焦点统计】或者直接目视检查DEM的直方图看高程值的分布情况。一般来说SRTM 30米数据用10米左右的Z limit比较稳妥如果是高精度无人机DEM1~2米就够。也可以做几次试验比较填洼前后的流向栅格差异如果差异极大说明阈值设小了或者数据噪声太严重。3. 实操过程生态位最高的五大核心地形因子计算地形分析工具很多但真正在项目里高频使用的核心分析无非五种坡度、坡向、山体阴影、等高线、水文分析流向与累积流量。我把这五大类的具体操作步骤、参数含义和结果验证方法逐一拆解。3.1 坡度分析degrees还是percent选错单位就是灾难坡度是地形分析里最基础也最常见的输出。ArcGIS里的【坡度】Slope工具只需要输入DEM然后选择输出测量单位——度Degrees或百分比Percent。很多人在这里吃了亏选了百分比结果出来的值域是0到几万因为百分比坡度的计算公式是“高程变化/水平距离 × 100%”理论上可以无限大。而“度”的取值范围是0到90更直观也更适合大多数展示场景。单位的选择取决于应用领域。如果你是做道路规划或土地利用通常用百分比国外很多标准里道路坡度限制用百分比如果你是做地质灾害危险性评价或径流模拟通常用度。我个人习惯是出图展示用度工程计算用百分比两者都可以通过栅格计算器快速转换percent tan(degrees × π/180) × 100。还有一个值得一提的参数是Z factor高程因子。当你的DEM是地理坐标系单位是度时高程单位是米或英尺两者量纲不一致必须通过Z factor校正否则坡度结果完全失真。在投影坐标系下如果高程和水平单位都是米Z factor设为1就行了。实测心得某次用全球30米DEM做某山区坡度分析默认设置算出来的平均坡度快到40度视觉上整片图都是红色数据明显不合理。排查下来发现DEM还是WGS84地理坐标系Z factor也没设。投影到高斯克吕格后重算平均坡度降到二十多度才符合实际地形。3.2 坡向分析九宫格分类与“平地”陷阱【坡向】Aspect工具输出的是每个像元坡面朝向的方向单位是度从正北0°顺时针到360°。ArcGIS默认把坡向分为九类8个方向北、东北、东、东南、南、西南、西、西北加上平地-1。实操中要特别注意两点。第一坡向结果对DEM噪声极其敏感尤其是平缓区域微小的高程误差会导致坡向剧烈跳动。我的习惯是先对DEM做一次低通滤波比如【焦点统计】取3×3均值再去算坡向噪点会少很多。不过要注意滤波本身会平滑掉真实微地形所以只在地形过于破碎时使用。第二坡向分析中“平地”类值-1在后续分类统计里经常被忽略但它实际上可能占据很大面积做面积统计时别忘了单独列出来。3.3 山体阴影可视化神器与“太阳方位角”玄学【山体阴影】Hillshade工具用来模拟在特定光照条件下地表明暗效果生成非常直观的三维感灰度图。它的核心参数是太阳方位角Azimuth默认315°即西北方向和太阳高度角Altitude默认45°。这里有一个很多教程不会告诉你的调参思路默认的315°方位角是为了让阴影看起来“正常”但如果你想通过对比不同光照下的阴影来增强对地形的判读可以生成多个不同方位角比如0°、90°、180°、270°的山体阴影然后以不同的透明度叠加在原始影像上能在视觉上极大增强地形起伏的感知。这在制图惊艳度上非常加分。ArcGIS Pro里有个更实用的功能叫【山体阴影按视图点】Hillshade from viewpoint它考虑了实际观测点的位置生成的阴影更接近人眼从某一点看过去的真实效果适合做景区通视分析或景观视觉评估。3.4 等高线提取从DEM到矢量等高线的两个隐藏参数等高线是地形表达最经典的矢量形式。很多人觉得ArcGIS里【等高线】Contour工具一点就出结果没什么可讲的。但实际上等高线的质量与两个前处理密切相关一是DEM是否平滑二是等高线间距Contour interval怎么定。DEM不平滑的情况下提取的等高线会非常毛糙——线上到处都是锯齿和小毛刺。我常用的办法是先对DEM做3×3或5×5的【焦点统计】均值滤波再做等高线。如果提取出来的等高线仍然不够平滑可以用【平滑线】Smooth Line工具选用PAEK算法容差设为等高距的一半左右效果立竿见影。等高线间距的选择则是个老生常谈的问题比例尺大、地形平缓用小间距如1米、2米比例尺小、地形陡峭用大间距如10米、20米。其实没有绝对标准但有一个经验法则图上等高线间距控制在0.5mm到2mm之间比较美观用这个反推实地间距 图上间距 × 比例尺分母 / 1000米。3.5 水文分析流向、累积流量与河网提取水文分析是一套工具链而不是单个工具。核心逻辑链条是填洼Fill→ 流向Flow Direction→ 累积流量Flow Accumulation→ 设置阈值提取河网Raster Calculator中累积流量 阈值→ 栅格河网转矢量Stream to Feature。这里每个步骤都有讲究。流向工具默认采用D8算法单流向水只流向最陡的下坡邻域它能生成8个方向的流向编码1、2、4、8、16、32、64、128——分别代表东、东南、南……等这是二进制标志位。累积流量工具则是统计每个像元上游有多少个像元的水流汇入它本身没有单位是一个无量纲的“汇水像元数量”。提取河网时阈值的选取直接决定河网密度。阈值越小编出的河网越密、支流越多阈值越大越只保留主河道。我的经验是先用累积流量栅格的属性表看分位数取第90~95百分位试试水再根据结果微调。特别注意积累流量结果往往是长尾分布——大部分像元累积流量很小少数干流像元巨大。如果直接拉伸显示会“白茫茫一片”别慌渲染方式选“对数”或“累积百分比拉伸”就能看清细节。4. 常见问题与排查技巧实录下面总结的是我在实操和带人过程中遇到的最高频问题每一个都对应一个真实踩坑现场。把它们按“症状—原因—解法”整理成速查表方便你直接对号入座。4.1 DEM投影后出现面积偏差或叠不齐症状投影后的结果和研究区边界对不上或者面积和预期偏差明显。原因最常见的是“动态投影”和“真正投影”混淆。ArcGIS Pro默认会动态投影即图层以原始坐标系参与显示底层数据没有变而你看到的结果像是套上了目标坐标系于是误以为已经转换成功。面积偏差则多半是投影带选错或原始数据本身就是非标准伪坐标系。解法必须用【投影栅格】Project Raster工具生成新的数据文件然后右键查看源属性确认坐标系已更改再叠加研究区域边界目视检查是否重合。如果面积偏差大检查是不是用了墨卡托这类面积变形极大的投影。4.2 坡度、坡向计算结果全图非常怪大量0值或极大值症状坡向结果里大量像元是-1平地坡度结果有大片0值区或出现不合理的高坡。原因多半是DEM本身有问题。一是存在NoData空洞——工具计算时把空洞附近也当作无效二是DEM经过有损压缩比如转成jpg或浮点转整型时精度丢失三是原始数据本身带有“条纹”噪声或高空值噪点。解法第一件事加载DEM后先看统计直方图和最小最大值确认没有异常值。第二件事识别空洞区域用【按掩膜提取】Extract by Mask或【焦点统计】填补NoData。填补方法可以这样先用【焦点统计】算出3×3邻域的均值然后用【条件判断】把NoData区域替换成均值。如果噪声严重到影响判断可能需要回到源数据重新下载或重新生成。4.3 ArcGIS Pro在线地图加载不了/天地图底图加载失败症状ArcGIS Pro里加载在线底图如天地图、影像图失败显示白屏或提示错误。原因天地图这类国内在线服务需要正确的请求格式和密钥Token而不同版本的ArcGIS Pro对WMTSWeb Map Tile Service的支持细节有差异另外网络环境和代理设置也会导致请求超时。这个问题的排查路径比较固定先确认网络能正常访问天地图官网再检查URL是否带了正确的Token最后核对坐标系是否匹配。解法天地图WMTS建议使用“EPSG:4490”或“EPSG:3857”的金字塔地址注意URL中tk参数需要你自己申请。在ArcGIS Pro里通过【添加数据】→【来自路径】输入WMTS地址添加后如果白屏尝试在【目录】窗格的【服务器】节点下重新连接。稳妥做法是在线底图和本地地形分析数据分开处理底图只做展示背景不做分析。4.4 栅格转面栅格转面后输出范围不合理或碎了症状把分类栅格比如土地利用或坡度分级结果用【栅格转面】Raster to Polygon工具转矢量后发现生成的图斑无比细碎或者范围边界非常奇怪。原因一是原始栅格没有经过【简化】Simplify——ArcGIS默认会简化边界但如果关闭了简化边界就会沿像元边生成锯齿状二是栅格的值域太连续比如把DEM直接拿来转生成上亿个碎面机器直接卡死。解法转面前先在【重分类】Reclassify工具里把连续栅格变成少数几个类别再执行【栅格转面】。另外按我的习惯转完之后用【融合】Dissolve按类别字段做一次融合把相邻同类图斑合并能极大减少碎斑。4.5 栅格计算器怎么都没结果输出全空或报错症状在【栅格计算器】里写了表达式比如dem * 0.5结果输出全空或者报“无数据”。原因绝大多数情况下是表达式里引用的栅格文件名有中文、空格或特殊字符导致解析时分词出错也有可能是栅格没有正确加载进地图内容列表工具只认已经加载的栅格图层还有就是除数为零或对空值区域做运算输出范围继承自某个全空的图层。解法栅格文件命名严格用英文字母数字下划线不要有空格表达式里直接引用的必须是当前地图内已加载的图层名可以右键图层属性里复制源名称在不明确范围时工具参数里的“输出范围”和“像元大小”手动指定不要留默认。4.6 输出路径里全是空格或中文导致的“工具执行失败”症状工具突然执行失败报错信息指向“无法创建输出”“无权访问”等。原因很多时候不是权限问题而是输出路径存在中文、空格或过长的路径。ArcGIS工具对输出路径的处理非常敏感C:\Users\张三\我的文档\地形分析成果\最终版\坡度_第二次.shp这类路径极易导致底层文件访问失败。解法项目一开始就建立纯英文路径的工作目录比如D:\GISProject\TerrainAnalysis下面的数据文件也全部用英文数字命名。这是我带团队做项目时定的“铁律”严格执行之后工具失败率直线下降。5. 工具链的扩展从“点几下”到“能定制”5.1 模型构建器与Python脚本让地形分析跑批量化单次分析当然用菜单点几下就行但项目一多、数据一多你就需要把整个流程固化下来。ArcGIS的【模型构建器】ModelBuilder可以把填洼、流向、累积流量、阈值提取河网这一整套流程做成一个模型输入新的DEM一键跑完水文分析非常方便。如果想进一步定制PythonArcPy是绕不开的。ArcPy里做地形分析核心代码其实不复杂。举个例子批量计算多个DEM的坡度import arcpy from arcpy.sa import * arcpy.env.workspace rD:\GISProject\TerrainAnalysis arcpy.env.overwriteOutput True dem_list arcpy.ListRasters(*_dem*) for dem in dem_list: out_slope Slope(dem, DEGREE, 1) out_path dem.replace(_dem, _slope) out_slope.save(out_path) print(out_path 完成)这里Slope函数的三个参数分别是输入DEM、输出单位DEGREE或PERCENT、Z factor投影坐标系下水平与高程单位都是米时设为1。如果你有几十块分幅DEM要处理把这段脚本一跑几分钟就出全部坡度图。这也是“GIS二次开发”里最入门的形态——不需要做界面只需要把工具流程串起来。5.2 与模型模拟和三维可视化结合打破“分析孤岛”地形分析的真正价值往往不在分析结果本身而在于为后续决策提供输入。比如水文分析提取的河网可以直接导入HEC-RAS或SWMM做洪水淹没模拟坡度、坡向、曲率这些地形因子可以作为地质灾害危险性评价如信息量法、逻辑回归的输入层山体阴影和等高线则可以导入SketchUp、CityEngine或UE5里生成白模/三维场景辅助规划方案展示。这里多说一句三维可视化中非常实用的“山体阴影叠加”技巧在ArcGIS Pro里把山体阴影设为底层上面叠加带透明度的DEM彩色渲染比如高程分级配色整体效果是“既看得清高程层次又不失立体感”。这个“立体感地形图”是规划汇报里最受欢迎的底图之一比单纯的等高线或单色DEM美观太多了。5.3 轻量级替代方案QGIS和SAGA GIS能满足大多数需求如果预算有限或想在开源软件里完成同样流程QGISSAGA GIS的组合完全可以胜任。QGIS里有完整的地形分析工具箱比如【地形分析】Terrain Analysis菜单下有坡度、坡向、山体阴影、粗糙度等一系列工具SAGA GIS则在高阶地形分析如地形湿度指数TWI、汇流动力指数SPI方面比ArcGIS更丰富。SAGA GIS的中文界面设置也简单安装后进入【Settings】→【General】在【Language】里选择“简体中文”重启即可。不过说实话SAGA的英文界面用熟了差别不大工具名都是固定的查文档更方便。6. 实用技巧与我的操作习惯最后分享几个我这些年下来形成肌肉记忆的操作习惯不算是特别高深的东西但每一个都是“能少踩一次坑就少踩一次”的积累。第一所有地形分析成果尽量存成Float浮点型的TIFF格式不要存成整型IMG或GRID。浮点型保留小数精度在后续栅格计算、重分类时才不会因为取整丢掉关键信息。第二每次做完一个中间结果都在属性里写下“数据来源、坐标系、处理时间、处理人”等元数据。ArcGIS Pro支持图层属性里的“描述”字段项目跨度几个月再回来看数据这些笔记能救你一命。第三出图前永远要检查一下图层的坐标系和范围确保和项目要求的成果一致——我见过不止一次辛苦做了一晚上的地形因子图拿到甲方那里一叠图才发现坐标系是Web墨卡托投影参数完全不对只能全部返工。还有一个很多人问到的小细节栅格图层的图例标签换行。在ArcGIS Pro里图例条目默认是单行显示的如果类别名称很长比如“坡度大于25度的极陡坡区域”可以在分类名称中手动加空格或换行符然后调整图例的排列方向和字符换行属性导出时就会自动换行。这个小操作在出正式成果图时非常实用。地形分析这条线工具永远不是瓶颈数据质量和对地形的理解才是。你把预处理做扎实、参数含义搞明白、结果验证做到位分析出来的东西自然靠谱。这也是我从一次次返工和踩坑里总结出的唯一真理。
返回列表