14 votos

Polígono del clip y retener datos

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)

enter image description here

Quiero cortar partes de spdf1 que son intersectados por spdf2. Sin embargo, quiero spdf1 a permanecer como un SpatialPolygonsDataFrame y retener toda la información contenida en spdf1@data.

I1ve intentado gDifference de la siguiente manera, que el corte de piezas de spdf1 que son atravesado por spdf2, pero luego se convierte spdf1 a SpatialPolygons (es decir, descartando la información contenida en spdf1@data).

gDifference(spdf1, spdf2, byid=T)

¿Cómo puedo cortar en spdf1 con spdf2 pero conservar los datos contenidos en spdf1@data? He comprobado y probado esta pregunta similar, sin cómo superposición de un polígono de más de SpatialPointsDataFrame y la preservación de la SPDF de datos?

10voto

SteveBurkett Puntos 960

El enfoque más simple sería

  library(raster)
  x <- spdf1 - spdf2

  # or, more formally
  y <- erase(spdf1,  spdf2)

Ver?' paquete de trama ' (sección XIV) para más funciones que tratan con el recubrimiento del polígono. Estas funciones utilizan las funciones de base de rgeos bajo el capó, en ' usuario ' (como opuesto a 'nivel de desarrollador') funciones.

4voto

Andre Silva Puntos 2910

Una solución sería volver a agregar los atributos después de realizar el clip, mientras que la conversión de SpatialPolygons a SpatialPolygonsDataFrame .

clip = gDifference(spdf1,spdf2, byid=TRUE)
row.names(clip) = c("p1","p2")

spdf3 <-SpatialPolygonsDataFrame(clip,data=as.data.frame(spdf1@data))

spdf3@data
   variable1 variable2
p1       232       235
p2       242       464

plot(spdf3, col="red")

enter image description here

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