[GIS] Interpolating GPS track in Python

gpsinterpolationpython

I have a time series of lat/lon data with timestamps. The data is in ~5 seconds intervals. There are no jumps in the data, so I don't need to smooth it.

However, points can be slightly off due to inaccuracy. And as I know that the true path follows smooth patterns (model aircraft), I want to interpolate the data to get a better representation. It was straightforward to build bezier splines where I assume my recordings as knots, but then the path doesn't follow those points as it's not really an interpolation.

I had a look at SciPy's interpolate functions. However, the 1D functions don't work with lat/lon data due to the patterns in the data (e.g. flying in a circle causes duplicate recordings). I tried the multivariate data with time on the X axis and Y,Z as lat/lon. But the function assumes that Z=f(X,Y) which is not really correct and thus leads to wrong results. In my case it'd rather be Y,Z=f(X). And I'm not sure if I want to include time at all at this stage as I'd then also make assumptions about speed patterns.

Are there any built-in functions that can handle the data? Or other packages that I could have a look at?

Best Answer

In a past project (trail mapping) we had to use a multi-step process to make a series of curves in separate processing steps.

First we break the (time-series) point set everywhere we had a "breaking" maneuver, e.g. circling back upon itself, stationary points in succession, "impossible" jumps in distance, etc.

Next we used a simple bicubic spline (can't recall which one, from scipy) on each segment to smooth the trace. Then we would reduce point density if desired using Ramer-Douglas-Peuker.

The last step is to reassemble all the segments together.

Related Question