为什么 terra R 包中的相交函数没有给出所有组合?

Why intersect function from terra R package not giving all the combinations?

我想计算两个分类栅格的每种可能组合下的面积。我正在使用以下代码

library(terra)

#First create two rasters
r1 <- r2 <- rast(nrow=100, ncol=100)

#Assign random cell values
set.seed(123)
values(r1) <- runif(ncell(r1), min=0, max=1)
values(r2) <- runif(ncell(r2), min=0, max=1)

# classify the values into two groups
m_r1 <- c(min(global(r1, "min", na.rm=TRUE)), 0.2, 1,
               0.2, max(global(r1, "max", na.rm=TRUE)), 2)

m_r2 <- c(min(global(r2, "min", na.rm=TRUE)), 0.2, 1,
              0.2, max(global(r2, "max", na.rm=TRUE)), 2)

#Reclassify the rasters
rclmat_r1 <- matrix(m_r1, ncol=3, byrow=TRUE)
rc_r1 <- classify(r1, rclmat_r1, include.lowest=TRUE)

rclmat_r2 <- matrix(m_r2, ncol=3, byrow=TRUE)
rc_r2 <- classify(r2, rclmat_r2, include.lowest=TRUE)

plot(rc_r1)
plot(rc_r2)

#Convert to polygons
r1_poly <- as.polygons(rc_r1, dissolve=TRUE)
r2_poly <- as.polygons(rc_r2, dissolve=TRUE)
plot(r1_poly)
plot(r2_poly)

#Perform intersections
x <- intersect(r1_poly, r2_poly)
x
#> class       : SpatVector 
#> geometry    : polygons 
#> dimensions  : 2747, 2  (geometries, attributes)
#> extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#> coord. ref. : lon/lat WGS 84 
#> names       : lyr.1 lyr.1
#> type        : <int> <int>
#> values      :     1     1
#>                   1     2
#>                   2     1

从输出中可以看出,缺少一个组合,即 2-2。为什么会这样? 当我尝试使用 expanse(x) 计算每个组合的面积时,结果 returns 很长。如何获得以下组合的面积(以 km2 为单位)?

Combination Area (km2)
1-1
1-2
2-1
2-2 

对于此示例,最好保留栅格数据。

x = 10 * rc_r1 + rc_r2
a = cellSize(x, unit="km")
zonal(a, x, sum)
#  lyr.1      area
#1    11  19886611
#2    12  81946082
#3    21  84763905
#4    22 323469024
 

通过乘以 10,第一层中的值变为 10(如果它们是 1)或 20(如果它们是 2)。如果您随后添加第二层,您将得到 10 + 1 或 2 和 20 + 1 或 2,因此您最终得到四个 类:11、12、21 和 22。这些显示了第一层中的值栅格(第一个数字)和第二个栅格(第二个数字)。

当您显示 SpatVector 时,仅打印前三个记录,并且有 2-2 个记录。尽管如此,intersect 并没有正常工作,我现在已经修复了这个问题。