如何更改 R 中 2 个栅格图层的分辨率?
How to change resolution of 2 rasters layers in R?
我正在处理两个栅格堆栈:bioclim(气候数据)和土壤数据。它们有不同的分辨率。数据说明:
bioclim
#class : RasterStack
#dimensions : 163, 319, 51997, 19 (nrow, ncol, ncell, nlayers)
#resolution : 0.1666667, 0.1666667 (x, y)
#extent : 18.83337, 72.00005, 40.99999, 68.16666 (xmin, xmax, ymin, ymax)
#crs : NA
soil
#class : RasterStack
#dimensions : 1256, 2213, 2779528, 5 (nrow, ncol, ncell, nlayers)
#resolution : 0.02259376, 0.02259376 (x, y)
#extent : 20, 69.99999, 42.62224, 71 (xmin, xmax, ymin, ymax)
#crs : NA
我试过功能:
soil <- aggregate(soil, fact=7.376669487504514)
我只是输入这个数字(事实),因为它等于生物气候的分辨率除以土壤的分辨率。
但是,它们的区别不大:
res(soil)
#[1] 0.1581563 0.1581563
res(bioclim)
#[1] 0.1666667 0.1666667
我也尝试了其他功能,比如aggregate
,但没有成功。
我需要创建两个堆栈的主堆栈:bioclim 和土壤。拜托,有人可以帮助我吗?
env <- stack(bioclim,soil)
这是一个独立的、最小的、可重现的例子:
library(raster)
bioclim <- raster(nrow=163, ncol=319, ext=extent(18.83337, 72.00005, 40.99999, 68.16666))
soil <- raster(nrow=1256, ncol=2213, ext=extent(20, 69.99999, 42.62224, 71))
values(soil) = 1:ncell(soil)
解决方法:如果不能使用(dis-)aggregate
,可以使用resample
sb <- resample(soil, bioclim)
sb
#class : RasterLayer
#dimensions : 163, 319, 51997 (nrow, ncol, ncell)
#resolution : 0.1666667, 0.1666667 (x, y)
#extent : 18.83337, 72.00005, 40.99999, 68.16666 (xmin, xmax, ymin, ymax)
#crs : +proj=longlat +datum=WGS84 +no_defs
#source : memory
#names : layer
#values : 284578.3, 2779484 (min, max)
或使用terra
,如果您需要更好的性能:
library(terra)
bc <- rast(nrow=163, ncol=319, ext=ext(18.83337, 72.00005, 40.99999, 68.16666))
so <- rast(nrow=1256, ncol=2213, ext=ext(20, 69.99999, 42.62224, 71))
values(so) = 1:ncell(so)
sb <- resample(so, bc)
我正在处理两个栅格堆栈:bioclim(气候数据)和土壤数据。它们有不同的分辨率。数据说明:
bioclim
#class : RasterStack
#dimensions : 163, 319, 51997, 19 (nrow, ncol, ncell, nlayers)
#resolution : 0.1666667, 0.1666667 (x, y)
#extent : 18.83337, 72.00005, 40.99999, 68.16666 (xmin, xmax, ymin, ymax)
#crs : NA
soil
#class : RasterStack
#dimensions : 1256, 2213, 2779528, 5 (nrow, ncol, ncell, nlayers)
#resolution : 0.02259376, 0.02259376 (x, y)
#extent : 20, 69.99999, 42.62224, 71 (xmin, xmax, ymin, ymax)
#crs : NA
我试过功能:
soil <- aggregate(soil, fact=7.376669487504514)
我只是输入这个数字(事实),因为它等于生物气候的分辨率除以土壤的分辨率。
但是,它们的区别不大:
res(soil)
#[1] 0.1581563 0.1581563
res(bioclim)
#[1] 0.1666667 0.1666667
我也尝试了其他功能,比如aggregate
,但没有成功。
我需要创建两个堆栈的主堆栈:bioclim 和土壤。拜托,有人可以帮助我吗?
env <- stack(bioclim,soil)
这是一个独立的、最小的、可重现的例子:
library(raster)
bioclim <- raster(nrow=163, ncol=319, ext=extent(18.83337, 72.00005, 40.99999, 68.16666))
soil <- raster(nrow=1256, ncol=2213, ext=extent(20, 69.99999, 42.62224, 71))
values(soil) = 1:ncell(soil)
解决方法:如果不能使用(dis-)aggregate
,可以使用resample
sb <- resample(soil, bioclim)
sb
#class : RasterLayer
#dimensions : 163, 319, 51997 (nrow, ncol, ncell)
#resolution : 0.1666667, 0.1666667 (x, y)
#extent : 18.83337, 72.00005, 40.99999, 68.16666 (xmin, xmax, ymin, ymax)
#crs : +proj=longlat +datum=WGS84 +no_defs
#source : memory
#names : layer
#values : 284578.3, 2779484 (min, max)
或使用terra
,如果您需要更好的性能:
library(terra)
bc <- rast(nrow=163, ncol=319, ext=ext(18.83337, 72.00005, 40.99999, 68.16666))
so <- rast(nrow=1256, ncol=2213, ext=ext(20, 69.99999, 42.62224, 71))
values(so) = 1:ncell(so)
sb <- resample(so, bc)