Вот адаптация этого ответа
library(raster)
library(sp)
## example data:
p1 <- structure(c(0, 0, 0.4, 0.4, 0, 0.6, 0.6, 0), .Dim = c(4L, 2L), .Dimnames = list(NULL, c("x", "y")))
p2 <- structure(c(0.2, 0.2, 0.6, 0.6, 0, 0.4, 0.4, 0), .Dim = c(4L, 2L), .Dimnames = list(NULL, c("x", "y")))
p3 <- structure(c(0, 0, 0.8, 0.8, 0, 0.8, 0.8, 0), .Dim = c(4L, 2L), .Dimnames = list(NULL, c("x", "y")))
poly <- SpatialPolygons(list(Polygons(list(Polygon(p1)), "a"),Polygons(list(Polygon(p2)), "b"),Polygons(list(Polygon(p3)), "c")),1L:3L)
plot(poly)
crs(poly) <- "+proj=utm +zone=1, +datum=WGS84"
Я понимаю, что у вас есть отдельные объекты SpatialPolygonDataFrame, каждый из которых имеет один (много) многоугольник. Вы можете хранить их в списке. С данными примера:
ss <- list(poly[1,], poly[2,], poly[3,])
А затем сделайте что-то вроде этого:
n <- length(ss)
overlap <- matrix(0, nrow=n, ncol=n)
diag(overlap) <- 1
for (i in 1:n) {
ss[[i]]$area <- area(ss[[i]])
}
for (i in 1:(n-1)) {
for (j in (i+1):n) {
x <- intersect(ss[[i]], ss[[j]])
if (!is.null(i)) {
a <- area(x)
overlap[i,j] <- a / ss[[i]]$area
overlap[j,i] <- a / ss[[j]]$area
}
}
}
С вашими данными вы могли бы составить список полигонов, таких как:
ff <- c("Din_biome_Rock_Ice.shp", "FAO_GEZ_Polar.shp", "KG_Beck_EF.shp")
ss <- lapply(ff, shapefile)
И возьми оттуда.