Convertir un objeto de polígono espacial en un marco de datos usando R

18

Mi objetivo es modificar un shapefile existente mediante la fusión de ciertos polígonos.

Después de importar el shapefile y usar el comando UnionSpatialPolygons, obtengo el contorno de polígono que quiero.

Sin embargo, este es ahora un objeto SpatialPolygons y no un SpatialPolygonsDataFrame, por lo que no puedo exportarlo a un shapefile usando writeOGR.

¿Cómo puedo solucionar este problema?

    
pregunta John 23.05.2013 - 11:31

2 respuestas

20

Como su nombre lo indica, un SpatialPolygonsDataFrame es básicamente un objeto SpatialPolygons con datos adjuntos (la tabla de atributos). Los datos deben tener al menos tantas filas como características

library(rgdal)
ob <- SpatialPolygons(..)# Your SpatialPolygons Object
spp <-     SpatialPolygonsDataFrame(ob,data=as.data.frame("yourData"),proj4string=CRS("+proj=    aea > +ellps=GRS80 +datum=WGS84"))
writeOGR(spp,"shapes","testShape",driver="ESRI Shapefile",)

---- EDICIÓN ----

Si desea convertir su SpatialPolygonsDataFrame de nuevo a un objeto SpatialPolygons , solo necesita abordar la estructura del objeto dentro de R

ob <- SpatialPolygons([email protected],[email protected])
    
respondido por el Curlew 23.05.2013 - 11:54
9

Problemas:

1: el resultado de UnionSpatialPolygons es un polígono espacial

2: convertir el resultado nuevamente en un marco de datos de polígono espacial es un verdadero dolor

-a. necesita un marco de datos muy exacto para adjuntarlo a un polígono espacial

-b. los datos que utilizó para UnionSpatialPolygons tienen más filas que la salida y no están formateados de la forma que se necesita.

Mi (fea) solución:

### Coerce into spatial polygon data frame with id and row name of spatial polygon

# Make a data frame that meets the requirements above:

df<- data.frame(id = getSpPPolygonsIDSlots(your.spatialpolygon))
row.names(df) <- getSpPPolygonsIDSlots(your.spatialpolygon)

# Make spatial polygon data frame
spdf <- SpatialPolygonsDataFrame(your.spatialpolygon, data =df)

# Then don't forget to make sure the projection is correct
# XXXX is your SRID

proj4string(spdf) <- CRS("+init=epsg:XXXX");
spdf <- spTransform(spdf , CRS("+init=epsg:XXXX"));
    
respondido por el K . 01.09.2015 - 05:36

Lea otras preguntas en las etiquetas