r_hr <- raster(nrow=70, ncol=70) #High resolution raster with categorical data
set.seed(0)
r_hr[] <- round(runif(1:ncell(r_hr), 1, 5))
r_lr <- raster(nrow=6, ncol=6)
r_hr
#class : RasterLayer
#dimensions : 70, 70, 4900 (nrow, ncol, ncell)
#resolution : 5.142857, 2.571429 (x, y)
#extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
#coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
#data source : in memory
#names : layer
#values : 1, 5 (min, max)
r_lr
#class : RasterLayer
#dimensions : 6, 6, 36 (nrow, ncol, ncell)
#resolution : 60, 30 (x, y)
#extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
#coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
直接合计是不可能的,因为 70/6 不是整数。
dim(r_hr)[1:2] / dim(r_lr)[1:2]
#[1] 11.66667 11.66667
最近邻重采样也不是一个好主意,因为结果是任意的。
这是您建议的逐层方法dww 也已经显示 https://stackoverflow.com/a/37956798/2761575.
b <- layerize(r_hr)
fact <- round(dim(r_hr)[1:2] / dim(r_lr)[1:2])
a <- aggregate(b, fact)
x <- resample(a, r_lr)
现在你有了比例。如果你想要一个单独的课程,你可以这样做
y <- which.max(x)
在这种情况下,另一种方法是聚合类
ag <- aggregate(r_hr, fact, modal)
agx <- resample(ag, r_lr, method='ngb')
注意agx
and y
是相同的。但它们都可能存在问题,因为您的单元格可能有 5 个类,每个类约占 20%,因此选择一个获胜者是相当不合理的。