Como crio um SpatialLinesDataFrame a partir de um dataframe?

9

Eu criei um data.frame no R. Quero obter SpatialLinesDataFrame como resultado, para que eu entenda que preciso converter o data.frame em linhas, as linhas em SpatialLines e as SpatialLines em SpatialLinesDataFrame. eu fiz isso

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

Eu recebo o data.frame que eu quero, mas não as linhas. Tenho certeza de que é básico, mas por que não consigo entender as linhas?

gfl
fonte
Como é o seu quadro de dados? Como as coordenadas são armazenadas? Você checou ?Lines? Linhas precisam de dois parâmetros como entradaLines(slinelist, ID)
Iris
Portanto, toda linha tem ponto inicial e final. Você está certo sobre as Linhas, eu fiz isso: para (i em seq_along (linhas)) {linhas [[i]] <- Linhas (lista (Linha (rbind (c (arquivo $ x_f [i], arquivo $ y_f [ i]), c (arquivado $ x_tr [i], arquivado $ $_tr [i])))), como caractere (i))}
gfl

Respostas:

11

Aqui está um exemplo estendido da vinheta sp que demonstra como criar um 'SpatialLinesDataFrame' a partir de um objeto comum 'data.frame'. I usar alguns dados da amostra criada a partir dos comprimentos das '' SpatialLines individuais através gLengthde rgeos . Observe que o rownamesconjunto de dados criado transmitido SpatialLinesDataFramedeve ser idêntico aos IDs de linha definidos anteriormente (nesse caso específico "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)

insira a descrição da imagem aqui

fdetsch
fonte