Gimms NDVI3g v1 数据产品介绍
关于此数据集处理方式网上找了不少资料,一般都是用matlab或者是R来处理,matlab处理方法直接百度都能搜到很多,这里就不逐一介绍了,主要讲一讲如何用R进行处理,得到整月最大值合成,或者是半月影像。
老板事先安排了数据下载工作,于是就在ecocast用wget下载好了数据,本以为完事了,老板又安排对数据进行提取,得到半月影像数据,尝试了gdal,读取虽然没报错,但是值不对,再加上电脑重装系统没有matlab,但是之前有用过R,于是尝试使用R来处理数据。
在使用R之前也尝试过GDAL来读取,提取半月影像数据,使用gdalinfo看到数据一些信息,一共俩subdataset ndvi包含12个波段,percentile也是12个波段,percentile相当于一个包含精度信息的数据集,里面不同区间的像元值代表了ndvi数据是如何得到的。使用gdal_translate提取的ndvi数据有些问题,之前觉得可能ndvi数据与percentile有关联,不能分开读取,老板认为可能是与gdal或者netcdf版本有关系,这里也没深究。在使用R处理数据前,首先介绍一个R包,gimms,这个是类似于官方的一个R包,专门用来处理Gimms ndvi3g(此数据集分为v0和v1,分别对应envi格式和netcdf4格式)数据,可以对数据进行下载,提取,最大值合成。
在R中进行包管理还是很简单的,直接install.packages("gimms","rgdal") ,rgdal是gimms包的依赖包。
Gimms NDVI3g v1 数据产品处理
接下来直接上代码(本人一直用java,R只是接触过几次,所以代码结构比较混乱),由于提前下载好了数据,所以这里就直接对硬盘上数据进行处理。
# downloadGimms() 可以使用这个函数来下载
#
library("gimms","rgdal")
#这个包还有些函数,可以对数据进行精度控制,这里暂时用不到。
for (value in 1982:2015) {
fn1 <- paste0("你的输入路径/ndvi3g_geo_v1_",value,"_","0106",".nc4")
ndvi3g <- rasterizeGimms(x = fn1)
sprintf("正在读取...%s_%s",value,"0106")
for (variable in 1:12) {
name <- paste0("你的输出路径/ndvi3g_geo_v1_" , value ,"_","0106","-", variable, ".tif")
sprintf("正在处理...%s",name)
writeRaster(x = ndvi3g[[variable]],filename = name)
}
}
for (value in 1981:2015) {
fn2 <- paste0("你的输入路径/ndvi3g_geo_v1_",value,"_","0712",".nc4")
ndvi3g <- rasterizeGimms(x = fn2)
sprintf("正在读取...%s_%s",value,"0712")
for (variable in 1:12) {
name <- paste0("你的输出路径/ndvi3g_geo_v1_" ,value,"_","0712","-", variable, ".tif")
sprintf("正在处理...%s",name)
writeRaster(x = ndvi3g[[variable]],filename = name)
}
}
最大值合成 月ndvi数据处理
gimms_files_date <- downloadGimms(x = as.Date("2000-01-01"),y = as.Date("2000-06-06"),dsn="E:/ndvi")
mvc <- monthlyComposite(ndvi3g_geo_v1_2000_0106,indices = monthlyIndices(gimms_files_date))
ndvi3g <- rasterizeGimms(x = gimms_files_date)
mvc <- monthlyComposite(ndvi3g,indices = monthlyIndices(gimms_files_date))
writeRaster(x = mvc,filename = "E:\ndvi\ndvi.tif")