如何解决相互访问的多边形之间的重叠百分比
我正在寻找有关如何计算不同圆形多边形重叠百分比的答案? 具体而言,我指的是这个问题:
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 举报,一经查实,本站将立刻删除。