Tengo estos dos polígonos:
library(sp); library(rgeos); library(maptools)
coords1 <- matrix(c(-1.841960, -1.823464, -1.838623, -1.841960, 55.663696,
55.659178, 55.650841, 55.663696), ncol=2)
coords2 <- matrix(c(-1.822606, -1.816790, -1.832712, -1.822606, 55.657887,
55.646806, 55.650679, 55.657887), ncol=2)
p1 <- Polygon(coords1)
p2 <- Polygon(coords2)
p1 <- Polygons(list(p1), ID = "p1")
p2 <- Polygons(list(p2), ID = "p2")
myPolys <- SpatialPolygons(list(p1, p2))
spdf1 = SpatialPolygonsDataFrame(myPolys, data.frame(variable1 = c(232,
242), variable2 = c(235, 464), row.names = c("p1", "p2")))
proj4string(spdf1) <- CRS("+proj=longlat +datum=WGS84 +ellps=WGS84
+towgs84=0,0,0")
plot(spdf1, col="red")
coords1a <- matrix(c(-1.830219, -1.833753, -1.821154, -1.830219, 55.647353,
55.656629, 55.652122, 55.647353), ncol=2)
p1a <- Polygon(coords1a)
p1a <- Polygons(list(p1a), ID = "p1a")
myPolys1 <- SpatialPolygons(list(p1a))
spdf2 = SpatialPolygonsDataFrame(myPolys1, data.frame(variable1 = c(2),
variable2 = c(3), row.names = c("p1a")))
proj4string(spdf2) <- CRS("+proj=longlat +datum=WGS84 +ellps=WGS84
+towgs84=0,0,0")
plot(spdf2, col="yellow", add=T)
Quiero cortar partes de spdf1
eso por las que se cruzan spdf2
. Sin embargo, quiero spdf1
permanecer como SpatialPolygonsDataFrame y retener cualquier información contenida en él spdf1@data
.
He intentado gDifference de la siguiente manera, que corta partes de las spdf1
cuales están intersectadas por spdf2
, pero luego se convierte spdf1
en Polígonos Espaciales (es decir, descartando la información contenida en spdf1@data
).
gDifference(spdf1, spdf2, byid=T)
¿Cómo puedo cortar en spdf1
con spdf2
, pero conservan los datos contenidos en spdf1@data
? ¿He comprobado e intentado esta pregunta similar sin cómo superponer un polígono sobre SpatialPointsDataFrame y preservar los datos SPDF?
rgeos
proporciona operaciones geométricas pero no trata con los atributos de los datos. Por lo tanto, el uso de estas funciones requiere mucho trabajo para mantener todo junto. Las funciones ráster simplifican esto y se comportan como funciones similares en el software SIG.Una solución alternativa sería volver a agregar los atributos después de hacer el clip, mientras se convierte de
SpatialPolygons
aSpatialPolygonsDataFrame
.fuente