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)
(更准确地说,是每个月日期的平均值;这不完全是月平均值,但可能已经足够了)。
我有包含 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)
(更准确地说,是每个月日期的平均值;这不完全是月平均值,但可能已经足够了)。