在 R 中堆叠 20 个不同范围的栅格

Stacking 20 rasters with different extents in R

我有 20 个栅格存储在一个名为 allrasters 的列表中。它们有不同的程度(见下文)。我想堆叠它们,所以首先我使用 lapply 将所有列表项裁剪到最小范围的栅格 - 第 10 个列表项。

library(raster)
rastlist <- list.files(path = "C:/Users/bhauptman/Box/Ch2/R/data/tif_shp", pattern='.tif$', all.files=TRUE, full.names=T)
allrasters <- lapply(rastlist, raster)
crop_allrasters <-lapply(allrasters, FUN = crop, allrasters[[10]])

它运行了,但是当我检查它们现在是否都具有相同的范围时,没有:

compareRaster(crop_allrasters)
>Error in compareRaster(crop_allrasters) : different extent

这是20个栅格的原始范围:

    > extent(allrasters[[1]])
class      : Extent 
xmin       : -223287.4 
xmax       : 122512.6 
ymin       : -340387.9 
ymax       : 298012.1 
> extent(allrasters[[2]])
class      : Extent 
xmin       : -459600.8 
xmax       : 335249.2 
ymin       : -503894.5 
ymax       : 449855.5 
> extent(allrasters[[3]])
class      : Extent 
xmin       : -459600.8 
xmax       : 335249.2 
ymin       : -503894.5 
ymax       : 449855.5 
> extent(allrasters[[4]])
class      : Extent 
xmin       : -260723.4 
xmax       : 150713.8 
ymin       : -350863.2 
ymax       : 305266.8 
> extent(allrasters[[5]])
class      : Extent 
xmin       : -260740.3 
xmax       : 150709.6 
ymin       : -350843.9 
ymax       : 305286.1 
> extent(allrasters[[6]])
class      : Extent 
xmin       : -223300 
xmax       : 129000 
ymin       : -344600 
ymax       : 298550 
> extent(allrasters[[7]])
class      : Extent 
xmin       : -223300 
xmax       : 129000 
ymin       : -344600 
ymax       : 298550 
> extent(allrasters[[8]])
class      : Extent 
xmin       : -223300 
xmax       : 129000 
ymin       : -344600 
ymax       : 298550 
> extent(allrasters[[9]])
class      : Extent 
xmin       : -223300 
xmax       : 129000 
ymin       : -344600 
ymax       : 298550 
> extent(allrasters[[10]])
class      : Extent 
xmin       : -223300 
xmax       : 129000 
ymin       : -344600 
ymax       : 298550 
> extent(allrasters[[11]])
class      : Extent 
xmin       : -223300 
xmax       : 129000 
ymin       : -344600 
ymax       : 298550 
> extent(allrasters[[12]])
class      : Extent 
xmin       : -223300 
xmax       : 129000 
ymin       : -344600 
ymax       : 298550 
> extent(allrasters[[13]])
class      : Extent 
xmin       : -223300 
xmax       : 129000 
ymin       : -344600 
ymax       : 298550 
> extent(allrasters[[14]])
class      : Extent 
xmin       : -223300 
xmax       : 129000 
ymin       : -344600 
ymax       : 298550 
> extent(allrasters[[15]])
class      : Extent 
xmin       : -421253.8 
xmax       : 293346.2 
ymin       : -463338.6 
ymax       : 411561.4 
> extent(allrasters[[16]])
class      : Extent 
xmin       : -421253.8 
xmax       : 293346.2 
ymin       : -463338.6 
ymax       : 411561.4 
> extent(allrasters[[17]])
class      : Extent 
xmin       : -260776 
xmax       : 150724 
ymin       : -350868.1 
ymax       : 305331.9 
> extent(allrasters[[18]])
class      : Extent 
xmin       : -260776 
xmax       : 150724 
ymin       : -350868.1 
ymax       : 305331.9 
> extent(allrasters[[19]])
class      : Extent 
xmin       : -260776 
xmax       : 150724 
ymin       : -350868.1 
ymax       : 305331.9 
> extent(allrasters[[20]])
class      : Extent 
xmin       : -260776 
xmax       : 150724 
ymin       : -350868.1 
ymax       : 305331.9 

原则上应该可行,此处使用一些示例数据和 terra 而不是 raster

进行说明
library(terra)
f <- system.file("ex/elev.tif", package="terra")
x = list(r, r, crop(r, c(5,6,49,50)))
y = lapply(x, crop, y=x[[3]])

sapply(x, \(i) as.vector(ext(i))) |> t()
#         xmin     xmax     ymin     ymax
#[1,] 5.741667 6.533333 49.44167 50.19167
#[2,] 5.741667 6.533333 49.44167 50.19167
#[3,] 5.741667 6.000000 49.44167 50.00000

sapply(y, \(i) as.vector(ext(i))) |> t()
#         xmin xmax     ymin ymax
#[1,] 5.741667    6 49.44167   50
#[2,] 5.741667    6 49.44167   50
#[3,] 5.741667    6 49.44167   50
 

这似乎不适用于您所用的某些输入栅格。您可以尝试直接在这些栅格上使用 crop 来找出原因。