在地形分析、规划设计、地质研究中,DEM 起伏度是判断区域地形平缓或陡峭的核心指标。但手动用 ArcGIS 做焦点统计、算最值差,不仅步骤繁琐,批量处理时更是重复到崩溃,最近做项目地形起伏度比较多,顺手自制了一个起伏度计算工具 FOR ACGIS10.8(其他版本没有测试) —— 今天直接给大家一套 “拿来即用” 的解决方案,从 Python 脚本到工具箱配置,全程干货,新手也能 10 分钟上手! 为什么要自己做起伏度工具?ArcGIS 自带功能不够用? 先说说常规操作的痛点:用 ArcGIS 算起伏度,要先开「焦点统计」算最大值,再算最小值,最后用「栅格计算器」做差值,3 步才能出结果。如果要换邻域大小(比如 3×3、5×5 像元)、换邻域类型(矩形 / 圆形),又得重新来一遍;遇到几十上百个 DEM 文件批量处理,鼠标点到手酸都做不完。 而我们今天要做的工具,能一次性解决这些问题: - 1 步出结果:输入 DEM + 选参数,直接生成起伏度
- 支持批量处理:文件夹里所有 DEM 自动算,不用逐个点
- 自定义邻域:矩形 / 圆形任选,大小自由调
- 兼容中文路径:再也不用因为路径有中文报错
- 带进度提示:计算到哪一步,软件实时告诉你
核心工具包:1个文件 + 1 个工具箱,直接用这套工具的核心是「Python 脚本」和「ArcGIS 自定义工具箱」,不用你写一行代码,下载后按步骤配置就能用。先给大家拆解核心组件: 1. 关键 Python 脚本(已解决所有坑)之前很多人用 Python 处理 DEM 会遇到「中文路径报错」「Spatial Analyst 扩展没授权」「参数解析错误」,这次的脚本已经把这些坑全踩平了 —— 适配 ArcGIS 10.8 的 Python 2.7 环境,自带编码处理、扩展检查、错误提示,核心功能就 3 件事: - 自动检查并启用 Spatial Analyst 扩展(不用手动开)
- 按你选的邻域类型 / 大小,批量算焦点统计最值
- 自动计算 “最大值 - 最小值”,生成起伏度栅格
2. ArcGIS 自定义工具箱:可视化操作,不用记命令把 Python 脚本封装成 ArcGIS 工具箱后,操作和用自带工具一样简单 —— 打开 ArcGIS 后,双击工具就能填参数,不用输一行命令。工具箱里包含 2 个工具: - 「DEM 起伏度计算(单个)」:处理单个 DEM 文件,适合临时分析
- 「DEM 起伏度计算(批量)」:处理整个文件夹的 DEM,适合批量出结果
3分钟上手教程:从配置到出结果这里给大家一步一步讲清楚,怎么把工具配置到 ArcGIS 里,以及怎么用。全程不用复杂操作,跟着做就行。 第一步:准备 3 个文件(文末获取)- Python 脚本文件:dem_relief_calculator.py(已修复编码问题)
- 空白工具箱文件:起伏度 for Acgis 10.8 by赛尔.tbx
- 说明书:参数设置对照表(怕你填错参数)
第二步:配置 ArcGIS 工具箱(3 步完成)- 打开 ArcGIS 10.8,在「Catalog」窗口找到你存放文件的文件夹,右键点击「DEM 分析工具箱.tbx」→「Add」→「Script」;
- 填工具基本信息:
- Name:CalculateRelief_Single(单个处理)
- Label:DEM起伏度计算(单个)(显示名称)
- Description:输入单个DEM,计算指定邻域的起伏度
- 关联脚本 + 设置参数:
- 点击「Script File」→「Browse」,选择准备好的 Python 脚本;
- 按下图添加 4 个参数(重点:参数顺序别错!):
参数顺序 | 显示名称 | 数据类型 | 方向 | 关键设置 | 1 | 输入 DEM 数据 | Raster Layer | 输入 | 必选,选你要分析的 DEM | 2 | 输出起伏度数据 | Raster Dataset | 输出 | 选保存路径,格式建议.img/.tif | 3 | 邻域类型 | String | 输入 | 下拉选择:RECTANGLE/CIRCLE | 4 | 邻域大小 (像元) | Long | 输入 | 最小值 1,常用 3/5/7 |
设置完点「Finish」,单个处理工具就做好了;批量工具同理,只是把参数 1 改成「Folder」(输入文件夹),参数 2 改成「Folder」(输出文件夹)。 第三步:运行工具,30 秒出结果以单个 DEM 处理为例,双击刚做好的「DEM 起伏度计算(单个)」: - 点击参数 1 的「浏览」,选择你的 DEM 文件(比如栅格1.tif);
- 点击参数 2 的「浏览」,选保存路径 + 输文件名(比如起伏度_result.img);
- 邻域类型选「RECTANGLE」(矩形,常用),邻域大小填「5」(5×5 像元,根据需求调);
- 点击「OK」,等着进度条跑完,结果直接在 ArcMap 里显示!
如果要批量处理,就用「DEM 起伏度计算(批量)」,选输入文件夹(放所有 DEM)和输出文件夹,点「OK」,软件会自动遍历所有 DEM 文件,算完的结果会自动加前缀「relief_」,方便区分。 避坑指南:90% 的人会踩的 3 个错- 报错 “需要 Spatial Analyst 扩展”:打开 ArcGIS 的「自定义」→「扩展模块」,勾选「Spatial Analyst」,再重新运行工具;
- 中文路径还是报错:检查脚本里的编码设置是否正确(文末的脚本已处理,别自己改),或者临时把文件放英文路径下(比如D:/DEM/);
- 邻域大小填错:邻域大小是 “像元数”,不是 “米”—— 比如 DEM 分辨率是 10 米,5×5 像元就是 50×50 米的分析范围,根据研究尺度调。
工具获取:直接抄作业,不用自己写为了省大家时间,我已经把「Python 脚本和工具箱」打包好了,直接下载解压就能用,不用改任何代码。 获取方式:关注公众号【seer520com】,回复关键词「DEM起伏度」,直接领取工具包。 最后再提醒一句:这个工具不仅能算起伏度,稍微改改脚本里的 “最值差” 公式,还能算 “极差”“平均值”—— 比如把relief_ras = max_ras - min_ras改成mean_ras = (max_ras + min_ras)/2,就能算邻域平均值,灵活得很! 如果用的时候遇到问题,或者有其他地形分析需求,欢迎在评论区留言,下次给大家出更实用的工具教程~ |