乐于分享
好东西不私藏

批量裁剪影像?这个 ArcGIS 插件帮你一键搞定

批量裁剪影像?这个 ArcGIS 插件帮你一键搞定
我们都遇到过这样的情况——手里有一张覆盖整个县域(甚至更大范围)的正射影像,需要按村级行政单位、按项目地块、或者按某些特定区域范围来逐块裁剪输出。

一张两张还好说,用栅格裁剪工具手动操作就行。但如果有几十个甚至上百个图斑呢?一张张裁、一张张命名、一张张存——操作繁琐不说,中途手一抖选错了参数,前面的全白干。

有人说,那我建个 ModelBuilder 模型循环处理呢?可以,但模型搭建本身就有门槛,要素拆分、循环迭代、输出命名、异常处理……搭完调试完,大半天也过去了。

有没有一种方式,能让我选好数据、点一下按钮,剩下的全交给工具?

今天介绍的这款 ArcGIS Add-in 插件——RasterClip 批量栅格裁剪工具——就是专门干这件事的。

一句话说清楚:选一张影像 + 选一个矢量面图层,工具按每个面要素逐个裁剪,自动输出独立的 TIF 文件,文件名直接取自你指定的字段。

假设你有 100 个村界图斑,点一下,100 张按村命名的影像整整齐齐躺在输出目录里。

一、安装前提

在开始之前,确认一下你的环境:

项目
要求
ArcGIS Desktop
10.2 及以上版本(ArcMap)
Python
2.7(ArcGIS 10.x 自带,无需额外安装)
扩展模块
Spatial Analyst(Clip_management 需要)
操作系统
Windows 7/10/11
磁盘空间
裁剪过程中会生成临时 Shapefile,建议预留足够空间

安装方式:双击 .esriaddin 文件,ArcGIS 会自动将插件注册到 Add-in Manager。打开 ArcMap,在菜单栏 Customize → Toolbars 中勾选 RasterClip,工具栏即出现。

二、工具界面与参数说明

打开 ArcMap 并加载好栅格和矢量图层后,点击工具栏按钮,插件面板自动读取当前地图文档中的图层列表:

各参数含义:

参数
说明
建议值
栅格图层
要裁剪的正射影像 / 卫片,从当前地图文档加载
矢量图层
包含裁剪范围的面图层(Polygon 类型)
裁剪字段
用于命名输出文件的字段(如"图斑编号""地块编号")
使用短编号,避免特殊字符
NoData 值
裁剪后图斑范围外的背景填充值
256(见下文说明)
自定义分辨率
可选。不填则保持原始影像分辨率
与原始一致或按需缩小
重采样方法
当自定义分辨率与原始不同时的插值算法
BILINEAR(双线性)
进程数
并行处理的进程数量
CPU 核心数减 1
输出目录
所有裁剪结果的存放路径
路径尽量短,避免中文目录

三、操作步骤

整个流程只需要 三步

第 1 步:加载数据

在 ArcMap 中加载你的正射影像和矢量面图层。确保两者都在当前地图文档中显示。

如果矢量图层是 SDE 要素类或 Personal Geodatabase 中的要素类,工具同样支持读取。

第 2 步:设置参数

打开插件面板,分别选择栅格图层、矢量图层和裁剪字段。根据需要设置 NoData 值、分辨率、重采样方法和进程数。最后指定输出目录。

第 3 步:点击"开始裁剪"

工具开始运行后,进度条会实时更新。完成后会弹出汇总信息:成功多少个、失败多少个(如有)。

裁剪完成!├─ 成功: 98 个├─ 失败: 2 个(字段值含特殊字符,已跳过)└─ 输出目录: D:\output\

四、使用技巧

技巧 1:NoData 值设 256 最稳妥

NoData 值的作用是填充裁剪范围外的背景。如果填 0,而原始影像中有些像元恰好也是 0(比如水体、阴影),这些像元就会被误判为无效数据。填 256(超出 8bit 的 0-255 范围),可以确保所有真实像元都不受影响。

场景
建议 NoData 值
8bit 影像(最常见)
256
16bit 影像
65536
需要背景透明
0(配合软件透明设置)
不确定
256

技巧 2:自定义分辨率用来压缩体积

原始影像是 0.1 米分辨率,一张图斑的 TIF 可能有几百 MB。如果你只需要 0.5 米分辨率的缩略图用于快速浏览,填上自定义分辨率,工具会自动先裁切再重采样,输出文件体积能缩小一个数量级。

不填此字段则保持原始分辨率。

技巧 3:进程数不是越多越好

进程数设太大,CPU 和磁盘都会成为瓶颈。推荐值:

