微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何更改R中2个栅格图层的分辨率?

如何解决如何更改R中2个栅格图层的分辨率?

我正在处理两个栅格堆栈:生物气候(气候数据)和土壤数据。他们有不同的分辨率。数据说明:

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,nlayers)
#resolution : 0.02259376,0.02259376  (x,y)
#extent     : 20,69.99999,42.62224,71  (xmin,ymax)
#crs        : NA 

我试过函数

soil <- aggregate(soil,fact=7.376669487504514)

我只是把这个数字(事实),因为它等于生物气候的分辨率除以土壤的分辨率。

但是,它们几乎没有区别:

res(soil)
#[1] 0.1581563 0.1581563

res(bioclim)
#[1] 0.1666667 0.1666667

我也尝试过其他函数,如 aggregate,但没有成功。

我需要创建两个堆栈的主堆栈:生物气候和土壤。拜托,有人可以帮我吗?

env <- stack(bioclim,soil)

解决方法

在询问 R 问题时,请提供一个独立的、最小的、可重现的示例,如下所示

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,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,ext=ext(18.83337,68.16666))
so <- rast(nrow=1256,ext=ext(20,71))
values(so) = 1:ncell(so)
  
sb <- resample(so,bc)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。