学习记录三:R语言/ArcGIS—单张/批量处理tif(裁剪crop/掩膜mask)
一、R语言中切片(crop) / 掩膜(mask)
使用矢量数据对栅格数据进行裁剪,可以使用切片或掩膜操作。
切片函数crop():
使用矢量数据的矩形范围对栅格数据进行裁剪。函数语法结构如下:
x:待裁剪的栅格对象
y:裁剪范围或包含裁剪范围的空间数据对象(矢量、栅格数据均可)
filename:裁剪后的数据储存地址,可选
snap:数据对齐方式,可选项有near、in、out
掩膜函数mask():
保持矢量数据实际范围内的属性数据不变,而将范围外的属性数据都转为其他值(默认转换为空值NA)。函数语法结构如下:
x:栅格对象
mask:作为掩膜的空间数据对象(矢量、栅格数据均可)
inverse:是否执行反向掩膜操作
maskvalue:掩膜内的栅格单元的属性值若为该值则将其转换为updatevalue参数对应的数值
updatevalue:掩膜外的所有栅格单元的属性值(空值除外)会被转换为该值,默认为空值NA
updateNA:若为TRUE,则掩膜外的空值也会被转换为updatevalue参数对应的数值
1.单张处理

切片后的和原数据一样,是因为该数据在下载的时候已经按照矢量裁剪过了,如下:

使用未裁剪过的全国数据crop/mask结果如下:

切片会改变原有栅格对象的范围,但其得到的是一个矩形范围
掩膜不会改变原有栅格对象的范围,仅是将矢量范围外的数据变为空值
所以一般需要对切片后的栅格对象再进行掩膜操作,才可以得到预期裁剪效果:

2.批量处理


Terra包可以使用
writeRaster
函数输出栅格,可以输出为多波段的,也可以是单波段的。通过filename
参数来控制。
单波段多TIFF输出:
filename
使用paste0
构建一个输出变量多波段单TIFF输出:
filename
是一个值,names
指定波段名称
二、ArcGIS Pro中切片(crop) / 掩膜(mask)
注:ArcGIS中切片/掩膜是对栅格数据进行处理,裁剪是对矢量数据进行处理。
1.单张处理

和R中一样各种方法都运行一遍对比下,下图左1是切片(矩形),其他三个分别是切片(用于裁剪几何)、掩膜、先切片后掩膜(貌似没什么区别,它们的属性表也一样,也可能我没发现(・∀・)

2.批量处理(ArcPy方法)
需要准备的数据:
(1)需要的栅格数据,放在同一个文件夹下面
(2)矢量边界数据
(3)新建一个存储裁剪结果的文件夹
注意事项:
(1)工作空间wordspace一般为栅格数据存储的文件夹,程序会遍历该文件夹下的所有tif格式文件
(2)arcpy为arcgis自带的包,需要在其自带的python环境下运行
(3)代码中不要出现中文,因为arcgis自带的python容易报错
(几乎尝试了CSDN里所有可用代码,因为没有python基础,有的报错也改不好,上面这个中午运行还中途失败,下午来又尝试竟然成功了,泪目,原因如下)
打开ArcMap窗口时:裁剪完一副就自动加载,导致无法获取独占锁,执行失败

ERROR 000601这个报错就是涉及到修改原数据时,必须让其获取独占锁才可以。模型中大多都涉及到更改原数据,检查数据是否被其他应用程序打开或多个map同时打开同样的数据。
关掉ArcMap窗口后:一切顺利

裁剪完成的数据展示如下:


yeah,终于成功啦!!!

附1:学习过程中发现感觉以后会用到的


附2:学习参考文章
bilibili:


CSDN:
文章1:raster | R语言中的空间栅格对象及其基本处理方法(Ⅲ):切片/掩膜、图层叠加...
原文链接:https://blog.csdn.net/weixin_54000907/article/details/119284726
文章2:python 利用arcpy批量裁剪tif文件,并生成tif文件(arcpy代码来源)
原文链接:https://blog.csdn.net/weixin_41755752/article/details/119490511
文章3:arcpy/python循环批量裁剪tiff栅格文件
原文链接:https://blog.csdn.net/weixin_42776126/article/details/121003159
文章4:Python(arcpy) 批量裁减TIF图像
原文链接:https://blog.csdn.net/qq_38882446/article/details/115262296
文章5:ArcGIS批量裁剪栅格数据(ArcPy方法)
这篇包含多文件夹场景(可分为二级、三级目录),有需要时可以学习一下
原文链接:https://blog.csdn.net/qq_35056050/article/details/111868274
知乎:
文章1:R语言Raster包和Terra包栅格读写、计算和一些使用经验分享
原文链接:https://zhuanlan.zhihu.com/p/438070027
公众号:
文章1:R语言批量处理文件
原文链接:https://mp.weixin.qq.com/s/YHbRtya18IZ7q1dsXQJIpQ
文章2:栅格数据掩膜(裁剪)方法合集(terra代码来源)
原文链接:https://mp.weixin.qq.com/s/jzcescAa9mL1BgCIZysGsw
文章3:基于R语言批量裁剪并导出栅格数据
原文链接:https://mp.weixin.qq.com/s/1CHX_wpvUtcj17bB4EP8wA

目前处理一知半解状态,拿别人写好的代码看懂改用下还行,自己写比较困难,不过也是不断学习进步的过程,慢慢学吧~
