news 2026/10/5 3:42:54

基于DEM与地形起伏度的ArcGIS地貌分类实操指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于DEM与地形起伏度的ArcGIS地貌分类实操指南

做地貌分类这件事,在国土空间规划、生态功能区划、地质灾害评估这些项目里几乎绕不开。以前靠人工勾绘,翻等高线、对照影像,工作量大不说,同一个区域两个人勾出来的边界可能完全不一样。现在有了DEM数据和ArcGIS这套工具链,完全可以用地形起伏度这个指标自动完成初分类,效率提升一个量级。这篇文章我不打算讲泛泛的GIS概念,直接演示从DEM数据准备、填洼处理、地形起伏度计算到重分类出图的完整流程,并结合做过的实际项目把窗口大小选择、分类阈值调整这些关键参数掰开讲清楚。适合正在做地貌制图、区域地形分析以及需要批量出分类图的同学参考,尤其对刚上手ArcGIS Spatial Analyst扩展模块的朋友会很有帮助。

我需要先把一个核心观点放在前面:地貌分类的关键不是工具多复杂,而是你如何理解地形起伏度这个衍生指标,以及怎么根据研究尺度确定合适的作用窗口。ArcGIS里的工具命令很简单,点几下就出来了,但很多人做出来的分类图碎斑遍地、边界乱七八糟,多半就是窗口参数和分类标准没想清楚。

1. 地貌分类的整体思路与数据准备

1.1 为什么用地形起伏度而不是坡度

很多人一开始会问,坡度分析和地形起伏度都能描述地表形态,为什么要选起伏度?这里面的门道在于两个指标描述的维度完全不同。

坡度是地表某一点的倾斜程度,本质是高程对水平距离的导数,反映的是“局部微地形”的陡缓。坡度值对DEM里的噪声非常敏感,栅格里一个异常的尖峰或凹陷点,就可能在局部形成虚假的高坡度区。而且坡度只描述“斜度”,不描述“幅度”,一个连绵200米的山坡和一个只高差20米的小土坡,坡度可能都是20度,但它们在地貌学意义上完全是两个东西。

地形起伏度则是一个区域概念,指某个邻域窗口内最大高程与最小高程的差值。它描述的是“宏观切割程度”,能直接反映地面被流水切割的强烈程度。比如平原区起伏度基本在30米以下,而高山峡谷区可以超过1000米。用起伏度来做地貌分类,结果更稳定、更符合地貌学家的思维习惯,也更容易把不同地貌单元的特征拉开。

实际项目中还有一个现实考量:地貌分类通常要求图斑具有一定的区域完整性,坡度图噪声大、图斑破碎,后期合并处理的工作量巨大;起伏度因为基于邻域统计,天然有平滑效果,分类结果更利于后续制图综合和空间统计。

1.2 DEM数据选择与预处理

DEM数据的质量直接决定分类结果的可靠性。先说数据源选择,这是很多人容易忽视的第一步。

如果是做全国或省级尺度的大区域地貌分类,建议用ASTER GDEM 30米或SRTM 90米数据;如果做的是市县范围的中尺度区域,ALOS PALSAR 12.5米数据和SRTM 30米数据完全够用;要是小流域或工程场址这种精细尺度,有条件的可以上无人机LiDAR生成的亚米级DEM。分辨率不是越高越好,关键要和研究尺度匹配。你拿1米分辨率的DEM去做全省分类,数据量爆炸不说,地物细节(房屋、树木、车辆)反而会干扰地形特征的提取,导致分类结果碎得像马赛克。

数据获取之后,有几项预处理工作必须在计算起伏度之前完成:

  • 投影坐标系确认。地形起伏度计算涉及面积和距离统计,几何计算在投影坐标系下更直观准确。如果原始DEM是地理坐标系(GCS_WGS_1984这种),建议先投影到Albers等面积投影或UTM投影,再做后续分析。
  • NoData区域处理。很多公开DEM在湖泊、云覆盖区域会存在NoData空洞。用焦点统计算起伏度时,窗口覆盖到NoData会导致输出对应位置也是NoData,形成一大片空洞区。处理方法是先查看空洞位置和面积,必要时用栅格计算器做插值填补。
  • 填洼处理。DEM里存在大量虚假洼地(通常是采集误差或内插产生的伪坑),这些异常点会让起伏度计算结果出现局部突变。填洼虽然增加了处理步骤,但能让后续的起伏度反映真实地形趋势。

