r语言 - 利用terra::union求解terra中重叠向量的问题



我有几个栖息地类型的多边形,根据我选择的多边形,我需要得到一个国家的百分比。问题是许多多边形相交,所以我需要解决交集,这样我就不会把面积加两次,并假设国家的百分比比我应该计算的要高。

library(sf)
library(terra)
hab1 <- sf::read_sf("/vsicurl/https://github.com/Sustainscapes/BiodiversityCounsil/raw/master/ForQuestion/Overdrev.shp") |>
terra::vect()
hab2 <- sf::read_sf("/vsicurl/https://github.com/Sustainscapes/BiodiversityCounsil/raw/master/ForQuestion/Strandeng.shp") |>
terra::vect()
Test1 <- terra::union(hab1, hab2)

这并没有像它应该的那样工作,因为test1中的特征数量是21528,但是每个变量的长度只有3

,如下面的代码所示,并且不允许子集:

length(Test1)
# [1] 21528
length(Test1$Overdrev)
# [1] 3
length(Test1$Strandeng)
# [1] 3

(这个问题的更详细的版本在这里)

我认为这是修复了一段时间,但不是在CRAN版本。你能在开发版上试试吗?您可以使用install.packages('terra', repos='https://rspatial.r-universe.dev')

安装它。这个版本,我得到:

library(terra)
hab1 <- vect("/vsicurl/https://github.com/Sustainscapes/BiodiversityCounsil/raw/master/ForQuestion/Overdrev.shp") 
hab2 <- vect("/vsicurl/https://github.com/Sustainscapes/BiodiversityCounsil/raw/master/ForQuestion/Strandeng.shp")
Test1 <- terra::union(hab1, hab2)
length(Test1)
#[1] 3
#data.frame(Test1)
#  Overdrev Strandeng
#1 Overdrev Strandeng
#2 Overdrev      <NA>
#3     <NA> Strandeng
Test1
# class       : SpatVector 
# geometry    : polygons 
# dimensions  : 3, 2  (geometries, attributes)
# extent      : 445333, 892786.7, 6050590, 6400331  (xmin, xmax, ymin, ymax)
# coord. ref. : ETRS89 / UTM zone 32N (EPSG:25832) 
# names       : Overdrev Strandeng
# type        :    <chr>     <chr>
# values      : Overdrev Strandeng
#               Overdrev        NA
#                     NA Strandeng

和重叠区域:

ovp <- Test1[!is.na(Test1$Overdrev) & !is.na(Test1$Strandeng), ]

更一般地说,似乎你正在使用转换为多边形的栅格数据。这是自找惩罚。你不能使用原始的栅格数据吗?

最新更新