我正在尝试从 netcdf 文件中提取栅格图层名称,就像之前从栅格堆栈中写入的那样。将栅格堆栈导出到 ncdf 可以正常工作。例如:
library(raster)
library(ncdf4)
library(RNetCDF)
#Create some rasters (x3)
r1<-raster(system.file("external/test.grd", package="raster"))
r2<-r1*2
r3<-r2*3
#Stack them
rstack<-stack(r1,r2,r3)
#Give each raster layer a name - in this instance years 2014 to 2016
names(rstack)<-c("2014","2015","2016")
#Write out to netcdf format
writeRaster(rstack, "rstack.nc", overwrite=TRUE, format="CDF", varname="Temperature", varunit="degC",
longname="Temperature -- raster stack to netCDF", xname="X", yname="Y",zname="Year",
zunit="numeric")
但是,当我将 ncdf 文件读回 R 时,不会保留 Z 维度(即年份)。例如:
#Open the new netcdf dataset and look at the Z dimention, i.e. "Year"
data.nc<- open.nc("rstack.nc")
Zdim = var.get.nc(ncfile=data.nc,variable="Year")
print(Zdim)
#[1] 1 2 3
所以我们得到的是波段编号,即1,2,3。但我需要的是由 Year(例如 2014,2015,2016)定义的文本,定义如下:
names(rstack)<-c("2014","2015","2016")
是否有可能做到这一点??这个问题并不新鲜,参考这里: https ://gis.stackexchange.com/questions/122167/export-band-names-with-netcdf-file-in-r
有一些复杂的解决方法可以得到所需的东西,但它们似乎效率很低(即将堆栈转换为矩阵,然后从这里操作它)。只是想知道是否有更优雅的方法,而无需编写大量额外代码并占用不必要的 RAM。