【问题标题】:R Convert GPS to GPX with timestampR将GPS转换为带有时间戳的GPX
【发布时间】:2018-12-06 14:48:14
【问题描述】:

这就是示例数据的样子

DEVICE_ID   LAT         LONGITUDE   DATE        TIME
150211559   12.920818   77.600197   02-01-17    0:00:00
150211559   12.914159   77.600037   02-01-17    0:01:39
150211559   12.919819   77.600189   02-01-17    0:00:10
150211559   12.919434   77.600174   02-01-17    0:00:20
150211559   12.918937   77.60009    02-01-17    0:00:29
150211559   12.914159   77.600037   02-01-17    0:01:49
150211559   12.918482   77.600136   02-01-17    0:00:39
150211559   12.917423   77.60009    02-01-17    0:00:49

我有多个设备和数百万个数据点 使用 gpsvisualizer 转换文件,所以我知道输出是什么样的

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <gpx version="1.1" creator="GPS Visualizer http://www.gpsvisualizer.com/" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"> <trk>   <name>test1</name> <trkseg>
    <trkpt lat="12.872757" lon="77.586197">
      <time>2017-02-01T00:00:01Z</time>
    </trkpt>
    <trkpt lat="12.872756" lon="77.586205">
      <time>2017-02-01T00:00:11Z</time>
    </trkpt>
    <trkpt lat="12.872757" lon="77.586212">
      <time>2017-02-01T00:00:21Z</time>
    </trkpt>    </trkseg>  </trk>  </gpx>

想知道是否有人可以帮助使用 writeOGR(或任何其他包)在 R 中做同样的事情,时间和日期包含在输出 gpx 文件中。谢谢。

【问题讨论】:

    标签: r gps gpx


    【解决方案1】:

    你真的需要一个外部包吗?

    dat <- read.table(header=TRUE, stringsAsFactors=FALSE, text='
    DEVICE_ID   LAT         LONGITUDE   DATE        TIME
    150211559   12.920818   77.600197   02-01-17    0:00:00
    150211559   12.914159   77.600037   02-01-17    0:01:39
    150211559   12.919819   77.600189   02-01-17    0:00:10
    150211559   12.919434   77.600174   02-01-17    0:00:20
    150211559   12.918937   77.60009    02-01-17    0:00:29
    150211559   12.914159   77.600037   02-01-17    0:01:49
    150211559   12.918482   77.600136   02-01-17    0:00:39
    150211559   12.917423   77.60009    02-01-17    0:00:49')
    
    pre <- '<?xml version="1.0" encoding="utf-8" standalone="yes"?> <gpx version="1.1" creator="GPS Visualizer http://www.gpsvisualizer.com/" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"> <trk>   <name>test1</name> <trkseg>'
    post <- '</trkseg>  </trk>  </gpx>'
    
    dat$dt <- format(as.POSIXct(paste(dat$DATE, dat$TIME), format="%m-%d-%y %H:%M:%S"),
                     format="%Y-%m-%dT%H:%M:%SZ", tz="UTC")
    
    cat(paste(
      c(pre,
        mapply(function(lat, lon, datetime) {
          sprintf('<trkpt lat="%f" lon="%f">
            <time>%s</time>
          </trkpt>', lat, lon, datetime)
        }, dat$LAT, dat$LONGITUDE, dat$dt),
        post, "\n"),
      collapse="\n"))
    # <?xml version="1.0" encoding="utf-8" standalone="yes"?> <gpx version="1.1" creator="GPS Visualizer http://www.gpsvisualizer.com/" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"> <trk>   <name>test1</name> <trkseg>
    # <trkpt lat="12.920818" lon="77.600197">
    #       <time>2017-02-01T08:00:00Z</time>
    #     </trkpt>
    # <trkpt lat="12.914159" lon="77.600037">
    #       <time>2017-02-01T08:01:39Z</time>
    #     </trkpt>
    # <trkpt lat="12.919819" lon="77.600189">
    #       <time>2017-02-01T08:00:10Z</time>
    #     </trkpt>
    # <trkpt lat="12.919434" lon="77.600174">
    #       <time>2017-02-01T08:00:20Z</time>
    #     </trkpt>
    # <trkpt lat="12.918937" lon="77.600090">
    #       <time>2017-02-01T08:00:29Z</time>
    #     </trkpt>
    # <trkpt lat="12.914159" lon="77.600037">
    #       <time>2017-02-01T08:01:49Z</time>
    #     </trkpt>
    # <trkpt lat="12.918482" lon="77.600136">
    #       <time>2017-02-01T08:00:39Z</time>
    #     </trkpt>
    # <trkpt lat="12.917423" lon="77.600090">
    #       <time>2017-02-01T08:00:49Z</time>
    #     </trkpt>
    # </trkseg>  </trk>  </gpx>
    

    (您可能应该保存到文件中,而不仅仅是cat(...),我只是想显示它。)

    【讨论】:

    • 非常感谢 r2evans。奇迹般有效。以同样的方式解决它。但是您的解决方案更有效。谢谢。
    • 这就像一个魅力!我将“cat”命令替换为“writeLines”以将其写入文件。
    • 很高兴它对你有用! (cat(..., file=) 也存在,如果您需要的话。)
    猜你喜欢
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 2019-10-07
    相关资源
    最近更新 更多