使用 'disaggregate' 和 GCM 数据

Using 'disaggregate' with GCM data

我有来自各种全球环流模型 (GCM) 的数据,我需要更精细的分辨率来扰乱 0.5 度像素的气候观测。我看到我可以使用 disaggregate 因为这个函数不会改变像素值,就像 'resample' 使用双线性方法一样。但是,输出仍然与我的精细网格不匹配。

这是我正在处理的文件尺寸的示例:

r = raster(ncols=720, nrows=360) #fine resolution grid
r[] = runif(1:100)
> r
class       : RasterLayer 
dimensions  : 360, 720, 259200  (nrow, ncol, ncell)
resolution  : 0.5, 0.5  (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      : 0.0159161, 0.9876637  (min, max)

s = raster(ncols=192, nrows=145) #dimensions of one of the GCM
s[] = runif(1:10)
> s
class       : RasterLayer 
dimensions  : 145, 192, 27840  (nrow, ncol, ncell)
resolution  : 1.875, 1.241379  (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      : 0.03861309, 0.9744665  (min, max)


d=disaggregate(s, fact=c(3.75,2.482759)) #fact equals r/s for cols and rows
> d
class       : RasterLayer 
dimensions  : 290, 768, 222720  (nrow, ncol, ncell)
resolution  : 0.46875, 0.6206897  (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      : 0.03861309, 0.9744665  (min, max)

'd'的尺寸不等于'r'的尺寸,所以我无法对2个网格进行操作。我并不是要对像素值进行插值。那么,实现 GCM 数据分解的最佳方法是什么?

提前致谢。

下面的代码应该有所帮助 - 它使用聚合到最接近的整数缩放比例,然后重新采样以完全匹配其他栅格的空间特征:

r = raster(ncols=720, nrows=360) #fine resolution grid
r[] = runif(1:100)

s = raster(ncols=192, nrows=145) #dimensions of one of the GCM
s[] = runif(1:10)

d=disaggregate(s, fact=c(round(dim(r)[1]/dim(s)[1]),round(dim(r)[2]/dim(s)[2])), method='') #fact equals r/s for cols and rows
e=resample(d, r,  method="ngb")

但有一些注意事项/警告:如果您想要与原始栅格具有相同的值,请使用 disaggregate with method='' 否则它将进行插值。但最重要的是看你的 r 和 s 栅格之间的纵横比,它们是不一样的:dim(r)[1]/dim(s)[1] != dim(r)[2]/dim(s) [2]).我会仔细检查原始数据,因为如果分辨率、投影或范围存在差异,您将无法从上述步骤中获得想要的结果。