Jak utworzyć SpatialLinesDataFrame z ramki danych?

9

Utworzyłem ramkę danych w języku R. Chcę w rezultacie uzyskać SpatialLinesDataFrame, więc rozumiem, że muszę przekonwertować data.frame na linie, linie na SpatialLines, a SpatialLines na SpatialLinesDataFrame. ja to zrobiłem

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

Dostaję data.frame chcę, ale nie linie. Jestem pewien, że to podstawa, ale dlaczego nie mogę uzyskać linii?

gfl
źródło
Jak wygląda twoja ramka danych? Jak przechowywane są współrzędne? Sprawdziłeś ?Lines? Linie wymagają dwóch parametrów jako danych wejściowychLines(slinelist, ID)
Iris
Więc każda linia ma punkt początkowy i końcowy. Masz rację co do linii, zrobiłem to: for (i in seq_along (lines)) {lines [[i]] <- Lines (lista (Line (rbind (c (plik $ x_f [i], plik, $ $__ [[ i]), c (filedf $ x_tr [i], filedf $ y_tr [i])))), as.character (i))}
gfl

Odpowiedzi:

11

Oto rozszerzony przykład z winiety sp, który pokazuje, jak utworzyć „SpatialLinesDataFrame” ze zwykłego obiektu „data.frame”. Używam kilka przykładowych danych utworzonych z pojedynczych odcinków „” przez SpatialLines gLengthz rgeos . Zauważ, że rownamesutworzony przekazany zestaw danych SpatialLinesDataFramemusi być identyczny z wcześniej zdefiniowanymi identyfikatorami linii (w tym konkretnym przypadku „a” i „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)

wprowadź opis zdjęcia tutaj

fdetsch
źródło