问题描述
我有一个 gps 装置,它以相当随机的间隔(有时每 12 秒一次,有时每 6 秒一次)记录坐标.还有另一种仪器可以每秒测量颗粒物.我正在寻找一种方法,根据现有坐标和移动速度,在每秒未记录的时间戳处插入坐标,以便我可以将 GPS 数据与颗粒物数据集合并.为了让事情更容易一些,我可以假设两个连续坐标之间的路线是直线并且以恒定速度行进.所以我需要做的就是分配两个坐标之间的每一秒,记录的两个连续坐标之间的差异除以秒的时间差异.以下面的数据集为例,我可以将 09:32:01 处的 X 和 Y 分配给 325695 + (325695-325695)/12 和 672878 + (672857-672878)/12.那么 R 中是否有任何允许类似计算的函数.既然在GIS领域这似乎是一个很常见的操作,也许ArcGIS中有专门为此设计的工具?
I have a gps units that records coordinates at rather random intervals (sometimes every 12 sec sometimes every 6 sec). There's another instrument that measures particulate matter at every second. I'm looking for a way to interpolate the coordinates at unrecorded timestamps for every second based on the existing coordinates and the speed of the movement, so that I can merge the gps data with the particulate matter dataset. To make things a bit easier, I can assume that the route between two consecutive coordinates is straight line and is travelled at a constant speed. So all I need to do is to assign every second in-between two coordinates with the difference between two consecutive coordinates recorded divided by the difference in time in second. Taking the dataset below for example, I can assign X and Y at 09:32:01 to 325695 + (325695-325695)/12 and 672878 + (672857-672878)/12. So is there any function in R that allows similar calculation. Since it seems to be a quite common operation in the GIS area, maybe there's a specific tool designed for this in ArcGIS?
date time X Y
04/06/2014 09:32:00 325695 672878
04/06/2014 09:32:12 325695 672857
04/06/2014 09:32:24 325694 672845
04/06/2014 09:32:36 325690 672825
04/06/2014 09:32:48 325685 672803
04/06/2014 09:33:00 325685 672783
欢迎提出任何建议和想法.
Any suggestions and thoughts are welcome.
谢谢
推荐答案
由于您的数据是时间序列,因此最好使用 na.approx(...)
包中的 >动物园
.
Since your data is a time series, you're better off using na.approx(...)
in package zoo
.
df$date.time <- with(df,as.POSIXct(paste(date,time),format="%m/%d/%Y %H:%M:%S"))
full.time <- with(df,seq(date.time[1],tail(date.time,1),by=1))
library(zoo)
df.zoo <- zoo(df[,3:4],df$date.time) # convert to zoo object
result <- na.approx(df.zoo,xout=full.time) # interpolate; result is also a zoo object
head(result)
X Y
2014-04-06 09:32:00 325695 672878.0
2014-04-06 09:32:01 325695 672876.2
2014-04-06 09:32:02 325695 672874.5
2014-04-06 09:32:03 325695 672872.8
2014-04-06 09:32:04 325695 672871.0
2014-04-06 09:32:05 325695 672869.2
如果您需要在网格点处连续导数,还有一个 na.spline(...)
函数.
There is also an na.spline(...)
function if you need continuous derivatives at the grid points.
这篇关于在未记录的时间戳处插入坐标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!