使用 '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]).我会仔细检查原始数据,因为如果分辨率、投影或范围存在差异,您将无法从上述步骤中获得想要的结果。
我有来自各种全球环流模型 (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]).我会仔细检查原始数据,因为如果分辨率、投影或范围存在差异,您将无法从上述步骤中获得想要的结果。