データフレームからSpatialLinesDataFrameを作成するにはどうすればよいですか?


9

Rでdata.frameを作成しました。結果としてSpatialLinesDataFrameを取得したいので、data.frameを行に、行をSpatialLinesに、SpatialLinesをSpatialLinesDataFrameに変換する必要があることを理解しています。これは私がしました

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

必要なdata.frameを取得しますが、行は取得しません。基本的なことは確かですが、なぜラインが取得できないのですか?


データフレームはどのように見えますか?座標はどのように保存されますか?確認しました?Linesか?ラインには入力として2つのパラメーターが必要Lines(slinelist, ID)
Iris

したがって、すべての線には開始点と終了点があります。あなたはラインについて正しい、私はそれをやった:for(i in seq_along(lines)){lines [[i]] <-Lines(list(Line(rbind(c(file $ x_f [i]、file $ y_f [ i])、c(filedf $ x_tr [i]、filedf $ y_tr [i]))))、as.character(i))}
gfl

回答:


11

以下は、通常の「data.frame」オブジェクトから「SpatialLinesDataFrame」を作成する方法を示すspビネットからの拡張例です。私は経由シングル「SpatialLines」の長さから作成されたいくつかのサンプルデータを使用してgLengthからrgeosを。にrownames渡される作成されたデータセットのはSpatialLinesDataFrame、以前に定義されたラインID(この特定のケースでは「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)

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.