在未记录的时间戳处插值坐标

时间:2014-11-07 16:52:50

标签: r arcgis

我有一个gps单位,以相当随机的间隔记录坐标(有时每隔12秒,有时每隔12秒)。还有另一种仪器可以每秒测量颗粒物质。我正在寻找一种方法,根据现有坐标和运动速度,在每秒的非记录时间戳内插入坐标,这样我就可以将gps数据与颗粒物质数据集合并。为了使事情变得更容易,我可以假设两个连续坐标之间的路线是直线并且以恒定速度行进。所以我需要做的就是在两个坐标之间分配两个连续坐标之间的差值除以秒中的时间差。以下面的数据集为例,我可以在09:32:01分配X和Y到325695 +(325695-325695)/ 12和672878 +(672857-672878)/ 12。所以R中的任何函数都允许类似的计算。由于它似乎是GIS领域中非常常见的操作,也许在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  

欢迎任何建议和想法。

由于

1 个答案:

答案 0 :(得分:5)

由于您的数据是时间序列,因此最好使用na.approx(...)包中的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(...)函数。