Как создать SpatialLinesDataFrame из кадра данных?

9

Я создал data.frame в R. В результате я хочу получить SpatialLinesDataFrame, поэтому я понимаю, что мне нужно преобразовать data.frame в строки, строки в SpatialLines и SpatialLines в SpatialLinesDataFrame. я сделал это

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

Я получаю data.frame, который я хочу, но не строки. Я уверен, что это основной, но почему я не могу получить линии?

GFL
источник
Как выглядит ваш фрейм данных? Как хранятся координаты? Вы проверяли ?Lines? Линии нуждаются в двух параметрахLines(slinelist, ID)
Iris
Таким образом, каждая строка имеет начальную и конечную точки. Вы правы насчет строк, я сделал это: for (i в seq_along (lines)) {lines [[i]] <- Lines (список (Line (rbind (c (файл $ x_f [i], файл $ y_f []) i]), c (filedf $ x_tr [i], filedf $ y_tr [i])))), as.character (i))}
gfl

Ответы:

11

Вот расширенный пример из виньетки sp, который демонстрирует, как создать SpatialLinesDataFrame из обычного объекта data.frame. Я использую некоторые примерные данные, созданные из длин единственной 'SpatialLines' gLengthиз rgeos . Обратите внимание, что rownamesпередаваемый набор созданного набора данных SpatialLinesDataFrameдолжен быть идентичен ранее определенным идентификаторам строк (в данном конкретном случае «a» и «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)

введите описание изображения здесь

fdetsch
источник