Comment créer un SpatialLinesDataFrame à partir d'une trame de données?

9

J'ai créé un data.frame dans R. Je veux obtenir SpatialLinesDataFrame en conséquence, donc je comprends que je dois convertir le data.frame en lignes, les lignes en SpatialLines et les SpatialLines en SpatialLinesDataFrame. j'ai fait ça

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

J'obtiens le data.frame que je veux mais pas les lignes. Je suis sûr que c'est basique mais pourquoi je ne peux pas obtenir les lignes?

gfl
la source
À quoi ressemble votre dataframe? Comment sont stockées les coordonnées? Avez-vous vérifié ?Lines? Les lignes ont besoin de deux paramètres en entréeLines(slinelist, ID)
Iris
Donc, chaque ligne a un point de départ et un point final. Vous avez raison sur les lignes, je l'ai fait: pour (i dans seq_along (lignes)) {lignes [[i]] <- lignes (liste (ligne (rbind (c (fichier $ x_f [i], fichier $ y_f [ i]), c (déposéf $ x_tr [i], déposéf $ y_tr [i])))), comme.caractère (i))}
gfl

Réponses:

11

Voici un exemple étendu de la vignette sp qui montre comment créer un «SpatialLinesDataFrame» à partir d'un objet «data.frame» ordinaire. J'utilise quelques exemples de données créées à partir des longueurs du single 'SpatialLines' via gLengthde rgeos . Notez que l' rownamesensemble de données créé transmis à SpatialLinesDataFramedoit être identique aux ID de ligne définis précédemment (dans ce cas particulier "a" et "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)

entrez la description de l'image ici

fdetsch
la source