我有来自各种全球环流模型(GCM)的数据,我需要以更精细的分辨率来干扰0.5度像素的气候观测。我看到我可以使用分解因为这个函数不会改变像素值,因为'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数据分解的最佳方法是什么?
提前致谢。
答案 0 :(得分:2)
下面的代码应该有帮助 - 它使用聚合到最接近的整数缩放,然后重新采样以完全匹配其他栅格的空间特征:
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")
但是有一些警告/警告:如果你想拥有与原始栅格相同的值,请使用method =''否则它会插入。但最重要的是看你的r和s栅格之间的纵横比,它们是不一样的:dim(r)[1] / dim(s)[1]!= dim(r)[2] / dim(s) [2])。我会仔细检查原始数据,因为如果在分辨率,投影或范围方面存在差异,您将无法从上述步骤中获得所需内容。