本文介绍基于Python中的ArcPy
模块,依据渔网的矢量数据文件或通过手动划分小方格的方法,批量将大量栅格图像分割为多个矩形小栅格的方法。
首先明确一下我们的需求。现有同一区域内的多张栅格遥感影像,我们希望对于每一景栅格遥感影像而言,都将其分割为多个小矩形;其中,分割后的每一个小矩形就是一个新的小的栅格文件。
知道了需求,我们便可以开始具体的实践操作。其中,有2
种实现这一需求的方法——首先第一种方法,我们可以创建一个渔网的矢量文件,并依据这一渔网矢量文件对每一景栅格加以分割,如下图所示;其中,关于渔网矢量文件的创建,大家可以参考网文章ArcGIS中ArcMap创建渔网Create Fishnet:生成指定大小的格网矢量文件(https://blog.csdn.net/zhebushibiaoshifu/article/details/129014745),关于接下来用渔网中的格网去裁剪栅格图像,大家可以参考文章Python中ArcPy基于矢量要素批量将栅格影像切割为多个小部分(https://blog.csdn.net/zhebushibiaoshifu/article/details/128481851)。
本文主要介绍第二种方法——基于ArcPy
模块中的SplitRaster_management()
函数,手动划定每一个小矩形的范围与大小,并直接裁剪每一景栅格遥感影像(也就是不再基于矢量文件来裁剪了)。
其中,本文所需要的代码如下。
# -*- coding: utf-8 -*-
"""
Created on Mon Feb 13 19:40:39 2023
@author: fkxxgis
"""
import arcpy
tif_file_path = r"E:\02_Project\01_Chlorophyll\Fishnet\OriginalTIFF"
result_file_path = r"E:\02_Project\01_Chlorophyll\Fishnet\Result"
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] + "_",
"SIZE_OF_TILE",
"TIFF",
"BILINEAR",
"#",
"100 100",
"#",
"PIXELS",
"#",
"#",
"#",
"#",
"#",
"0")
可以看到,上述代码与文章Python中ArcPy基于矢量要素批量将栅格影像切割为多个小部分(https://blog.csdn.net/zhebushibiaoshifu/article/details/128481851)中的代码整体思路是比较类似的;因此,关于代码整体含义的讲解,大家直接参考上述文章即可;我们这里主要对本文代码与上述文章中不一致的地方加以介绍。
其中,我们前面也提到了,本文代码与上述文章代码不一致的地方在于,这里是在SplitRaster_management()
函数中手动划定每一个小矩形的具体大小,而上述文章则是用一个已经得到的矢量要素文件去分割栅格。因此,我们需要对SplitRaster_management()
函数的一些参数加以修改。其中,第四个参数"SIZE_OF_TILE"
表示我们这里将通过指定每一个小矩形的长度与宽度,来决定大栅格遥感影像将如何分割;第八个参数"100 100"
表示我们将每一个小矩形的长度与宽度都设置为100
,并在随后的第十个参数中设置为"PIXELS"
,表示这里100
的单位是像元个数。
此外,其他的参数就和前述文章比较一致了(当然也要记得将前述文章中关于矢量要素的几个参数设置为空白)。
在 IDLE (Python GUI) 中运行代码。代码运行完毕后,我们即可在结果保存路径result_file_path
中找到如下图所示的结果文件;其中,原本的每一景大的栅格遥感影像文件(以及其各自的辅助信息文件)都被分为了很多部分,每一个部分在其名称后通过一个数字后缀加以区别,每一个部分就是我们分割后得到的每一个小矩形栅格文件。
至此,大功告成。
欢迎关注:疯狂学习GIS