You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建循环批量处理文件夹内多栅格文件并执行QC?

批量处理HDF遥感文件并构建栅格栈

你完全可以通过循环实现批量处理,下面是适配你需求的完整R代码,同时修正了原单文件代码里的一处错误(原代码中evi_1_qc误使用ndvi_1作为输入,已修正为evi_1):

批量处理代码

# 加载必要包
library(terra)

# 设置HDF文件所在文件夹路径(替换为你的实际路径)
hdf_dir <- "./your_hdf_folder"

# 获取文件夹内所有HDF文件路径
hdf_files <- list.files(hdf_dir, pattern = "\\.hdf$", full.names = TRUE)

# 初始化空列表,用于存储所有处理后的图层
processed_layers <- list()

# 遍历每个HDF文件
for (file in hdf_files) {
  # 读取HDF文件为栅格对象
  t <- rast(file)
  
  # 提取目标图层(建议优先用图层名而非索引,避免版本差异导致索引变化)
  # 可先运行names(t)查看具体图层名,替换成你实际需要的名称
  ndvi <- t[[1]]  # 或 t[["250m 16 days NDVI"]]
  evi <- t[[2]]   # 或 t[["250m 16 days EVI"]]
  qc <- t[[12]]   # 或 t[["250m 16 days VI Quality"]]
  date <- t[[11]] # 或 t[["250m 16 days composite day of the year"]]
  
  # QC过滤:标记大于1的像元为无效(NA)
  qc[qc > 1] <- NA
  
  # 用QC栅格掩膜NDVI和EVI,去除无效像元
  ndvi_qc <- mask(ndvi, qc)
  evi_qc <- mask(evi, qc)
  
  # 给图层命名(包含日期信息,方便后续识别)
  file_date <- gsub(".*A(\\d{7}).*", "\\1", basename(file)) # 从文件名提取日期码
  names(ndvi_qc) <- paste0("NDVI_", file_date)
  names(evi_qc) <- paste0("EVI_", file_date)
  names(date) <- paste0("Date_", file_date)
  
  # 将处理后的图层加入列表
  processed_layers <- c(processed_layers, ndvi_qc, evi_qc, date)
}

# 将所有图层合并为栅格栈
final_stack <- rast(processed_layers)

# 可选:查看栅格栈信息
print(final_stack)
plot(final_stack[[1:4]]) # 绘制前4个图层预览

关键注意事项

  • 路径替换:务必将hdf_dir替换为你的HDF文件实际存放路径
  • 图层索引/名称:不同版本的MYD13Q1产品可能图层顺序有差异,建议先运行names(rast(your_single_hdf_file))确认图层名称,用名称提取比索引更可靠
  • 内存管理:如果处理全年文件(约23个HDF),确保电脑有足够内存;若内存不足,可分批次处理后再合并
  • 文件名解析:代码中用正则从文件名提取日期码(如A2020313对应2020年第313天),如果你的文件名格式不同,需要调整正则表达式

内容的提问来源于stack exchange,提问作者jwell123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:29:54