Simplifying GPS data to plot polylines
Its use of the Google Maps API is pretty simpleminded (it just centers on the begin point at a fixed zoom level), as is its parsing of the GPX file (it assumes there’s only one track in it and there’s no error checking).
I hurried past those bits so I could see if my idea worked on a skate GPS track. It seems to. It reduced my 225 point sample track to 28 points and looks roughly right when I zoom into gmaps. One could adjust EPISILON for more or less simplifcation. A more sophisticated script could use a more clever mechanism for fitting a path onto the GPS points and then use the minimal number of points to plot the track. My mechansim assumes you want to preserve speed data with the points (though it doesn’t actually use it for anything) — in case you want to show something when there’s a big change in velocity.
A Span has a begin, end, and a time. A Span can be extended to a new end point iff the new endpoint is close (as defined by EPISILON) to where the extrapolated location would be from the old end point + the velocity implied by the Span would be.
Here’s the map. It’s a bit rough in spots, but so is the GPS plot. An EVEN MORE sophisticated version of this could know where the roads/trails are and fix the track accordingly.
Here’s the script: gpx2polyline.py
The script requires numpy (rather gratutiously, but it was convenient) and takes the name of a GPX file as its first argument. It writes to stdout and is almost certainly not useful as anything more than an idea.
Edit: The idea for this kind of “compression” of GPS plots was taken from the virtual GPS units that Ben implemented on Waterpoint, which record tracks for movement on the simulated ocean but use the same mechanism for reducing the number of track points stored.