查看原文
其他

R语言GIMMS NDVI数据下载与合成

走天涯徐小洋 走天涯徐小洋地理数据科学 2022-05-17

R语言GIMMS NDVI数据下载与合成

R语言有gimms包可以下载和处理GIMMS NDVI数据,gimms包已经发布在CRAN,可以直接在Rstudio里面安装。

GIMMS NDVI下载

下载GIMMS数据可以使用downloadGimms函数,只需指定3个参数:

  • x数据下载起始时间
  • y数据下载结束时间
  • dsn数据存放位置

在这里我直接用的年份来指定,GIMMS NDVI3g数据从1981-2015年,全部下载,存放到工程目录下面的GIMMSDOWNLOAD文件夹下。

library(gimms)
# 下载GIMMS数据
downloadGimms(x=1981,y=2015,dsn="./GIMMSDOWNLOAD/")
下载完数据量不小,近29GB

月度NDVI合成

前面下载了数据,由于GIMMS NDVI数据是15天的时间分辨率,我们要想研究NDVI的月度变化,需要做一个月度NDVI合成。

读取GIMMS文件列表

由于前面我下载数据的时候没有给downloadGimms函数运行结果存到一个变量里面去,没有自动生成下载的文件列表,这个时候就需要再自己写一下代码,生成一个文件列表。

#获取GIMMS数据列表
gimms_filenames = list.files(path = "./GIMMSDOWNLOAD", pattern = '.nc4')
gimms_files = paste0("./GIMMSDOWNLOAD/", gimms_filenames)

如果在前面下载数据的时候,使用下面的代码,就不需要上面的获取GIMMS数据列表语句了

gimms_files = downloadGimms(x=1981,y=2015,dsn="./GIMMSDOWNLOAD/")

指定研究区范围

由于下载的GIMMS数据是全球数据,数据量很大,为了减小运算量,建议先指定一下研究区范围,把数据进行裁剪。需要注意的是,gimms包里面的裁剪结果是矩形,是研究区矢量的四至范围。

gimms包中指定裁剪范围,需要是sp对象,我一般习惯于将SHP读取为sf对象,在这需要进行一个转换,使用as_Spatial()sf对象转换为sp

#读取研究区范围,使用WGS84坐标系的SHP
library(sf)
cmrshp = read_sf(dsn="./SHP/CMR.shp")
cmrshp = as_Spatial(cmrshp)

读取GIMMS数据并栅格化

  • x是GIMMS数据列表,一个向量,里面是文件目录
  • ext是研究区范围,sp格式
  • keep是质量控制
  • cores并行运算,在这里是4核
#读取GIMMS数据,栅格化
gimms_rasterq = rasterizeGimms(x=gimms_files, ext = cmrshp, keep = 0, cores = 4)
栅格化结果,这是一个矩形范围

月度合成

月度合成需要注意的是,两个参数

  • x输入的栅格
  • indices时间切片,这个需要使用monthlyIndicesGIMMS文件名列表中获取
mvc = monthlyComposite(gimms_rasterq, indices=monthlyIndices(gimms_files), cores=4)
monthlyIndices生成的num向量

月度合成默认使用的是最大值合成,如果需要修改可以调整fun参数

数据输出

mvc合成后,以RasterStack的形式在R语言环境中存储,想在硬盘中保存为Tiff,需要使用writeRaster

#生成月度合成TIFF的名字,以时间序列命名
mvcnames= seq(as.Date("1982-01-01"), as.Date("2015-12-31"), "month")
#TIFF文件导出
writeRaster(mvc, filename = file.path("./MonthMax/", mvcnames) , bylayer=T, format="GTiff")

年度均值合成

年度均值合成和月度合成可以使用同一函数monthlyComposite,需要自行建立一下indices,再建立一下年份名称,计算完成后输出TIFF即可。

yearIndices = sort(rep(1:34, 12))
ymc = monthlyComposite(mvc, fun=mean, indices=yearIndices, cores=4)
ymcnames = seq(as.Date("1982-01-01"), as.Date("2015-12-31"), "years")
writeRaster(ymc, filename = file.path("./YearMean/", ymcnames), bylayer=T, format="GTiff")

参考文献

  1. https://fdetsch.gitbooks.io/gimmsgitbook/content/
  2. https://github.com/environmentalinformatics-marburg/gimms
  3. R语言NDVI变异系数计算与结果分析
  4. NDVI时间序列分析原理与实现(CV和Sen+MK趋势分析)
  5. 基于Sen+MK的NDVI变化趋势统计分析
  6. NDVI时间序列分析之Sen+MK分析全过程梳理
  7. NDVI时间序列逐像元计算Hurst指数

点击阅读原文查看视频讲解

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存