为什么 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 并没有正常工作,我现在已经修复了这个问题。
我想计算两个分类栅格的每种可能组合下的面积。我正在使用以下代码
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 并没有正常工作,我现在已经修复了这个问题。