Downsample GPS track

I am working with GPS track files (list of X and Y coordinates). I have tracks with a high sampling rate and want to downsample the track for easier handling.

The obvious way would be to create a new list of points, and to keep only (for example) every 100th point of the track. The problem is that this could remove important extremes, such as curves.

Do you know algorithms, which allow to downsample the two dimensional array, while keeping the extremes (and dropping datapoints without much value, such as points which are in a straight line).

It would be great if there would be a solution in python, but I'm gratefule for all kind of help.

Thanks!

Topic sampling python

Category Data Science


Ramer–Douglas–Peucker algorithm sounds like what you are looking for!

https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm

This algorithm allows you to simplify a sampled path. Basically, given a maximum allowed error, it proceeds by evaluating if a sequence of samples can be represented well enough (wrt the error) with a straight line between the first and the last point: if all the points in-between them falls under the error, all of them can be removed, otherwise it tries again with a shorter sequence.

This means that, setting a reasonable error value, on a straight road it will go for strong downsampling, while on an hairpin turn it may even decide to not downsample at all.

It seems there is a ready-to-go implementation in python https://github.com/fhirschmann/rdp

Eventually, you may find this talk from EuroPython 2016, about "Handling GPS Data with Python" by F. Wilhelm (I learn about the algorithm from this)

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.