用arcpy批量将逐月的最大NDVI栅格数据合成逐年的NDVI,并且要求栅格以整型储存

可以使用 ArcGIS 中的 Cell Statistics 工具结合 Python 循环来批量合成逐年 NDVI 数据,以整型形式进行储存。下面是代码:


import arcpy
import os

# 设置输入输出路径和文件名
input_folder = r"C:\data\monthly_ndvi"
output_folder = r"C:\data\yearly_ndvi"

# 获取所有输入栅格文件的名称和年份信息
input_files = os.listdir(input_folder)
file_years = set([int(i.split("_")[1]) for i in input_files])

# 创建输出文件夹
if not os.path.exists(output_folder):
    os.makedirs(output_folder)

# 将每一年的最大 NDVI 栅格合成为一个栅格,并保存为整型 TIFF 文件
for year in file_years:
    # 筛选出当前年份的多个月份 NDVI 文件,用于合并
    month_files = [i for i in input_files if int(i.split("_")[1])==year]

    # 执行 Cell Statistics 工具,将该年的 NDVI 合成为一个栅格
    output_raster = os.path.join(output_folder, "NDVI_{}.tif".format(year))
    arcpy.CheckOutExtension("Spatial")
    max_ndvi = arcpy.sa.CellStatistics(month_files, "MAXIMUM", "DATA")
    max_ndvi_int = arcpy.sa.Int(max_ndvi)  # 转换为整型数据
    max_ndvi_int.save(output_raster)
    del max_ndvi_int, max_ndvi

# 释放 Spatial Analyst 扩展许可
arcpy.CheckInExtension("Spatial")
 

首先,代码会获取输入栅格文件夹中所有文件的名称,并根据文件名获取每个文件对应的年份信息。利用 `set()` 方法将年份去重后获得一个年份数组。

循环年份数组,筛选出当前循环到的年份的多个月份 NDVI 文件,然后使用 Cell Statistics 工具将这些文件合并为一个栅格。

在 Cell Statistics 工具的第三个参数 `ignore_nodata` 默认值为 "DATA" 模式,可以保证输出整型数据时传输为整型数值而不是浮点数(即避免小数舍入误差)。因此,本代码不需要额外设置 `cell_statistics_type` 参数。

最后,释放 Spatial Analyst 扩展许可以确保代码安全运行。

猜你喜欢

转载自blog.csdn.net/weixin_58851039/article/details/131180641