Bagaimana cara membuat SpatialLinesDataFrame dari dataframe?

9

Saya telah membuat data.frame di R. Saya ingin mendapatkan SpatialLinesDataFrame sebagai hasilnya, jadi saya mengerti bahwa saya harus mengubah data.frame menjadi garis, garis menjadi SpatialLines dan SpatialLines menjadi SpatialLinesDataFrame. Saya melakukan ini

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

Saya mendapatkan data.frame yang saya inginkan tetapi tidak garis. Saya yakin dasar tetapi mengapa saya tidak bisa mendapatkan garis?

gfl
sumber
Bagaimana tampilan kerangka data Anda? Bagaimana koordinat disimpan? Apakah kamu memeriksa ?Lines? Baris membutuhkan dua parameter sebagai inputLines(slinelist, ID)
Iris
Jadi setiap baris memiliki titik awal dan akhir. Anda benar tentang Lines, saya melakukannya: for (i in seq_along (lines)) {lines [[i]] <- Lines (daftar (Baris (rbind (c (file $ x_f [i], file $ y_f [ i]), c (diajukan $ x_tr [i], diajukan $ $ y_tr [i])))), as.character (i))}
gfl

Jawaban:

11

Berikut adalah contoh lanjutan dari sketsa sp yang menunjukkan cara membuat 'SpatialLinesDataFrame' dari objek 'data.frame' biasa. Saya menggunakan beberapa data sampel yang dibuat dari panjang 'SpatialLines' tunggal melalui gLengthdari rgeos . Perhatikan bahwa rownamesset data yang dibuat yang diteruskan SpatialLinesDataFrameharus identik dengan ID garis yang didefinisikan sebelumnya (dalam kasus khusus ini "a" dan "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)

masukkan deskripsi gambar di sini

fdetsch
sumber