r语言 - 创建显示多个多边形之间重叠比例的矩阵



我有一个多边形列表,我需要知道每个多边形组合的重叠比例。换句话说,poly1与poly2, poly3,…然后poly2到poly3, poly4,…我已经找到了2个多边形的方法,但我想避免做一堆成对计算。我怎样才能做到这一点呢?此外,我能提供什么使这篇文章有帮助?

这是一个代码的例子,我用它来计算一个多边形(处理)上的多边形列表的重叠比例。它可以适应创建每个多边形到多边形计算的矩阵吗?

###################################################
#read in and create list of polygons
home.names <- list.files("", 
pattern="*.shp", recursive=T, full.names=T)
home.names

#####################################################
#create list to hold results and loop home-range overlap calculations
all.home.ranges <- list()
#loop
for (i in 1:length(home.names)){
home.range <- st_read(home.names[i])
home.range.t <- st_transform(home.range,'+proj=utm +zone=14 
+ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs')
home.range$Area.ha <- st_area(home.range.t)*0.0001
pi <- st_intersection(treatment, home.range.t) # treatment is a polygon
if(nrow(pi) != 0){
home.range$Treat.Overlap.per <- as.numeric(st_area(pi) / st_area(home.range.t) *100)
} else {
home.range$Treat.Overlap.per <- 0
}

一种方法是构造一个2列矩阵。例如,如果您有5个poly:

i <- rep(1:5, each=5)
j <- rep(1:5, 5)
comp <- cbind(i, j)[i < j, ]
comp
#       i j
#  [1,] 1 2
#  [2,] 1 3
#  [3,] 1 4
#  [4,] 1 5
#  [5,] 2 3
#  [6,] 2 4
#  [7,] 2 5
#  [8,] 3 4
#  [9,] 3 5
# [10,] 4 5

通过comp循环并使用ij来选择两个poly进行比较。没有可重复的数据,我不能调试这个,但像:

for (k in 1:nrow(comp){
home.range <- st_read(home.names[comp[k, 1]])
home.range.t <- st_transform(home.range,'+proj=utm +zone=14 
+ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs')
home.range$Area.ha <- st_area(home.range.t)*0.0001
home.range2 <- st_read(home.names[comp[k, 2]])
home.range.t2 <- st_transform(home.range2,'+proj=utm +zone=14 
+ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs')
home.range2$Area.ha <- st_area(home.range.t2)*0.0001
pi <- st_intersection(home.range.t, home.range.t2)
if(nrow(pi) != 0){
home.range$Treat.Overlap.per <- as.numeric(st_area(pi) / st_area(home.range.t) *100)
} else {
home.range$Treat.Overlap.per <- 0
}

主要的区别是重叠的百分比可以基于两个家。靶场和主场,靶场2。您可以根据计划如何处理结果来计算两者。

最新更新