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

13 篇文章 9 订阅
9 篇文章 1 订阅

任务描述: 利用同一个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影像是经纬度坐标,而非投影坐标;需要先将地理坐标系转换为投影坐标系,再进行重采样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值