3 votos

¿Con cuántos polígonos se cruza un polígono?

Actualmente poseo un shapefile que consta de >5000 polígonos. Me gustaría saber, para cada polígono, ¿con cuántos otros polígonos se cruza y los nombres de cada polígono con el que se cruza?

Mi salida debería ser algo así:

enter image description here

Sobre la base de esta pregunta y @JeffreyEvans sugerencia sobre el uso de gIntersects, he intentado lo siguiente a continuación. Pero, el proceso ha estado funcionando continuamente sin parar durante las últimas 5 horas. ¿Alguna sugerencia?

Aquí está el código que he ejecutado en R:

require(rgdal)
library(maptools)
library(rgeos)
library(GISTools)
Poly <- readOGR("C:\\Users\\rameshv\\Terrestrial_dissolved_multipart.shp")
Poly_join <- gIntersects(Poly)

EDITAR

He podido resolver parte de mi propia pregunta. Sin embargo, sigo sin tener claro cómo escribir una lista de nombres separados por comas en cada fila. A partir de ahora, tengo un bucle que leer en cada shapefile, comprueba si hay una intersección con un gran polígonos espaciales marco de datos e imprime un marco de datos y el número de polígonos que se cruza con.

library(rgdal)
library(GISTools)
library(sp)
library(raster)

##List all the shapefiles
shapes <- list.files(path =    "C:\\Users\\rameshv\\Desktop\\Output_All\\", pattern=".shp$", full.names=TRUE)
head(shapes)

##Read in the big spatial polygons dataframe - this contains ALL MAMMALS
Big <-readOGR("C:\\Users\\rameshv\\Desktop\\Ranges_Overlap\\multipart.shp")

for (i in 1:length(shapes)){
    a <- readOGR(shapes[i])
    o <- over(a, Big,returnList = T)
    s <- o[[1]]
    count <- length(s$binomial)-1
    a$binomial <- as.character(a$binomial)
    results <- data.frame(a$binomial,count)
 write.table(results,file="C:\\Users\\rameshv\\Desktop\\overlapfile_Final.csv", row.names=F,append = TRUE, col.names = F, sep = ",")
}

¿Alguna idea?

0voto

sgwill Puntos 2444

Ahora con sf podrías hacer

st_intersection(shapes, shapes)

Por ejemplo

library(sf)
example(st_read)
x <- st_buffer(nc[1:10, ], dist = 0.1) ## make sure some overlap
st_intersects(x, x)
 Sparse geometry binary predicate list of length 10, where the predicate was `intersects'
 1: 1, 2
 2: 1, 2, 3
 3: 2, 3, 10
 4: 4, 7, 8
 5: 5, 6, 8, 9
 6: 5, 6, 8
 7: 4, 7, 8
 8: 4, 5, 6, 7, 8
 9: 5, 9
 10: 3, 10

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X