将RasterBrick维度从TXY更改为XYT

时间:2016-02-24 00:34:24

标签: r raster netcdf

我正在尝试将netCDF文件导入RasterBrick中的RnetCDF文件有3个维度。

library(ncdf)
nc <- open.ncdf("fm100_2003.nc");
print(nc)
[1] "file fm100_2003.nc has 3 dimensions:"
[1] "lon   Size: 1386"
[1] "lat   Size: 585"
[1] "day   Size: 365"
[1] "------------------------"
[1] "file fm100_2003.nc has 1 variables:"
[1] "short dead_fuel_moisture_100hr[day,lon,lat]  Longname:dead_fuel_moisture_100hr Missval:-9999"

日尺寸的大小对应于一年(365天)的每日燃料水分。我想将这些内容导入RasterBrick以进行其他分析,这非常简单,

r <- "fm100_2003.nc"
b <- brick(r,varname="dead_fuel_moisture_100hr")

但是,问题是ncol中的nlayersRasterBrick会被切换,这会导致砖块中每个图层的rasterLayer不正确。 RasterBrick的尺寸应为1386,585,505890,365而不是以下尺寸:

class       : RasterBrick 
dimensions  : 1386, 365, 505890, 585  (nrow, ncol, ncell, nlayers)
resolution  : 1, 0.04166667  (x, y)
extent      : 37619.5, 37984.5, -124.793, -67.043  (xmin, xmax, ymin, ymax)
coord. ref. : NA 
data source : fm100_2003.nc 
names       : X49.3960227966309, X49.3543561299642, X49.3126894632975, X49.2710227966309, X49.2293561299642, X49.1876894632975, X49.1460227966309, X49.1043561299642, X49.0626894632975, X49.0210227966309, X48.9793561299642, X48.9376894632975, X48.8960227966309, X48.8543561299642, X48.8126894632975, ... 
degrees_north: 25.0626894632975, 49.3960227966309 (min, max)
varname     : dead_fuel_moisture_100hr 

我想知道在创建RasterBrick时是否有任何方法可以指定尺寸以避免此问题?

3 个答案:

答案 0 :(得分:0)

这很奇怪,为什么尺寸不正确。您可以使用以下命令探索您的ncdf文件:

# Open your dimension
# following by '$' you can use tab to see the next available command (R Studio)
r$dim

# REad value for each dimension
lon = get.var.ncdf(r, varid='lon')
lat = get.var.ncdf(r, varid='lat')
time = get.var.ncdf(r, varid='day')

答案 1 :(得分:0)

我能够找到解决方案(或者可能解决上述问题)。

我首先将netCDF文件导入R中的数组。

dname <- "dead_fuel_moisture_100hr"
array1 <- get.var.ncdf(nc, dname) 
dim(array1)
[1]  365 1386  585

array1的维度为:days,columns,rows。但是,我可以更改数组的尺寸:

array2<-aperm(array1, c(3, 2, 1))
dim(array2)
[1]  585 1386  365

现在数组已正确组织:行,列,天。此时我可以访问我需要的深度范围(第1天到第365天)作为矩阵:

fm.day.001<-array2[,,1]
...
fm.day.365<-array2[,,365]

矩阵也可以转换为栅格:

r2<-raster(nrow=585,ncol=1386,vals=fm.day.001, xmn=-124.7722, xmx=-67.06383,  ymn=25.06269, ymx=49.39602)  

答案 2 :(得分:0)

您可以尝试dims参数。类似的东西:

b <- brick("fm100_2003.nc", varname="dead_fuel_moisture_100hr", dims=3:1)

这是实验性的。即使它创建了正确的对象,该对象也可能无法用于后续操作。