Python批量掩膜、重采样MODIS栅格影像数据

任务描述: 利用同一个shp文件裁剪多幅栅格影像数据并进行重采样
数据准备: 文件夹(工作空间)内含有需要批量裁剪的tif影像
工具准备: Python arcpy 环境
操作: 替换代码中的路径即可

# -*- coding: utf-8 -*-
import arcpy
from arcpy.sa import *

# 待掩膜tif影像的文件路径
tif_file_path = "D:/DATA/01_Year_MEAN/"
# 掩膜shp文件存放路径
shp_file = "D:/DATA/YellowRiver_nineprovince.shp"
# 掩膜后tif文件的存放路径
out_file_path = "D:/DATA/02_Mask/"
# 重采样后tif文件的存放路径
resample_file_path = "D:/DATA/03_Resample/"

arcpy.env.workspace = tif_file_path
arcpy.env.extent = shp_file

# 获取路径下全部tif影像文件
tif_file_name = arcpy.ListRasters("*", "tif")
for tif_file in tif_file_name:
    mask_result = ExtractByMask(tif_file, shp_file)  # 掩膜操作
    mask_result_path = out_file_path + "/" + tif_file.strip(".tif") + "_mask.tif"
    mask_result.save(mask_result_path)

arcpy.env.workspace = out_file_path
tif_file_name = arcpy.ListRasters("*", "tif")
for tif_file in tif_file_name:
    resample_file_name = tif_file.strip(".tif") + "_Re.tif"
    # 重采样操作  空间分辨率为1000m  双线性插值方法
    arcpy.Resample_management(tif_file, resample_file_path + resample_file_name,
                              1000, "BILINEAR")

在这里,首先利用arcpy.ListRasters()函数,获取路径下原有的全部.tif格式的图像文件,并存放于tif_file_name中;随后,遍历tif_file_path路径下全部.tif格式图像文件(即遍历tif_file_name),并利用ExtractByMask()函数进行掩膜操作;其次,对于掩膜好的图层,在其原有文件名后添加"_mask.tif"后缀,作为新文件的文件名。

对全部图像文件完成掩膜操作后,继续进行重采样操作。和前述代码思路类似,依然还是先遍历文件,并在其原有文件名后添加"_Re.tif"后缀,作为新文件的文件名;随后,利用Resample_management()函数进行重采样。其中,1000表示重采样的空间分辨率,在这里单位为“BILINEAR” 表示用双线性插值的方法完成重采样。

可能会出现的问题一:UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe7 in position 0: ordinal not in range(128)解决
可能会出现的问题二:
在这里插入图片描述
此问题出现原因是:待裁剪的tif影像是经纬度坐标,而非投影坐标;需要先将地理坐标系转换为投影坐标系,再进行重采样。

猜你喜欢

转载自blog.csdn.net/qq_43874102/article/details/124301204
今日推荐