Come faccio a creare uno SpatialLinesDataFrame da un frame di dati?


9

Ho creato un data.frame in R. Voglio ottenere SpatialLinesDataFrame come risultato, quindi capisco che devo convertire data.frame in linee, le linee in SpatialLines e SpatialLines in SpatialLinesDataFrame. l'ho fatto

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

Ottengo il data.frame che voglio ma non le linee. Sono sicuro che è di base, ma perché non riesco a ottenere le linee?


Com'è il tuo dataframe? Come vengono memorizzate le coordinate? Hai controllato ?Lines? Le linee richiedono due parametri come inputLines(slinelist, ID)
Iris,

Quindi ogni riga ha punto iniziale e punto finale. Hai ragione riguardo alle Linee, l'ho fatto: for (i in seq_along (lines)) {lines [[i]] <- Lines (list (Line (rbind (c (file $ x_f [i], file $ y_f [ i]), c (filedf $ x_tr [i], filedf $ y_tr [i])))), as.character (i))}
gfl,

Risposte:


11

Ecco un esempio esteso dalla vignetta sp che mostra come creare un 'SpatialLinesDataFrame' da un normale oggetto 'data.frame'. Uso alcuni dati di esempio creati dalle lunghezze dei singoli 'SpatialLines' tramite gLengthda rgeos . Si noti che il rownamesset di dati creato trasmesso SpatialLinesDataFramedeve essere identico agli ID riga precedentemente definiti (in questo caso particolare "a" e "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)

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.