Python学习记录:ArcPy批量矢量掩膜(裁剪)栅格|ArcGISPro|R|Arcmap|ArcPy2.7
最近学习Python和ArcPy,打算把之前用R做过的事情再用Python复现一下。
前言:
1.用Arcmap操作矢量裁剪栅格有两种方法,一个是数据管理工具的裁剪clip,还有一个是spatial analyst工具的按掩膜提取。但是在ArcGIS Pro中,裁剪clip工具变成了“切片栅格”。
2.数据示例是用R语言MODIStsp包下载的MCD12Q1土地覆盖文件(IGBP分类)(2018年-2020年),然后用山东省的shp文件进行掩膜。
3.ArcGIS Pro中用的是Python3版本,所以这个版本的ArcPy和Arcmap的Python2.7版本还是有很多不同的。经过测试,如果用arcpy3.x版本进行批量提取研究区范围的话,最好还是用掩膜函数,因为“切片栅格”函数要输入四个边角。


方法:
经过探索,如果是用Python3的ArcPy(ArcGISPro)代码是这个样子:
法1:
法2:
如果是用Python2的ArcPy(Arcmap)代码是这个样子:
结果:

讨论:
无论是ArcGIS还是ArcPy裁剪掩膜输出的文件,除了tif文件还有很多其他后缀的文件,但是R语言裁剪掩膜就不会附带这些。
但是很奇怪的是,把最终文件放在arcgis和R语言以及Python可视化是不一样的。





从对比图可以看出,无论是行列数还是范围上,都没有差别。
但是R语言图里有一个有趣的地方:属性描述显示最小最大值是3和17,但是在绘图窗口的图例却有120多的。显然R在绘图的时候,把ArcPy生成的的NA值认为是某个数值(numeric)。

为了验证我的猜想,我查看了这幅栅格的第一行和第一列的像元数值,其显示为128。如果我猜得没错,R中绿色的部分应该都是128,。如果我把值为128的像元都设置为NA,那么它就应该和ArcGIS Pro显示的一样了。

结果验证了我的猜想。
Tips:这里的将某个值设置为NA或者为别的值,要用双等号逻辑连接符
Python中查看也是如此,但是nodata值变成了-128.

Question:
在用Python遍历栅格的时候,发现一个问题:

如果打印raster,会出来3个栅格。但是如果打印rasters的话会出来3个重复的列表。为什么打印rasters就会是三个列表呢?期盼有看到这篇文章的大手子可以指点一下。