8天MODIS栅格到R中的每月总和

8 Day MODIS Raster to Monthly sum in R

我有包含 8 天产品的 MODIS 数据。有些月有 3 张图片,有些月有四张图片。那么我如何构建一个 R 脚本来根据这些数据计算月度总和

我正在使用 MODIS MOD17A2HGF GPP 数据集,它是 8 天 GPP 总和的 500x500 米网格。第一个文件以 _001 结尾,这意味着它从 1 月 1 日开始,一直持续到 8 日。下一个文件 _009 涵盖 1 月 8 日至 16 日等等。 enter image description here

现在我想总结几个月(一月到十二月)的GPP。

在这个文件夹中,它有920个文件(20年),每年有46个文件。

在 ArcGIS 中,我知道如何用栅格求和 calculator.But 如果我每个月求和,它会做很多重复性的工作。

enter image description here

在 R 中,我试过这样做

library(terra)
a <- rast('MOD17A2HGF_GPP_2001_001.tif')
b <- rast('MOD17A2HGF_GPP_2001_009.tif')
c <- rast('MOD17A2HGF_GPP_2001_017.tif')
d <- rast('MOD17A2HGF_GPP_2001_025.tif')
GPP_January <- a+b+c+d
writeRaster(GPP_January,'F:/test/GPP_January_2001.tif')

如果我对每个 month.I 求和不知道如何 select R 循环中指定月份的文件,它也会做很多重复性工作。

我知道如何计算年度 GPP

library(tidyverse)
library(terra)

GPP2001 <- list.files(pattern = '2001',full.names = T) %>% 
  rast() %>% sum()

但是我如何在 R 或 ArcGIS 中总结每年每月的 GPP?

获取全部files/layers

library(terra)
ff <- list.files(pattern="\.tif$", full.names = T) 
r <- rast(ff) 

对于每个文件,提取年份和日期

# ff <- c('MOD17A2HGF_GPP_2001_001.tif', 'MOD17A2HGF_GPP_2001_009.tif')
s <- gsub('MOD17A2HGF_GPP_', "", basename(ff))
s <- gsub('.tif', "", s)
s <- strsplit(s, "_")
s <- do.call(rbind, s)
s
#     [,1]   [,2] 
#[1,] "2001" "001"
#[2,] "2001" "009"

获取月份并结合年份

d <- as.Date(as.numeric(s[,2]), origin = paste(s[,1], "-01-01", sep = "")) - 1
m <- format(d, "%m")
ym <- paste0(s[,1], m)
ym
#[1] "200101" "200101"

现在你可以像这样计算月平均值

x <- tapp(x, ym, mean)

(更准确地说,是每个月日期的平均值;这不完全是月平均值,但可能已经足够了)。