【问题标题】:R SpatialPointsDataFrame to SpatialLinesDataFrameR SpatialPointsDataFrame 到 SpatialLinesDataFrame
【发布时间】:2014-08-19 22:02:45
【问题描述】:

我已将我的 Sports 手表中的一些 GPS 点导入 R:

library(plotKML)
route <-  readGPX("Move_Cycling.gpx")
str(route)

数据如下:

List of 5
 $ metadata : NULL
 $ bounds   : NULL
 $ waypoints: NULL
 $ tracks   :List of 1
  ..$ :List of 1
  .. ..$ Move:'data.frame': 677 obs. of  5 variables:
  .. .. ..$ lon       : num [1:677] -3.8 -3.8 -3.8 -3.8 -3.8 ...
  .. .. ..$ lat       : num [1:677] 52.1 52.1 52.1 52.1 52.1 ...
  .. .. ..$ ele       : chr [1:677] "152" "151" "153" "153" ...
  .. .. ..$ time      : chr [1:677] "2014-06-08T09:17:08.050Z" "2014-06-08T09:17:18.680Z" "2014-06-08T09:17:23.680Z" "2014-06-08T09:17:29.680Z" ...
  .. .. ..$ extensions: chr [1:677] "7627.7999992370605141521101800" "7427.6000003814697141511.7000000476837210180.8490009442642210" "9127.523.13003521531.7000000476837210181.799999952316280" "10027.534.96003841534.1999998092651410181.88300029210510" ...
 $ routes   : NULL

我已经设法将数据点转换为 SpatialPointsDataFrame 并在 Google 地球上绘制:

SPDF <- SpatialPointsDataFrame(coords=route$tracks[[1]]$Move[1:2], 
                               data=route$tracks[[1]]$Move[1:2],
                               proj4string = CRS("+init=epsg:4326"))

plotKML(SPDF)

我真正想要的是自行车道,即SpatialLinesDataFrame,但我不知道如何正确设置 ID 字段以匹配SpatialLines 对象与数据。

这是我已经走了多远:

tmp <- Line(coords=route$tracks[[1]]$Move[1:2])
tmp2 <- Lines(list(tmp), ID=c("coord"))
tmp3 <- SpatialLines(list(tmp2), proj4string = CRS("+init=epsg:4326"))

# result should be something like, 
# but the ID of tmp3 and data don't match at the moment

SPDF <- SpatialLinesDataFrame(tmp3, data)

【问题讨论】:

    标签: r spatial


    【解决方案1】:

    您可以使用rgdal 包中的readOGR 将 GPX 文件直接读取到 SpatialLinesDataFrame 对象中。 GPX 文件可以包含轨迹、航路点等,这些被 OGR 视为文件中的层。很简单:

    > track = readOGR("myfile.gpx","tracks")
    > plot(track)
    

    应该可以。您应该会看到线条。

    在你的最后一行中,你没有说你的data 是什么,但是如果你试图从一些 SpatialLines 和一个数据框构造一个 SpatialLinesDataFrame,它需要是一个每条轨道一行的数据框,并且你可以告诉它不要打扰匹配 ID,因为您实际上没有任何要合并的真实每轨数据。所以:

    > SPDF = SpatialLinesDataFrame(tmp3, data.frame(who="me"),match=FALSE)
    > plot(SPDF)
    

    但是,如果您使用readOGR,则无需经历所有这些。它还会从 GPX 文件中读取一些每轨元数据。

    骑自行车快乐!

    【讨论】:

    • 这太好了,谢谢。我仍然不确定要坚持到SpatialLinesDataFrame,我试图再次将相同的数据放入其中。
    【解决方案2】:

    作为更新,这是我的最终解决方案

    library(rgdal)
    library(plotKML)
    track <- readOGR("Move_Cycling.gpx","tracks")
    plotKML(track, colour='red', width=2, labels="Cwm Rhaeadr Trail")
    

    【讨论】:

      猜你喜欢
      • 2015-09-12
      • 2019-05-02
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 2017-10-04
      • 2014-03-12
      • 2013-01-19
      • 2015-11-20
      相关资源
      最近更新 更多