我用实际项目举例说明填洼的操作流程。打开ArcToolbox,依次展开“Spatial Analyst工具 -> 水文分析 -> 填洼”,输入DEM,输出设置为Fill_dem1,Z因子按需设置(如果DEM高程单位是米,栅格单位也是米,Z因子保持默认1即可;如果单位不一致需要换算调整)。填洼工具的原理是把低于周边高程的凹陷单元抬升到溢出点高程,浅坑会被直接填平,真实存在的喀斯特洼地、采坑等地形信息也会被一并抹掉,所以是否填洼取决于研究目的。做地貌分类时一般建议填洼,因为我们要的是宏观起伏趋势,而不是局部微型凹坑。

注意:如果对填洼影响有疑虑,可以先做一次不填洼的起伏度结果和填洼后的结果对比,看看差异区域是否集中在已知的洼地分布区,再决定是否保留填洼步骤。

2. 地形起伏度计算的原理与ArcGIS实操

2.1 起伏度的公式与物理含义

地形起伏度的数学定义非常简洁:

R = Hmax - Hmin

其中Hmax是分析窗口内最大高程,Hmin是最小高程,R就是该窗口中心位置的地形起伏度,单位与DEM高程单位一致,通常为米。

这里要特别强调“窗口”这个概念。窗口决定了你在多大的空间范围内衡量高差,也就是所谓的“分析尺度”。同一个点位,用3×3窗口算出来的起伏度和用11×11窗口算出来的结果可能相差数倍乃至数十倍。这不是工具出错了,而是尺度选择不同。

说到底,地貌分类本质上是一个“尺度依赖”问题。山脉的边界、平原与丘陵的界线,在不同观察尺度下都会变化。因此,你的窗口大小必须和你要划分地貌单元的大小相匹配。做全省尺度的宏观地貌分类,一般用几百米到几千米范围的邻域;做县城尺度,用几百米范围合适;做小流域,用百米以下窗口更合理。关于窗口怎么选,后面我会专门展开讲。

2.2 焦点统计工具的具体操作

在ArcGIS里,计算地形起伏度最常用的是“焦点统计”(Focal Statistics)工具,它属于Spatial Analyst工具集中的“邻域分析”工具组。我每次演示这个步骤,都会有人看完惊呼原来这么简单,但简单操作背后有一些细节必须注意。

打开ArcToolbox -> Spatial Analyst工具 -> 邻域分析 -> 焦点统计,界面里需要设置的关键参数如下:

  • 输入栅格:选择预处理好的填洼DEM。
  • 输出栅格:指定保存路径,注意路径中不能有中文和特殊字符,这是ArcGIS的老规矩,不然容易报错。
  • 邻域类型:下拉菜单里有矩形(Rectangle)、圆形(Circle)、环形(Annulus)和楔形(Wedge)等选项。地貌分类一般用矩形或圆形。圆形邻域在各方向距离权重一致,不会因为栅格行列方向产生方向性偏差,理论上是更合理的方案;矩形计算速度稍快,因为ArcGIS对矩形邻域有专门优化。我个人习惯在分析精度优先时选圆形,在批量处理大范围数据时选矩形以提速。
  • 邻域宽度和高度:如果选矩形,需要设置X方向和Y方向像元个数;如果选圆形,需要设置半径像元数。这里的关键是“奇数”原则,一般设置成奇数像元大小,确保窗口以中心像元对称。
  • 统计类型:下拉列表里选择“RANGE”,这就是极差,也就是最大值减去最小值,正是我们的地形起伏度。

参数设置完成后,点击确定运行,输出栅格每个像元的值就是该位置所在窗口的起伏度。这一步计算量比较大,如果数据范围大、窗口大,可能需要等待数分钟甚至更长时间。

提示:统计类型下拉列表里的英文和中文很容易对应错。ArcGIS中文版里“RANGE”翻译为“范围”,有的版本翻译成“极差”。不管你看到的是中文还是英文,就认准RANGE或者极差/范围,别选成MAX或MIN的单值统计。

2.3 窗口大小如何选择与验证

窗口大小是整个流程中最需要经验判断的一步。我的做法分三步走。

第一步,先了解研究区的基本地形概况。比如研究区是高山区,主山脊间距在几公里量级;或是丘陵区,沟谷密度较高、地形起伏周期在几百米。通过等高线或绘制DEM山体阴影图,确定地形“波长”的粗略范围。

