writeOGR avec un polygone spatial simplifié par gSimplify

12

J'utilise gSimplify(package rgeos) pour simplifier les géométries d'un fichier de formes. La fonction fonctionne bien, mais maintenant je ne peux pas écrire la sortie dans un nouveau fichier de formes. J'ai essayé plusieurs façons:

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

Je reçois

obj doit être un SpatialPointsDataFrame, SpatialLinesDataFrame ou SpatialPolygonsDataFrame

et avec:

writePolyShape(simplyshape, file)

Je reçois:

Erreur: est (x, "SpatialPolygonsDataFrame") n'est pas VRAI

andriatz
la source

Réponses:

8

Obligez votre objet à la Spatial*DataFrameclasse appropriée (Points / Lignes / Polygones), par exemple pour SpatialPolygonsutiliser 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
la source
5

Vous devez convertir votre SpatialPolygonsclasse en SpatialPolygonsDataFrameclasse. Par exemple:

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
la source