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 gLength
từ rgeos . Lưu ý rằng rownames
tập dữ liệu đã tạo được truyền vào SpatialLinesDataFrame
phả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)
?Lines
chưa? Các dòng cần hai tham số làm đầu vàoLines(slinelist, ID)