Konvertieren Sie ein räumliches Polygonobjekt mit R in einen Datenrahmen


18

Mein Ziel ist es, ein vorhandenes Shapefile durch Zusammenführen bestimmter Polygone zu ändern.

Nachdem ich das Shapefile importiert und den Befehl UnionSpatialPolygons verwendet habe, erhalte ich den gewünschten Polygonumriss.

Dies ist jedoch jetzt ein SpatialPolygons-Objekt und kein SpatialPolygonsDataFrame, sodass ich es nicht mit writeOGR in ein Shapefile exportieren kann.

Wie kann ich dieses Problem umgehen?


3
Wenn die Antwort unten nützlich war, sollten Sie sie als die richtige auswählen, indem Sie auf das Häkchen links neben dem Antworttext klicken.
SlowLearner

Antworten:


20

Wie der Name schon sagt, ist ein SpatialPolygonsDataFrame im Grunde nur ein SpatialPolygons-Objekt mit angehängten Daten (die Attributtabelle). Die Daten müssen mindestens so viele Zeilen enthalten, wie Features vorhanden sind

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",)

----BEARBEITEN----

Wenn Sie Ihren SpatialPolygonsDataFrameRücken in ein SpatialPolygonsObjekt umwandeln möchten, müssen Sie nur die Objektstruktur in R adressieren

ob <- SpatialPolygons(spp@polygons,proj4string=spp@proj4string)

Sicher ist @Curlew richtig. Stellen Sie sicher, dass Sie das IDsArgument bei der Ausführung korrekt angeben UnionSpatialPolygons. Andernfalls kann es databeim Zurückkonvertieren nach zu Problemen kommen, Argumente anzugeben SpatialPolygonsDataFrame.
Fdetsch

1
Klar, ganz einfach. Ich habe die ursprüngliche Antwort dafür bearbeitet
Curlew

1
Ich habe erst kürzlich angefangen, mit Shapefiles zu arbeiten und versuche mich immer noch damit vertraut zu machen. Was genau soll für youData in substituiert werden data=as.data.frame("yourData")? Nachdem unionSpatialPolygons(...)ich die inneren Polygone mit aufgelöst habe , möchte ich das Ergebnis als neues Shapefile schreiben
lightonphiri

Sie benötigen einen data.frame mit der gleichen Anzahl von Zeilen, wie Sie Features in Ihrem SpatialPolygons-Objekt haben. Stellen Sie besser eine neue Frage zu Ihrem unionProblem.
Curlew

1
@ Curlew Vielen Dank, ich habe gerade hier neue Fragen gestellt gis.stackexchange.com/q/121405/40108
lightonphiri

9

Probleme:

1: Das Ergebnis von UnionSpatialPolygons ist ein räumliches Polygon

2: Das Ergebnis wieder in einen räumlichen Polygondatenrahmen umzuwandeln, ist ein echtes Problem

-ein. Zum Anhängen an ein räumliches Polygon benötigen Sie einen sehr genauen Datenrahmen

-b. Daten, die Sie für UnionSpatialPolygons verwendet haben, enthalten mehr Zeilen als die Ausgabe und sind nicht in der erforderlichen Weise formatiert.

Meine (hässliche) Lösung:

### 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"));

Fehler in if (Länge (Sr @ Polygone)! = Nrow (Daten)) stop (Einfügen ("Nicht übereinstimmende Objektlänge: \ n",: Argument hat die Länge Null
Mox
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.