本文介绍基于PythonArcPy模块,基于具有多个面要素的要素类,批量分割大量栅格图像的方法。

  首先明确一下我们的需求。现在需要基于一个面要素类,对一个栅格遥感影像加以分割;如下图所示。这个面要素类中有3个部分,我们希望将背景的这个遥感影像也依据这3个要素的划分方式,进行切割,从而得到3个小区域对应的栅格数据。同时,我们有很多张同一空间范围的栅格遥感影像,都希望通过这一方式对其加以分割,即需要批量进行上述操作。

  其中,如果大家想基于ArcMap软件,不用代码从而实现这一操作,可以基于文章ArcMap中Split Raster分割遥感影像后不出现结果怎么办?中提到的分割栅格Split Raster)工具加以实现。本文就介绍基于代码来实现这一操作的具体步骤。

  本文需要用到的代码如下。

# -*- 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是分割后各个结果图像的保存路径,shp_file_name是分割栅格图像所用矢量面要素的文件路径与名称。

  代码整体思路也很简单:首先,我们基于arcpy.ListRasters()函数,获取tif_file_path路径下原有的全部.tif格式的图像文件,并以列表的形式存放于tif_file_list中;随后,逐一取出tif_file_list列表中的栅格文件,进行分割处理。

  在这里,我们的分割操作是基于arcpy.SplitRaster_management()函数来实现的。这一函数有很多参数,具体各个参数的含义大家直接参考ArcMap软件软件官网即可,这里就仅对本文中需要用到的参数加以介绍。其中,前两个参数就分别是我们待处理数据和结果数据的保存路径,第三个参数是每一个大的栅格图像(也就是待分割的图像)在被分为多个小图像后,每一个小图像的命名前缀。在这里,我们通过.split()函数,直接将原有每一个大的栅格图像的名称作为小图像的命名前缀;后面得到多个小图像结果后,程序会自动在这个命名前缀的后面加上对应的数字编号,从而区分每一个小图像

  接下来,第四个参数"POLYGON_FEATURES"表示我们将通过矢量要素来确定图像分割的范围,第五个参数"TIFF"表明我们结果图像的格式为.tif文件,第六个参数"BILINEAR"表明我们将用双线性插值法来实现切割后图像的重采样;关于不同重采样方法的选择,大家可以参考文章ArcMap中Split Raster分割遥感影像后不出现结果怎么办?。此外,接下来的几个"#"表示我们对这些参数暂时不配置;再靠后一个参数就是我们分割栅格图像所用的矢量要素数据。

  随后,依然是两个"#",表示我们对这些参数暂时不配置;最后一个参数"0",表明在大的栅格图像中所有值为0的像元,在分割后都将作为无效值(NoData值)的像元。

  此外,还有一点需要注意的是,上述代码中我们通过arcpy.env.parallelProcessingFactor参数,将“Parallel Processing”选项设置为0;如果我们不这么设置的话,大概率这段代码是无法成功运行的;具体为什么要这么设置,大家可以参考文章ArcMap中Split Raster分割遥感影像后不出现结果怎么办?,这里就不再赘述。

  运行上述代码,我们即可在结果保存路径result_file_path中看到各个栅格图像被分割后所得到的各个结果。

  至此,大功告成。