相互访问的多边形之间的重叠百分比

问题描述

我正在寻找有关如何计算不同圆形多边形重叠百分比的答案? 具体而言,我指的是这个问题:

Percentage of overlap between polygons

在我的情况下,我需要计算两个相互访问的多边形之间的重叠。

数据: 我有一长列(数千个)访问过的多边形(按时间顺序排列的列表元素)。

head(polygon.list)
[[1]]
           lat     long
 [1,] 48.11897 11.56869
 [2,] 48.11921 11.56859
 [3,] 48.11931 11.56836
 [4,] 48.11921 11.56812
 [5,] 48.11897 11.56802
 [6,] 48.11873 11.56812
 [7,] 48.11863 11.56836
 [8,] 48.11873 11.56859
 [9,] 48.11897 11.56869

[[2]]
           lat     long
 [1,] 48.11897 11.56869

[[3]]
           lat     long
 [1,] 48.11629 11.56797
 [2,] 48.11653 11.56787
 [3,] 48.11663 11.56763
 [4,] 48.11653 11.56739
 [5,] 48.11629 11.56730
 [6,] 48.11605 11.56739
 [7,] 48.11596 11.56763
 [8,] 48.11605 11.56787
 [9,] 48.11629 11.56797

我已经使用(sp包)将列表元素转换为polygon对象

library(sp)

# Create polygon objects (sp-package) from list elements
for (col in (1:ncol(df))){
  
  polygon <- polygon(list[[col]])
  list[[col]] <- polygon
}

polygon.list <- list
> head(polygon.list)
[[1]]
An object of class "polygon"
Slot "labpt":
[1] 48.11897 11.56836

Slot "area":
[1] 3.203203e-07

Slot "hole":
[1] FALSE

Slot "ringDir":
[1] 1

Slot "coords":
           lat     long
 [1,] 48.11897 11.56869


[[2]]
An object of class "polygon"
Slot "labpt":
[1] 48.11897 11.56836

Slot "area":
[1] 3.203203e-07

Slot "hole":
[1] FALSE

Slot "ringDir":
[1] 1

Slot "coords":
           lat     long
 [1,] 48.11897 11.56869


[[3]]
An object of class "polygon"
Slot "labpt":
[1] 48.11629 11.56763

Slot "area":
[1] 3.203195e-07

Slot "hole":
[1] FALSE

Slot "ringDir":
[1] 1

Slot "coords":
           lat     long
 [1,] 48.11629 11.56797

但是,我不知道如何将针对三个具体多边形建议的以下解决方案应用于我未知数量的多边形的示例:(请参阅Percentage of overlap between polygons

poly <- Spatialpolygons(list(polygons(list(polygon(polygon1)),"a"),polygons(list(polygon(polygon2)),"b"),polygons(list(polygon(polygon3)),"c")),1L:3L)

## areas for the original shapes:
areas_poly <- vector(length = length(poly)) 
for (x in seq_along(poly)) areas_poly[x]<-area(poly[x])

## areas for the overlapping regions:
idx <- combn(seq_along(poly),2)
areas_intersect <- sapply(1:ncol(idx),function(x) {
  area(intersect(poly[idx[1,x]],poly[idx[2,x]])) 
})

## get overlaps in percentages:
overlap_perc <- 
  round(do.call(cbind,lapply(seq_len(ncol(idx)),function(x)  
  rbind(
    areas_intersect[x] / areas_poly[idx[1,x]] * 100,areas_intersect[x] / areas_poly[idx[2,x]] * 100
  )
)),2)

目标:我需要一个列表或数据框,其中包含一个多边形与相应多边形之前的列表元素中包含的多边形相交面积的百分比

添加:列表中的多边形通常不重叠(如上例所示),这就是为什么需要考虑“ NULL”交叉区域的解决方案的原因

我自己尝试了几个apply()-解决方案,因此任何具体的编码帮助都非常感谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)