连接sfc对象并使用最大重叠面积分配分类属性



想象一下以下sfc对象

zone_A <- st_as_sfc(st_bbox(c(xmin = 0, ymin = 0, xmax = 2, ymax = 2)))
zone_B <- st_as_sfc(st_bbox(c(xmin = 0, ymin = 2, xmax = 2, ymax = 4)))
Zones <- st_as_sf(data.frame(class = c("A", "B"),c(zone_A, zone_B)))
st_crs(Zones) <- "WGS84"
feat_X <- st_as_sfc(st_bbox(c(xmin = 0.5, ymin = 1.25, xmax = 1.5, ymax = 3.5)))
feat_Y <- st_as_sfc(st_bbox(c(xmin = 0.1, ymin = 0.5, xmax = 0.5, ymax = 2.2)))
feat_Z <- st_as_sfc(st_bbox(c(xmin = 1.5, ymin = 2.5, xmax = 1.9, ymax = 3.5)))
feat <- st_as_sf(data.frame(name = c("X", "Y", "Z"),c(feat_X, feat_Y, feat_Z)))
st_crs(feat) <- "WGS84"

看起来像这样:

ggplot显示叠加层

我的任务是连接这两个层,并将Zones对象的分类变量class分配给feat对象的每个特征。如果一个要素与两个分区重叠,重叠区域应作为指定要指定的类别的标准。

虽然使用st_join使用明确的覆盖(如Zint示例(可以很容易地完成这一操作,但如果一个特征跨越Zones对象的两个特征(如X和Y,则该函数会创建两个特征(。在这里,我寻求一种解决方案,计算交叉点的面积,比较面积,并将较大交叉点的class属性分配给整个特征。理想情况下,这应该适用于具有多个多边形(可能在所有不明确的多边形中迭代(的较大sfc对象。

这将类似于st_interpolate_aw,但使用的是分类数据而不是数字数据。我不知道有什么现成的功能可以实现

st_join函数具有参数largest。如果设置largest=TRUE,它将"返回用与x的每个特征重叠最大的y的字段扩充的x个特征"。请参阅此处-https://r-spatial.github.io/sf/reference/st_join.html.

这是你需要的吗?

最新更新