第二步,根据地形波长初步确定窗口半径。通常选择窗口边长接近或略大于典型地貌单元的平均尺度。举例来说,某项目区为低山丘陵,山脊到沟谷的距离约为500米,DEM分辨率30米,那么对应的窗口大约是17个像元左右,我选21×21窗口(边长为630米),这样每个窗口基本覆盖一个完整的地形起伏周期,算出来的起伏度最能代表该区域的宏观切割程度。

第三步,多窗口对比验证。分别计算3×3、7×7、15×15、21×21窗口的起伏度,然后对比各结果的标准差和空间分布。有效的窗口应该在保证图斑连续性的前提下,把不同地貌单元之间的起伏度差异拉开。实际操作经验是,窗口过小时分类图斑极其破碎,噪声大;窗口过大时不同地貌单元之间的过渡边界会被模糊掉,失去分类意义。多次对比后,选择一个窗口参数使得分类结果最贴近实地认知,这就是最优尺度。

这里提醒一点:千万别把3×3窗口的“起伏度”当成最终结果直接分类。3×3窗口本质上就是中心像元与周围8个邻域像元的高差极值,它反映的还是局部像元间的邻域反差,和坡度信息高度重合,不具备宏观地貌意义。我做第一版分类时就是用默认3×3,结果分类图几乎等同坡度图,后来调整到21×21才出效果。

3. 地貌分类标准与重分类实现

3.1 常见的地貌分类体系与阈值划分

地形起伏度栅格算好之后,接下来的工作是把连续的起伏度值划分为离散的地貌类型。这个过程在ArcGIS里叫“重分类”。

采用哪套分类标准,直接决定了成果是否专业可信。地貌学家积累了很多成熟的分类方案,我实际使用中最常参考的是以内外力营力为核心、结合海拔与起伏度的组合分类法。简化到只用起伏度一个指标做快速分类时,有一个常用的经验阈值体系,如下表所示:

地貌类型地形起伏度范围(米)典型特征描述
平原0 - 30地面平坦,切割微弱,高差极小
台地30 - 70顶面平缓、边缘有明显坡折,起伏不大
丘陵70 - 200波状起伏,沟谷较浅,相对高差中等
小起伏山地200 - 500山体连绵,切割较深,相对高差明显
中起伏山地500 - 1000山高谷深,地形陡峭,切割强烈
大起伏山地>1000极高强度切割,多为高山极高山地貌

这套阈值不是拍脑袋定的,而是参考了《中国地貌分区》和《1:100万中国地貌图制图规范》里对切割程度的量化界定。实际项目里,我会根据研究区域的海拔背景微调:在青藏高原这种高海拔区域,起伏度200米可能已经是高寒台地而非丘陵;在东南沿海丘陵区,起伏度200米确实已经是典型的低山地形了。所以分类标准要结合区域地理背景来判断,不能生搬硬套。

另外还要说明一点,如果项目要求更全面的地貌分类,仅靠起伏度是不够的,一般还要叠加海拔分级。比如可以把DEM按海拔划分成低海拔(<1000米)、中海拔(1000-3500米)、高海拔(3500-5000米)和极高海拔(>5000米),然后与起伏度分类结果做栅格叠加,形成“海拔+起伏度”的组合分类体系。这样得到的类型如“中海拔丘陵”“高海拔中起伏山地”等,更加科学细致。

3.2 在ArcGIS中完成重分类的步骤

重分类操作本身非常简单,但有几个细节容易出错。

在ArcToolbox中找到“Spatial Analyst工具 -> 重分类 -> 重分类”,打开对话框后:

  1. 输入栅格选择起伏度结果栅格(Relief)。
  2. 重分类字段保持Value不变。
  3. 点击“分类”按钮,在“分类”对话框里选择分类方法为“手动”(Manual),类别数量设为6。
  4. 在“中断值”表格中手动输入各阈值:30、70、200、500、1000,最高值可以设为99999。
  5. 在“输出栅格”处设置输出路径,名称建议用Landform_Class。
  6. 确认无误后点击确定。

这里提示一下:分类对话框里默认会使用几何间隔法或自然间断点法自动生成分类区间,千万别直接用。自动分级的区间不可能正好落在30米、70米这些地貌学阈值上,必须手动改成我们预设的阈值。很多人做完发现自己平地面积巨大、山地面积几乎为零,原因就是默认分类把阈值搞偏了。

重分类完成后,新栅格的每个像元值对应一个类别代码:1代表平原,2代表台地,3代表丘陵,4代表小起伏山地,5代表中起伏山地,6代表大起伏山地。后续制图时就可以按类别来配色、标注图例了。

