writeOGR con un polígono espacial simplificado por gSimplify

12

Estoy usando gSimplify(paquete rgeos) para simplificar las geometrías de un shapefile. La función funciona bien, pero ahora no puedo escribir la salida en un nuevo archivo de forma. Intenté algunas formas:

writeOGR(simplyshape, file, driver="ESRI Shapefile", layer='test')

yo obtengo

obj debe ser un SpatialPointsDataFrame, SpatialLinesDataFrame o SpatialPolygonsDataFrame

y con:

writePolyShape(simplyshape, file)

Yo obtengo:

Error: is (x, "SpatialPolygonsDataFrame") no es VERDADERO

andriatz
fuente

Respuestas:

8

Coaccione su objeto a la Spatial*DataFrameclase apropiada (Puntos / Líneas / Polígonos), por ejemplo, para SpatialPolygonsusar as(x, "SpatialPolygonsDataFrame" ):

R> l <- readWKT("LINESTRING(0 7,1 6,2 1,3 4,4 1,5 7,6 6,7 4,8 6,9 4)")
R> x1 <- gSimplify(p, tol=10)
R> class(x1)
[1] "SpatialPolygons"
attr(,"package")
[1] "sp"
R> x2 <- as(x, "SpatialPolygonsDataFrame")
R> class(x2)
[1] "SpatialPolygonsDataFrame"
attr(,"package")
[1] "sp"
rcs
fuente
5

Necesitas convertir tu SpatialPolygonsclase en una SpatialPolygonsDataFrameclase. Por ejemplo:

require(rgdal)
require(rgeos)

# Read shapefile
shp = 'C:/temp/myshp.shp'
myshp = readOGR(shp, layer = basename(strsplit(shp, "\\.")[[1]])[1])

# Read shapefile attributes
df = data.frame(myshp)

# Simplify geometry using rgeos
simplified = gSimplify(myshp, tol = 1000, topologyPreserve=FALSE)

# Create a spatial polygon data frame (includes shp attributes)
spdf = SpatialPolygonsDataFrame(simplified, df)

# Write to shapefile
writeOGR(spdf, layer = 'myshp_simplified', 'C:/temp', driver="ESRI Shapefile")
Aaron
fuente