查看: 114|回复: 1

1分钟搞定 DEM 起伏度计算!ArcGIS 工具箱 + Python 脚本直接抄...

[复制链接]

89

主题

8

回帖

31

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
31
发表于 2025-10-31 11:00:15 | 显示全部楼层 |阅读模式
在地形分析、规划设计、地质研究中,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,就能算邻域平均值,灵活得很!
如果用的时候遇到问题,或者有其他地形分析需求,欢迎在评论区留言,下次给大家出更实用的工具教程~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0

主题

5

回帖

0

积分

新手上路

Rank: 1

积分
0
发表于 2026-3-23 10:34:30 | 显示全部楼层
1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

申明:本站所发布的一切资源(包括但不限于文章、信息、软件、补丁、注册机、注册信息、解密分析内容等)均来自网络,仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果用户自负。发布的信息来自网络,版权争议与本人无关。您必须在下载后的24小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该资源,请支持正版,购买注册,得到更好的正版服务。如有侵权请与本站联系删除本信息。
快速回复 返回顶部 返回列表