Me gustaría realizar una superposición espacial para identificar el polígono en el que un conjunto de puntos de caída. Sin embargo, en primer lugar quiero búfer y disolver los polígonos, de tal manera que los puntos de caer en cualquier lugar dentro de fusionó polígonos (pero no dentro de los agujeros) serán etiquetados de manera similar por la superposición de procedimiento.
Por desgracia, el almacenamiento y/o proceso de disolución estoy usando es la reducción de la SpatialPolygons
objeto a una multi-polígono. El uso de gBuffer
crea un multi-polígono cuando byid=FALSE
, pero no de la unión de la superposición de polígonos cuando byid=TRUE
. En el último caso, posteriormente, la disolución de los polígonos con gUnaryUnion
crea de nuevo un multi-polígono. La superposición SpatialPoints
con estos multi-polígono resultados en todos los contenidos de puntos de ser reportado como caigan dentro del polígono 1.
He aquí una de juguetes relacionados con el ejemplo, con el búfer puntos, donde me gustaría hacer una superposición de los puntos con el búfer de polígonos:
library(sp)
library(rgeos)
pts <- SpatialPoints(cbind(c(1, 1, 2, 3), c(1, 2, 1.5, 2.5)))
plot(gBuffer(pts, width=0.6), lwd=2)
points(pts, pch=20, cex=2)
text(coordinates(pts), labels=seq_len(length(pts)), pos=4, font=2)
Y los resultados de algunas superposiciones...
Con
byid=FALSE
:b <- gBuffer(pts, width=0.6) over(pts, b) # [1] 1 1 1 1
Con
byid=TRUE
:b2 <- gBuffer(pts, width=0.6, byid=TRUE) over(pts, b2) # [1] 1 2 3 4
Con
byid=TRUE
y la subsiguientegUnaryUnion
:b3 <- gUnaryUnion(b2) over(pts, b3) # [1] 1 1 1 1
Estoy buscando el método correcto para lograr el resultado 1 1 1 2
, es decir, los puntos 1, 2 y 3 de caer dentro del polígono 1 (anteriormente polígonos 1, 2, y 3, que han sido combinados), y el punto 4, cae dentro del polígono 2 (originalmente polígono 4).
EDITAR
Mi verdadero datos incluyen los agujeros, y lo ideal sería que me gustaría ser capaz de conservarlos. He actualizado los datos del ejemplo anterior para incluir un agujero después de que el almacenamiento en búfer.
La aplicación de @JeffreyEvans enfoque de estos polígonos:
polys <- b@polygons[[1]]@Polygons
pl <- vector("list", length(polys))
for (i in 1:length(polys)) { pl[i] <- Polygons(list(polys[[i]]), i) }
b.spolys <- SpatialPolygons(pl)
row.ids <- sapply(slot(b.spolys, "polygons"), function(i) slot(i, "ID"))
b.exploded <- SpatialPolygonsDataFrame(b.spolys, data.frame(FID=as.numeric(row.ids)))
resultados en:
over(pts, b.exploded)
# FID
# 1 2
# 2 2
# 3 2
# 4 1
que es el resultado esperado (no estoy demasiado mimados acerca de la poli orden - 2,2,2,1
vs 1,1,1,2
), pero b.exploded
ha perdido la información sobre el agujero, en vez representa como un agujero polígono. Es evidente que no se afectará el resultado para el juguete ejemplo, pero una superposición que implican puntos situados en el agujero será engañoso, por ejemplo:
in_hole <- SpatialPoints(cbind(1.375, 1.5))
over(in_hole, b.exploded)
# FID
# 1 2