Python學習記錄:ArcPy批量矢量掩膜(裁剪)柵格|ArcGISPro|R|Arcmap|ArcPy2.7
最近學習Python和ArcPy,打算把之前用R做過的事情再用Python復現(xiàn)一下。
前言:
1.用Arcmap操作矢量裁剪柵格有兩種方法,一個是數(shù)據(jù)管理工具的裁剪clip,還有一個是spatial analyst工具的按掩膜提取。但是在ArcGIS Pro中,裁剪clip工具變成了“切片柵格”。
2.數(shù)據(jù)示例是用R語言MODIStsp包下載的MCD12Q1土地覆蓋文件(IGBP分類)(2018年-2020年),然后用山東省的shp文件進行掩膜。
3.ArcGIS Pro中用的是Python3版本,所以這個版本的ArcPy和Arcmap的Python2.7版本還是有很多不同的。經(jīng)過測試,如果用arcpy3.x版本進行批量提取研究區(qū)范圍的話,最好還是用掩膜函數(shù),因為“切片柵格”函數(shù)要輸入四個邊角。


方法:
經(jīng)過探索,如果是用Python3的ArcPy(ArcGISPro)代碼是這個樣子:
法1:
法2:
如果是用Python2的ArcPy(Arcmap)代碼是這個樣子:
結(jié)果:

討論:
無論是ArcGIS還是ArcPy裁剪掩膜輸出的文件,除了tif文件還有很多其他后綴的文件,但是R語言裁剪掩膜就不會附帶這些。
但是很奇怪的是,把最終文件放在arcgis和R語言以及Python可視化是不一樣的。





從對比圖可以看出,無論是行列數(shù)還是范圍上,都沒有差別。
但是R語言圖里有一個有趣的地方:屬性描述顯示最小最大值是3和17,但是在繪圖窗口的圖例卻有120多的。顯然R在繪圖的時候,把ArcPy生成的的NA值認為是某個數(shù)值(numeric)。

為了驗證我的猜想,我查看了這幅柵格的第一行和第一列的像元數(shù)值,其顯示為128。如果我猜得沒錯,R中綠色的部分應該都是128,。如果我把值為128的像元都設(shè)置為NA,那么它就應該和ArcGIS?Pro顯示的一樣了。

結(jié)果驗證了我的猜想。
Tips:這里的將某個值設(shè)置為NA或者為別的值,要用雙等號邏輯連接符
Python中查看也是如此,但是nodata值變成了-128.

Question:
在用Python遍歷柵格的時候,發(fā)現(xiàn)一個問題:

如果打印raster,會出來3個柵格。但是如果打印rasters的話會出來3個重復的列表。為什么打印rasters就會是三個列表呢?期盼有看到這篇文章的大手子可以指點一下。