??本文介紹基于Python中ArcPy模塊,基于具有多個(gè)面要素的要素類,批量分割大量柵格圖像的方法。
??首先明確一下我們的需求。現(xiàn)在需要基于一個(gè)面要素類,對(duì)一個(gè)柵格遙感影像加以分割;如下圖所示。這個(gè)面要素類中有3個(gè)部分,我們希望將背景的這個(gè)遙感影像也依據(jù)這3個(gè)要素的劃分方式,進(jìn)行切割,從而得到3個(gè)小區(qū)域?qū)?yīng)的柵格數(shù)據(jù)。同時(shí),我們有很多張同一空間范圍的柵格遙感影像,都希望通過(guò)這一方式對(duì)其加以分割,即需要批量進(jìn)行上述操作。

??其中,如果大家想基于ArcMap軟件,不用代碼從而實(shí)現(xiàn)這一操作,可以基于文章ArcMap執(zhí)行Split Raster分割柵格后沒(méi)有結(jié)果出現(xiàn)怎么辦?(http://www.itdecent.cn/p/68c09a56cb92)中提到的分割柵格(Split Raster)工具加以實(shí)現(xiàn)。本文就介紹基于代碼來(lái)實(shí)現(xiàn)這一操作的具體步驟。
??本文需要用到的代碼如下。
# -*- coding: utf-8 -*-
"""
Created on Tue Dec 27 17:19:07 2022
@author: fkxxgis
"""
import arcpy
tif_file_path = r"E:\02_Project\01_Chlorophyll\ClimateZone\Original"
result_file_path = r"E:\02_Project\01_Chlorophyll\ClimateZone\Split"
shp_file_name = r"E:\02_Project\01_Chlorophyll\ClimateZone\SCClimateP.shp"
arcpy.env.workspace = tif_file_path
arcpy.env.parallelProcessingFactor = 0
tif_file_list = arcpy.ListRasters("*", "tif")
for tif_file in tif_file_list:
arcpy.SplitRaster_management(tif_file,
result_file_path,
tif_file.split(".tif")[0],
"POLYGON_FEATURES",
"TIFF",
"BILINEAR",
"#",
"#",
"#",
"#",
"#",
"#",
shp_file_name,
"#",
"#",
"0")
??其中,tif_file_path是保存有我們待分割的柵格圖像的路徑,result_file_path是分割后各個(gè)結(jié)果圖像的保存路徑,shp_file_name是分割柵格圖像所用矢量面要素的文件路徑與名稱。
??代碼整體思路也很簡(jiǎn)單:首先,我們基于arcpy.ListRasters()函數(shù),獲取tif_file_path路徑下原有的全部.tif格式的圖像文件,并以列表的形式存放于tif_file_list中;隨后,逐一取出tif_file_list列表中的柵格文件,進(jìn)行分割處理。
??在這里,我們的分割操作是基于arcpy.SplitRaster_management()函數(shù)來(lái)實(shí)現(xiàn)的。這一函數(shù)有很多參數(shù),具體各個(gè)參數(shù)的含義大家直接參考ArcMap軟件軟件官網(wǎng)即可,這里就僅對(duì)本文中需要用到的參數(shù)加以介紹。其中,前兩個(gè)參數(shù)就分別是我們待處理數(shù)據(jù)和結(jié)果數(shù)據(jù)的保存路徑,第三個(gè)參數(shù)是每一個(gè)大的柵格圖像(也就是待分割的圖像)在被分為多個(gè)小圖像后,每一個(gè)小圖像的命名前綴。在這里,我們通過(guò).split()函數(shù),直接將原有每一個(gè)大的柵格圖像的名稱作為小圖像的命名前綴;后面得到多個(gè)小圖像結(jié)果后,程序會(huì)自動(dòng)在這個(gè)命名前綴的后面加上對(duì)應(yīng)的數(shù)字編號(hào),從而區(qū)分每一個(gè)小圖像。
??接下來(lái),第四個(gè)參數(shù)"POLYGON_FEATURES"表示我們將通過(guò)矢量要素來(lái)確定圖像分割的范圍,第五個(gè)參數(shù)"TIFF"表明我們結(jié)果圖像的格式為.tif文件,第六個(gè)參數(shù)"BILINEAR"表明我們將用雙線性插值法來(lái)實(shí)現(xiàn)切割后圖像的重采樣;關(guān)于不同重采樣方法的選擇,大家可以參考文章ArcGIS進(jìn)行柵格重采樣并對(duì)重采樣方法加以合理選擇(http://www.itdecent.cn/p/8c08bdf466b5)。此外,接下來(lái)的幾個(gè)"#"表示我們對(duì)這些參數(shù)暫時(shí)不配置;再靠后一個(gè)參數(shù)就是我們分割柵格圖像所用的矢量要素?cái)?shù)據(jù)。
??隨后,依然是兩個(gè)"#",表示我們對(duì)這些參數(shù)暫時(shí)不配置;最后一個(gè)參數(shù)"0",表明在大的柵格圖像中所有值為0的像元,在分割后都將作為無(wú)效值(NoData值)的像元。
??此外,還有一點(diǎn)需要注意的是,上述代碼中我們通過(guò)arcpy.env.parallelProcessingFactor參數(shù),將“Parallel Processing”選項(xiàng)設(shè)置為0;如果我們不這么設(shè)置的話,大概率這段代碼是無(wú)法成功運(yùn)行的;具體為什么要這么設(shè)置,大家可以參考文章ArcMap執(zhí)行Split Raster分割柵格后沒(méi)有結(jié)果出現(xiàn)怎么辦?(http://www.itdecent.cn/p/68c09a56cb92),這里就不再贅述。
??運(yùn)行上述代碼,我們即可在結(jié)果保存路徑result_file_path中看到各個(gè)柵格圖像被分割后所得到的各個(gè)結(jié)果。
??至此,大功告成。