¿Cómo creo un SpatialLinesDataFrame a partir de un marco de datos?

9

He creado un data.frame en R. Como resultado, quiero obtener SpatialLinesDataFrame, por lo que entiendo que tengo que convertir data.frame en líneas, las líneas en SpatialLines y SpatialLines en SpatialLinesDataFrame. hice esto

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

Obtengo el data.frame que quiero pero no las líneas. Estoy seguro de que es básico, pero ¿por qué no puedo obtener las líneas?

gfl
fuente
¿Cómo se ve su marco de datos? ¿Cómo se almacenan las coordenadas? ¿Lo comprobaste ?Lines? Las líneas necesitan dos parámetros como entradaLines(slinelist, ID)
Iris
Entonces cada línea tiene un punto inicial y un punto final. Tienes razón sobre las líneas, lo hice: 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

Respuestas:

11

Aquí hay un ejemplo extendido de la viñeta sp que muestra cómo crear un 'SpatialLinesDataFrame' a partir de un objeto ordinario 'data.frame'. Utilizo algunos datos de muestra creados a partir de las longitudes de las 'SpatialLines' a través gLengthde rgeos . Tenga en cuenta que el rownamesconjunto de datos creado que se transfiere SpatialLinesDataFramedebe ser idéntico a los ID de línea definidos previamente (en este caso particular "a" y "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)

ingrese la descripción de la imagen aquí

fdetsch
fuente