【问题标题】:Interpolate coordinates at unrecorded timestamps在未记录的时间戳处插入坐标
【发布时间】:2015-01-04 12:48:42
【问题描述】:

我有一个 GPS 装置,它以相当随机的时间间隔记录坐标(有时每 12 秒,有时每 6 秒)。还有另一种仪器可以每秒测量颗粒物。我正在寻找一种方法来根据现有坐标和移动速度在每秒未记录的时间戳处插入坐标,以便我可以将 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  

欢迎提出任何建议和想法。

谢谢

【问题讨论】:

  • 看看approxapproxfun。两者都会在点之间进行线性插值。

标签: r arcgis


【解决方案1】:

由于您的数据是时间序列,因此您最好在包 zoo 中使用 na.approx(...)

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(...) 函数。

【讨论】:

猜你喜欢
  • 2018-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多