我正在尝试将netCDF
文件导入RasterBrick
中的R
。 netCDF
文件有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
中的nlayers
和RasterBrick
会被切换,这会导致砖块中每个图层的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
时是否有任何方法可以指定尺寸以避免此问题?
答案 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)
这是实验性的。即使它创建了正确的对象,该对象也可能无法用于后续操作。