3.3 分类结果的栅格后处理

重分类得到的结果常常有一个问题:碎斑太多。受原始DEM噪声和窗口边缘效应影响,分类结果里会出现很多一两个像元的“椒盐状”孤立小图斑,与周边类型显得格格不入,这在制图和统计时很难看。

解决这个问题有几个办法,我按推荐程度排列:

第一是众数滤波。使用“Spatial Analyst工具 -> 邻域分析 -> 众数滤波”工具,输入分类栅格,设置邻域大小为3×3。该工具会用邻域内出现次数最多的类别替代中心像元,对去除孤立噪点非常有效。注意可以连续做两次,但别超过三次,否则会把有价值的细碎地貌边界也抹掉。

第二是“多数过滤”工具(Majority Filter),它和众数滤波类似,但允许设置替换阈值,控制更精细。实际效果各有千秋,我习惯先用众数滤波,再配合栅格转面后的小图斑剔除来完善。

第三是栅格转面后的面积阈值过滤。把分类栅格通过“转换工具 -> 从栅格转出 -> 栅格转面”转成矢量多边形,在属性表里计算每个图斑的面积(利用“计算几何”功能),然后按面积阈值筛选删除小于设定面积的图斑(比如小于1平方公里的图斑删除),再用“消除”工具把删除后留下的空洞合并到相邻最大图斑。这个方法虽然步骤多一些,但控制力最强,适合最终成果图生产。

经验分享:我见过很多人在分类后直接拿原始栅格出图,碎斑多到图面没法看。只要肯花5分钟做一次众数滤波,图面质量立刻能提升一个档次。这是性价比极高的一步。

4. 专题制图与成果输出

4.1 分类栅格的符号化与配色方案

分类结果出来后,制图是决定成果能否被领导和评审专家一眼认可的关键。ArcGIS里的栅格符号化设置相对简单,但要做得专业也讲究配色逻辑。

在内容列表中右键点击Landform_Class图层,选择“属性 -> 符号系统”。由于是分类数据,应该选择“唯一值”(Unique Values),而不是“分段色带”。在唯一值窗口中,系统会列出所有类别值,你需要逐个点击类别前的颜色块来调整颜色。

配色我推荐按“从低到高、从冷到暖”的思路:平原用绿色系,表示平坦低地;台地用浅黄色;丘陵用橙色;小起伏山地用浅棕色;中起伏山地用棕红色;大起伏山地用深紫色或深红色。这种配色方案符合视觉直觉,也不容易引起审美争议。

如果默认的颜色方案不合心意,可以从“颜色带”下拉框中选择ArcGIS自带的配色方案,或者双击颜色块自定义RGB值。这一步骤我建议多花一点时间,因为后续所有图面输出都用这个配色,配好了可以节省大量返工时间。

4.2 图面整饰与专题图输出

进入布局视图之前,先把图层的显示范围设置好。地貌分类图如果范围过大,内容会很小,重点区域显示不清楚。我通常会先按研究区边界裁剪出一个与项目范围一致的数据框范围。

在“布局视图”下插入必要要素:

  • 图例:用Insert -> Legend插入,标题写“地貌类型”,图例项保留中文类别名。
  • 比例尺:Insert -> Scale Bar选择合适样式,单位设为千米。
  • 指北针:Insert -> North Arrow选一个简洁的样式。
  • 网格或经纬度坐标:Insert -> Graticule(或Grid),设置经纬网间隔,出图更专业。
  • 标题:用Insert -> Text添加,比如“XX区域地貌类型分类图”。

布局排好之后,从“文件 -> 导出地图”出图,格式选择JPEG或PDF。分辨率设置建议不低于300dpi,尤其是打印成图册的场合。另外ArcGIS Pro用户可以用“共享 -> 导出布局”达到相同效果。

5. 常见问题与避坑记录

5.1 实操中反复遇到的几个典型问题

这些问题都是实际做项目时踩过的坑,整理成速查表供大家对照排查:

现象可能原因排查与解决办法
焦点统计输出有大量NoData区域输入DEM本身存在NoData空洞先用IsNull和Con工具检测空洞,结合邻域均值插值填补后再计算
起伏度结果出现极高异常值DEM存在粗差或未填洼运行填洼工具,必要时先做DEM中值滤波消除孤立异常点
分类图碎斑极多、边界混乱窗口过小或分类前未做滤波增大邻域窗口,分类后执行众数滤波,或转为矢量后按面积合并图斑
平原面积占比异常大分类阈值被ArcGIS默认方式打乱检查重分类的分级方法,务必选“手动”并输入自定义阈值
工具运行报错“999999”路径含中文、存储空间不足或Spatial Analyst许可未启用检查自定义路径使用纯英文,确认扩展模块已勾选,清理C盘临时空间
起伏度分类结果与山脉走向完全不符窗口形状选择不当造成方向偏差换成圆形邻域,避免矩形邻域在不同方向上统计范围不一致