CPU 核心数
建议进程数
2 核
1
4 核
3
8 核
6~7
16 核及以上
10~12

核心原则:留 1-2 个核心给系统和 ArcMap 主线程,防止界面卡死。

另外,机械硬盘 的随机写入速度有限,进程数过多反而会因为磁盘争用变慢。如果你的数据在 SSD 上,可以把进程数适当调高。

技巧 4:输出文件名从字段来——字段值怎么写很重要

裁剪字段的值会直接成为输出文件名。以下字符在 Windows 文件系统中是非法的,会导致输出失败:

非法字符:  \ / : * ? " < > |

此外还有几个容易踩坑的情况:

问题
示例
后果
字段值含空格
"JQ 001"
文件名带空格,脚本引用时可能出错
字段值含中文括号
"地块(1)"
部分 Python 库处理中文括号会报编码错误
字段值为空
<Null>
工具会跳过该要素,或生成空文件名报错
字段值重复
两个要素都是 "JQ-001"
第二个输出文件会覆盖第一个,或加后缀 _1
字段值过长
"2024年XX市XX区XX街道第001号地块"
路径超过 Windows 260 字符限制,写入失败

建议:用短编号,纯字母+数字组合,如 TP001JQ-001

技巧 5:先检查坐标系再裁剪

如果矢量和栅格的坐标系不一致,ArcPy 不会报错,但裁剪范围会错位——你以为裁的是图斑 A 的区域,实际裁出来可能偏了几百米。

在操作前,先在 ArcCatalog 或 ArcMap 的图层属性中确认两者的坐标系是否一致。如果不一致,用 Project 或 Project Raster 工具统一坐标系后再裁剪。

五、常见问题排查

问题
可能原因
解决方法
点击"开始裁剪"没反应
ArcPy 许可未检出
在 ArcMap 中确认已勾选 Spatial Analyst 扩展(Customize → Extensions)
子进程报 LicenseError
多进程环境下 ArcPy 许可不自动继承
在脚本中每个子进程开头加 arcpy.CheckOutExtension("Spatial")
裁剪结果全部偏移
矢量和栅格坐标系不一致
统一坐标系后再裁剪
输出 TIF 全黑或全白
NoData 值设置与影像背景值冲突
将 NoData 值改为 256,或检查影像位深
部分图斑裁剪失败
字段值含非法字符或为空
清洗字段值后再执行
工具栏打开后图层列表为空
当前地图文档中没有加载图层
先在 ArcMap 中加载栅格和矢量图层
裁剪速度很慢
进程数为 1 或数据在机械硬盘上
调高进程数;将数据拷贝到 SSD

六、适用场景

场景
说明
正射影像按地块裁剪
DOM 成果按每个地块图斑输出单张正射影像,用于成果提交
卫片按行政区裁剪
一景卫星影像按乡镇/村界批量裁剪,分发给各行政单位
栅格按标准格网裁剪
标准分幅输出的替代方案,比 ModelBuilder 更快
影像样本批量提取
从大图中按标注的样本面要素提取训练样本,用于深度学习
应急出图
灾害发生后,按影响范围的多个分区快速裁剪影像底图

七、和其他方案的对比

方案
优点
缺点
手动裁剪
不需要额外工具
效率极低,图斑多时不可行
ModelBuilder 模型
ArcGIS 原生支持
单进程串行,速度慢;模型搭建有门槛
自己写 ArcPy 脚本
灵活可控
需要 Python 基础;多进程实现复杂
RasterClip 插件
开箱即用、多进程并行、界面化操作
仅支持 ArcMap 10.x;暂不支持 ArcGIS Pro

八、写在最后

批量栅格裁剪是遥感和 GIS 日常工作中频率非常高的操作。手动操作效率低还容易出错——漏了一个图斑、文件名打错了、参数设错了,都得重来。

RasterClip 这个插件的价值不在于它做了什么高深的事,而在于它把一个重复、枯燥、容易出错的流程封装成了一个按钮。为什么不单独做个插件,因为在gis中裁剪最稳妥,不会改变精度,踩过深坑的都应该有感受。

-----------------------------------------------------------------------------

后台私信回复 批量裁剪  来获取 。

如果在使用过程中遇到任何问题,欢迎随时私信反馈。

🌍✨今天的GIS干货就分享到这里啦!

如果觉得内容对你有帮助,记得点个  【赞】和  【在看】支持老杨哦~

💡也欢迎在评论区留言交流你的想法或遇到的GIS问题,老杨会尽力为大家解答!

📌关注GIS老杨,让我们走一条快捷的内业处理之路。