r - R将GPS转换为带有时间戳的GPX
问题描述
这是示例数据的样子
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 文件中。谢谢你。
解决方案
你真的需要一个外部包吗?
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(...)
,我只是想显示它。)
推荐阅读
- vue.js - 组件未正确注册,无法编译新文件
- powerbi - PowerBI - 在与时间无关的数据列上运行总计
- distributed-computing - 多级服务树与有向无环图
- c# - SharePoint Online 中的远程身份验证在 adfs c# 中使用客户端对象模型
- vba - 将表导出为 csv 更改文件扩展名
- macos - NPM 损坏类型错误:无法读取未定义的属性“已加载”
- javascript - 为什么我的 json 数据没有使用 javascript 以正确的顺序加载?
- svelte - 如何在 svelte 中使用自定义存储方法?
- sas - 多响应变量的 Sgplot
- angular - 失败:模板解析错误:无法绑定到“routerLink”,因为它不是“a”的已知属性。("s="navbar-nav" >