Wie erstelle ich einen SpatialLinesDataFrame aus einem Datenrahmen?

9

Ich habe einen data.frame in R erstellt. Ich möchte SpatialLinesDataFrame als Ergebnis erhalten, damit ich verstehe, dass ich den data.frame in Zeilen, die Zeilen in SpatialLines und die SpatialLines in SpatialLinesDataFrame konvertieren muss. ich war das

filedata.frame=data.frame(matrix(file),ncol=14, byrow=T))
file=Lines(filedata.frame)

Ich bekomme den gewünschten data.frame, aber nicht die Zeilen. Ich bin sicher, ist einfach, aber warum kann ich die Zeilen nicht bekommen?

gfl
quelle
Wie sieht Ihr Datenrahmen aus? Wie werden die Koordinaten gespeichert? Hast du nachgesehen ?Lines? Linien benötigen zwei Parameter als EingabeLines(slinelist, ID)
Iris
Jede Linie hat also einen Anfangs- und einen Endpunkt. Sie haben Recht mit den Zeilen, ich habe es getan: für (i in seq_along (Zeilen)) {Zeilen [[i]] <- Zeilen (Liste (Zeile (rbind (c (Datei $ x_f [i], Datei $ y_f [)) i]), c (eingereicht von $ x_tr [i], eingereicht von $ y_tr [i]))), as.character (i))}
gfl

Antworten:

11

Hier ist ein erweitertes Beispiel aus der sp- Vignette , das zeigt, wie ein 'SpatialLinesDataFrame' aus einem normalen 'data.frame'-Objekt erstellt wird. Ich verwende einige Beispieldaten, die aus den Längen der einzelnen 'SpatialLines' über gLengthvon rgeos erstellt wurden . Beachten Sie, dass der rownamesdes erstellten Datensatzes, an den weitergegeben wird SpatialLinesDataFrame, mit den zuvor definierten Zeilen-IDs identisch sein muss (in diesem speziellen Fall "a" und "b").

library(sp)

## from the sp vignette:
l1 <- cbind(c(1, 2, 3), c(3, 2, 2))
l2 <- cbind(c(1, 2, 3), c(1, 1.5, 1))

Sl1 <- Line(l1)
Sl2 <- Line(l2)

S1 <- Lines(list(Sl1), ID = "a")
S2 <- Lines(list(Sl2), ID = "b")

Sl <- SpatialLines(list(S1, S2))

## sample data: line lengths
library(rgeos)
df <- data.frame(len = sapply(1:length(Sl), function(i) gLength(Sl[i, ])))
rownames(df) <- sapply(1:length(Sl), function(i) Sl@lines[[i]]@ID)


## SpatialLines to SpatialLinesDataFrame
Sldf <- SpatialLinesDataFrame(Sl, data = df)

plot(Sldf, col = c("red", "blue"))
text(labels = paste0("length = ", round(Sldf@data$len, 2)), 
     x = gCentroid(Sldf, byid = TRUE)$x,
     y = gCentroid(Sldf, byid = TRUE)$y)

Geben Sie hier die Bildbeschreibung ein

fdetsch
quelle