-->

Interpolate coordinates at unrecorded timestamps

2020-06-06 02:42发布

问题:

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.

Thanks

回答1:

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

There is also an na.spline(...) function if you need continuous derivatives at the grid points.



标签: r arcgis