在对遥感影像进行处理分析时,往往需要对栅格影像进行感兴趣区域提取。可以采用ArcGIS Spatial Analyst中的Extract by Mask操作,也可以结合Python和ArcPy批量提取栅格数据。
使用同一个掩膜数据文件对多个栅格影像数据进行批量提取操作的代码如下:
# coding=utf-8
import os
import arcpy
from arcpy import env
from arcpy.sa import *
## 使用掩膜数据对栅格数据进行批量裁剪
def mask_clip(raster_path, mask, out_path):
n = 0
rasters = os.listdir(raster_path) ## 遍历栅格文件,获得所有栅格数据的文件名
for raster in rasters:
raster_name = raster.split('.')[0] ## 文件名去掉后缀
raster_type = raster.split('.')[-1] ## 文件名后缀,用于类型筛选,只要tif文件
if raster_type == 'tif':
in_raster = os.path.join(raster_path, raster) ## 获取待裁剪的tif文件的路径(raster只是文件名,读取的时候需要加上路径)
arcpy.CheckExtension("Spatial")
out_extract_mask = ExtractByMask(in_raster, mask) ## 执行裁剪操作,结果为out_extract_mask
out_raster = os.path.join(out_path, raster_name+'_new.tif') ## 输出文件路径,raster_name+'_new.tif'为文件名
out_extract_mask.save(out_raster) ## 将out_extract_mask保存为out_raster(路径+文件名)
n = n + 1
if __name__ == '__main__':
raster_path = './rasters' # 原始栅格文件的文件夹路径
mask_file = './masks.shp' # 栅格或矢量的掩膜文件路径
out_path = './out_data' # 裁剪后的文件保存路径
mask_clip(raster_path, mask_file, out_path)
同理,可以使用多个掩膜文件提取同一幅栅格数据(循环遍历掩膜文件),也可以使用多个掩膜文件分别对每幅栅格影像进行提取(双层循环)。
一般来说,ArcGIS工具包中的操作都可以在ArcPy中实现批处理,高效快速!