2017-10-23 12 views
0

Ich suche nach einer Möglichkeit, einen SpatialPolygonsDataFrame aus einer Liste von SpatialPolygons zu erstellen?R - SpatialPolygonsDataFrame aus einer Liste von SpatialPolygons

Im Folgenden finden Sie ein Beispiel für eine Liste von Polygonen, aus der ein SpatialPolygonsDataFrame erstellt werden soll, der alle Polygone der Liste enthält.

EDIT: Der SpatialPolygonsDataFrame muss aus der Liste der SpatialPolygons erstellt werden! Da meine Originaldaten nicht SpatialPolygons als separate Werte enthalten, sondern die Liste von SpatialPolygons. Die Art, wie ich diese Liste erhalten habe, unterscheidet sich von der im Beispiel. Ich habe das Beispiel gepostet, um die Datenstruktur der Liste anzuzeigen.

Beispiel einer Liste von SpatialPolygons von https://stat.ethz.ch/pipermail/r-sig-geo/2013-January/017225.html genommen:

library(sp) 
grd <- GridTopology(c(0.5, 0.5), c(1, 1), c(6, 6)) 
Spol <- as(grd, "SpatialPolygons") 
list_of_SPolsu <- lapply(slot(Spol, "polygons"), function(x) 
    SpatialPolygons(list(x))) 
list_of_SPols <- lapply(slot(Spol, "polygons"), function(x) { 
    Pol <- x 
    slot(Pol, "ID") <- "1" 
    SpatialPolygons(list(Pol)) 
}) 

Grüße!

+1

Ihr Link enthält bereits Informationen darüber, wie Sie die Liste in einem SpatialPolygon kombinieren können. Danach tun Sie 'as (mySpatialPolygon," SpatialPolygonsDataFrame "), und Sie haben einen SpatialPolygonsDataFrame. – lukeA

+0

Leider sind meine Daten etwas anders als im Beispiel. Ich habe keine separaten SpatialPolygons, sondern nur eine Liste von Spatial Polygons. Ich werde meine Frage bearbeiten, um sie klarer zu machen. –

Antwort

1

Es ist ganz einfach ...

Try this:

#Creating a dataframe with Spol IDs 
Spol_df<- as.data.frame(sapply(slot(Spol, "polygons"), function(x) slot(x, "ID"))) 

#Making the IDs row names 
row.names(Spol_df) <- sapply(slot(Spol, "polygons"), function(x) slot(x, "ID")) 

# Making the spatial polygon data frame 
Spol_SPDF <- SpatialPolygonsDataFrame(Spol, data =Spol_df) 

Lassen Sie mich wissen, ob es

arbeitete

Edit:

einfach die Antwort vollständig machen Bearbeiten nach in der Frage ... Die Lösung zum Erstellen eines SpatialPolygon aus einer Liste von Polygonen stammt aus dem bereitgestellten Link:

#Getting polygon IDs 
IDs <- sapply(list_of_SPols, function(x) 
    slot(slot(x, "polygons")[[1]], "ID")) 

#Checking 
length(unique(IDs)) == length(list_of_SPols) 

#Making SpatialPolygons from list of polygons 
Spol <- SpatialPolygons(lapply(list_of_SPols, 
           function(x) slot(x, "polygons")[[1]])) 
+0

Ihr Weg funktioniert, aber leider ist die Art, wie ich die Liste von SpatialPolygons erhielt, anders als im Beispiel. Ich habe das Beispiel gepostet, um meine Datenstruktur zu zeigen. Meine Daten enthalten die SpatialPolygons nicht als separate Werte. Daher muss ich den SpatialPolygonsDataFrame aus der Liste erstellen, die die SpatialPolygons enthält. –

+0

Ich kann nicht verstehen ... der Link, den Sie zur Verfügung gestellt haben, hat bereits Informationen darüber, wie man eine Liste von Polygonen in ein formales Klassenobjekt für räumliche Polygone umwandelt ... Und ich habe Ihnen gerade gesagt, wie man einen Spatial Polygons Data Frame erstellt Räumliche Polygone ... Wonach suchen Sie noch? Sie müssen nur die Namen ändern, die ich verwendet habe, als Sie Ihre SpatialPolygons aus der Liste erstellt haben ... (Entfernen Sie Spol aus den 3 Codezeilen, die ich Ihnen gegeben habe ... setzen Sie stattdessen den Namen Ihres Objekts). Ich habs? – Thai

+0

:) sry, du hast vollkommen recht! –

Verwandte Themen