其他
R语言GIMMS NDVI数据下载与合成
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/")
月度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时间切片,这个需要使用 monthlyIndices
从GIMMS文件名列表中获取
mvc = monthlyComposite(gimms_rasterq, indices=monthlyIndices(gimms_files), cores=4)
月度合成默认使用的是最大值合成,如果需要修改可以调整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")
参考文献
https://fdetsch.gitbooks.io/gimmsgitbook/content/ https://github.com/environmentalinformatics-marburg/gimms R语言NDVI变异系数计算与结果分析 NDVI时间序列分析原理与实现(CV和Sen+MK趋势分析) 基于Sen+MK的NDVI变化趋势统计分析 NDVI时间序列分析之Sen+MK分析全过程梳理 NDVI时间序列逐像元计算Hurst指数
点击阅读原文查看视频讲解