可以使用 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 扩展许可以确保代码安全运行。