Làm cách nào để tạo SpatialLinesDataFrame từ khung dữ liệu?


9

Tôi đã tạo một data.frame trong R. Tôi muốn có được SpatialLinesDataFrame như một kết quả để tôi hiểu rằng tôi phải chuyển đổi data.frame thành các dòng, các dòng thành SpatialLines và SpatialLines thành SpatialLinesDataFrame. Tôi đã làm điều này

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

Tôi nhận được data.frame tôi muốn nhưng không phải là dòng. Tôi chắc chắn là cơ bản nhưng tại sao tôi không thể có được các dòng?


Khung dữ liệu của bạn trông như thế nào? Các tọa độ được lưu trữ như thế nào? Bạn đã kiểm tra ?Lineschưa? Các dòng cần hai tham số làm đầu vàoLines(slinelist, ID)
Iris

Vì vậy, mỗi dòng có điểm bắt đầu và điểm cuối cùng. Bạn nói đúng về Dòng, tôi đã làm điều đó: for (i in seq_along (lines)) {lines [[i]] <- Lines (list (Line (rbind (c (file $ x_f [i], file $ y_f [ i]), c (tệpf $ x_tr [i], tệpf $ y_tr [i])))), as.character (i))}
gfl

Câu trả lời:


11

Dưới đây là một ví dụ mở rộng từ họa tiết sp minh họa cách tạo 'SpatialLinesDataFrame' từ một đối tượng 'data.frame' thông thường. Tôi sử dụng một số dữ liệu mẫu được tạo từ độ dài của 'SpatialLines' thông qua gLengthtừ rgeos . Lưu ý rằng rownamestập dữ liệu đã tạo được truyền vào SpatialLinesDataFramephải giống hệt với ID dòng được xác định trước đó (trong trường hợp cụ thể này là "a" và "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)

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.