5.2 一点实操心得

我刚开始做地貌分类时,总想着把所有步骤一步到位,结果就是反复返工。后来总结出来的稳妥流程是:先小范围试算,把窗口参数和阈值敲定,再批量跑全区域;每个中间产品都起好清晰的名字,填洼DEM、起伏度栅格、滤波分类结果各有各的命名,避免后面拿着同名文件搞混。

还有一个容易忽略的点:如果研究区跨多个图幅、需要拼接多个DEM瓦片,一定要先做镶嵌,再统一投影,最后再算起伏度。有人图省事分块计算再镶嵌,结果每个分块边缘出现明显的“镶嵌痕迹”,因为各块的邻域在分块边缘信息缺失,拼出来的起伏度在接缝处出现条带状异常值,后期非常难修复。

根据我个人经验,窗口半径取地形起伏波长的一半左右,分类结果在视觉上最均衡;阈值体系则至少要参考所在区域的地貌背景微调,才能让分类结果既满足规范要求,又经得起实地检验。先从小范围试验开始,多对比几次,再铺开到全域,这个流程基本不会翻车。希望这篇文章能给正在做同类工作的朋友一些直接可用的参考。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/5 3:42:33

RFID与ISO 15693:实验室危险品全链条智慧溯源实践

前阵子去一家新材料研发企业做实验室安全回访&#xff0c;随手翻了翻那本快被翻烂的危险品领用登记本。领用人签名栏里&#xff0c;有不少"签名"明显是同一支笔同一时间补上去的。管理员苦笑着对我说&#xff1a;台账每个月都在做&#xff0c;一到审计盘点却总是凭空…

作者头像 李华
网站建设 2026/10/5 3:41:47

2026期货自动交易软件横评:回测与实盘差异的真相与选型指南

刚把2026年第一轮主流期货自动交易软件横评跑完&#xff0c;趁着行情数据和回测结果还热乎&#xff0c;先把结论和处理过程整理出来。今年圈子里问得最多的已经不再是“哪款软件能自动下单”&#xff0c;而是“同样一套策略&#xff0c;放在不同工具里跑&#xff0c;结果为什么…

作者头像 李华
网站建设 2026/10/5 3:39:31

插件加载失败?did not activate 报错深度解析与排查指南

1. 先别急着修&#xff1a;同一条报错背后完全是两码事我见过太多人在群里贴一条报错就问"怎么办"&#xff0c;结果一群人围着报错文字猜了半天&#xff0c;最后发现连问题类型都没搞对。"插件加载失败"这句话本身毫无信息量——它可能是插件自己写崩了&am…

作者头像 李华
网站建设 2026/10/5 3:39:30

Flutter for OpenHarmony:音乐播放器首页从0到1的跨端实战

1. 为什么是“Flutter for OpenHarmony”而不是双端各写一套1.1 OpenHarmony应用生态现状先说背景。OpenHarmony这几年在智能设备端的落地速度明显加快&#xff0c;除了手机&#xff0c;还有平板、智慧屏、车机、工业终端和IoT设备都在往这个系统上靠。作为一个开发者&#xff…

作者头像 李华
网站建设 2026/10/5 3:38:47

插件加载失败排查实战:从激活机制到开发选型

插件这个词&#xff0c;放到今天已经不算新鲜概念了。从IDE到播放器&#xff0c;从构建工具到在线协作平台&#xff0c;凡是身边常见到一定规模的软件&#xff0c;几乎都能看到 plugins 的身影。很多人第一次接触它&#xff0c;是在看某个编辑器的时候问“plugins 到底是什么”…

作者头像 李华
网站建设 2026/10/5 3:38:47

Transformer连续像素级预测:从自注意力到深度估计

1. 项目解剖&#xff1a;为什么Transformer能做连续像素级预测1.1 这个标题到底在解决什么问题先把这个标题拆开看。Transformer-Based Attention Networks指以自注意力为核心的Transformer架构&#xff0c;Continuous Pixel-Wise Prediction指的是对图像每一个像素输出一个连续…

作者头像 李华