我正在处理两个具有不同分辨率的栅格。我想知道是否有更有效的方法将较粗糙的光栅分辨率与更精细的光栅分辨率相匹配。现在我使用掩码功能来节省一些时间,剪辑到正确的范围并改变分辨率:
library(raster)
#the raster template with the desired resolution
r <- raster(extent(-180, 180, -64, 84), res=0.04166667)
# set some pixels to values, others to NA
r <- setValues(r, sample(c(1:3, NA), ncell(r), replace=TRUE))
#load the raster
lc_r1 <- raster(r)
res(lc_r1) <- 0.5
values(lc_r1) <- 1:ncell(lc_r1)
lc_r1
##class : RasterLayer
##dimensions : 296, 720, 213120 (nrow, ncol, ncell)
##resolution : 0.5, 0.5 (x, y)
##extent : -180, 180, -64, 84 (xmin, xmax, ymin, ymax)
##coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
##data source : in memory
##names : layer
##values : 1, 213120 (min, max)
#create the new finer resolution raster.
lc_r2 <- mask (lc_r1, r2)
Error in compareRaster(x, mask) : different number or columns
我也在disaggregate
尝试raster
功能,但是我得到了这个奇怪的错误!
lc_r2 <- disaggregate (lc_r1, nrows=3600 )
Error: !is.null(fact) is not TRUE
这似乎暂时有用,但不确定它是否正确:
lc_r2 <- disaggregate (lc_r1, fact=c(12,12 ), method='bilinear')
答案 0 :(得分:1)
为什么Error: !is.null(fact) is not TRUE
会变成奇数?如果你看?disaggregate
,你会看到没有参数nrows
,但是你没有提供必需的参数fact
。
你可以做到
lc_r2a <- disaggregate (lc_r1, fact=12)
或者
lc_r2b <- disaggregate(lc_r1, fact=12, method='bilinear')
相当于
lc_r2c <- resample(lc_r1, r)
为什么你不确定这是否正确?
但是,考虑到你要屏蔽lc_r1
,逻辑方法是朝相反的方向改变你的面具的分辨率,r
,
ra <- aggregate(r, fact=12, na.rm=TRUE)
lcm <- mask(lc_r1, ra)