What's new with GpsPrune

GpsPrune is available to download from the downloads page, with the latest released version being version 25. This page describes some of the features which are new with this version.

For information about the forthcoming version, see the development page.

Version 25

Weather forecasts

This was a misunderstanding on my part — I understood that the two openweathermap services which GpsPrune uses for the forecasts would be discontinued in June 2024 so I thought that we need to either replace or remove the functionality. But it turns out after contacting the operators that those two will actually continue to work, so the removal of this function can be reverted :)

New features

Colour selection

Some improvements in the colour selection have been implemented, as can be seen on this preliminary screenshot. There are a few things going on here, most obviously the colour selection popup on the right.

With this, you now have three tabs to choose your colour in different ways, instead of the previous single set of three RGB sliders. This might be useful if, for example, you want to choose two colours with the same hue, or two colours differing only by hue. Previously that wasn't so easy given only the opportunity to select the red, green and blue components.

Secondly, there's a new "Preview" bar at the bottom of the "Set colours" dialog. This shows the colours used by the selected colourer, and works for both the discrete colourers (like colouring by segment) and as shown here for the continuous colourers like altitude or speed. Obviously as you change the colourer type, or the start or end colours, or the maximum number of discrete colours, then this preview bar updates dynamically to show the effects.

And lastly there's a new pair of radio buttons controlling the "Hue interpolation". The name is a little awkward, but there are basically just two choices when interpolating between the start hue and the end hue. I've called them "Narrow" and "Wide" here but that might change if anyone can come up with more descriptive names!

Previously the colour interpolation was conceptually based on a linear scale, through the rainbow from red to violet. So if I chose to go from a kind of purple to a yellowy-green as shown here, then it would go through indigo, blue and green to get there. This is the "long way" round the colour circle, but you could also choose to go the "short way" round the circle instead, going from violet to red, orange and yellow.

So the same colour gradients are still possible with the expanded dialog, but now there are more options too. It gives more control over the hues used along the range, and hopefully makes it easier to more clearly visualise the data values.

Gpx extensions

Gpx is a very flexible data format for our coordinate data, but most of this flexibility comes from a variety of non-standard extensions. And the handling of extensions is different depending on whether the file is Gpx version 1.0 or version 1.1.

GpsPrune has a limited and non-perfect understanding of these extensions, which is particularly apparent when it comes to representations of heart rate, course, speed, and geocache details. GpsPrune tries to overcome this limited understanding by copying the source xml (if it can), thereby usually preserving the Gpx 1.0/1.1 information and the extension tags, but there are cases where this breaks down — particularly when files with different specifications are combined (for example a 1.0 file and a 1.1 file together, or files using different extensions), or when new fields are added to a point which already has extensions.

One consequence of this is that the export dialog will have to be made a little bit more complex by allowing the user to choose between Gpx 1.0 and 1.1. Most users of course don't know or care about this, and GpsPrune's current approach of exporting as it was loaded (or 1.0 by default) works for most situations. But to handle the extensions properly, we need to more strictly control the versions.

Once this is there, it immediately raises the possibility of loading a 1.0 file and exporting as 1.1, so we need to define what happens if points have speeds — these are valid in 1.0 but not valid in standard 1.1. Do the speeds get silently removed, is a warning shown, or can an extension be selected?

If a point does use extensions (either using Gpx 1.0 or 1.1), these will need to be translated if the export version isn't the same as the loaded version. Plus, if a file using extension X is loaded together with another using extension Y, how are these exported? Are both extensions used, or should the user have to choose one? Should the user have to choose whether to convert the heart rate values from extension Y into the right structure for extension X or vice versa? Mixing extensions makes things complicated.

This means that the checkbox "Copy source xml" could be removed though, as the xml will in future always be regenerated and never copied, and also internally we can get rid of the GpxCacherList and the GpxSlicer too.

Also, as noted in one of the github issues, this also affects Kml 2.1, 2.2 and 2.3, along with the gx extensions and any other arbitrary extensions. So the kml/kmz export also needs to now provide the option to choose the output format and extensions.

Range projection

A smaller little addition, this works like point project except it projects each of the points in the current range. So for example you can select a part of the track which (for some reason) is a bit too far south, and project that range to the north by a given distance. Then you can choose whether to shift the existing points, or to create copies of the points (like the project point feature does).

Interpolating timestamps

We've already got interpolating points, and since 24.3 also the timestamps are interpolated too. But what if you don't want to create any new points, you just want to assign timestamps to the points which are lacking them, using their neighbour points?

Another new function to the rescue — just select the whole segment, select to interpolate the timestamps, and GpsPrune will now look for points without timestamps, and for those which are between timestamped points it will calculate the distances and "fill in" the timestamps assuming a constant speed.

So that's a new way of faking timestamps, you can just set the timestamp of the first and last points in a segment and call the function. Obviously it only interpolates within track segments, and ignores waypoints.

Segment comparison

This one is for the sporty ones amongst us who record the same route multiple times. The idea is, you collect tracks when you do the same route multiple times — these could be jogging, running, walking, cycling, roller blading or whatever. Now you want to see whether you're improving, whether you're faster or slower than previous times you've done the same route.

This new function works on a pair of segments, so probably loaded from two separate files but they don't have to be. Firstly you choose the two segments, which hopefully match more or less, and the earlier one becomes the "reference" segment. The second segment might start earlier or later, might diverge a little here or there, maybe takes detours or stops for rests, but hopefully GpsPrune can find lots of places where the position of the reference segment can be matched against the second one.

Now for each of those matches, GpsPrune can calculate the distance along the reference segment, and the two durations (since the first match, on both segments). So imagine that the reference segment makes a "ghost driver", and along the route the second segment is either ahead of the ghost or behind the ghost, by a varying number of seconds. This can then make a useful chart of where you're pulling ahead of the ghost and when it's catching you up.

GpsPrune can also do a similar thing to calculate the position of the second racer at the time corresponding to the ghost's position - so in that way calculating what distance ahead of the ghost or behind the ghost the second segment is.

These two graphs share some features - for example it's easy to see when the ghost stops for a rest and the second racer doesn't, because the second racer immediately gets a sudden time and distance advantage. Similarly when the second racer later stops for a rest, the ghost immediately catches up. But the varying speeds of the two segments change the shape of the distance graph, so for example if the racer is a fixed time ahead of the ghost going up a hill, both graphs will be fairly flat, but when one of the racers gets to the top of the hill and speeds up, the distance advantage will start increasing, until the second racer gets to the faster stretch too.

Currently GpsPrune is outputting the numbers so that they can be pasted into a spreadsheet for visualisation, or you can call Gnuplot to generate charts as well.

Geocache codes

A small addition — for those who store the coordinates of geocaches using the geocache code as the waypoint name, there's now the option to open the information page from the "Online" menu. Just select the point, click the menu item and the webpage will open in your browser. This works for geocaches at geocaching.com (where the code prefix is GC) and for geocaches at opencaching.de (where the code prefix is OC). This can be useful if you've copy-pasted the coordinates from the Coordinator, for example, which by default uses the cache code for the name.

Removals

Unfortunately the Japanese and Korean languages haven't been updated for many years, and their completion states have fallen below 60%. Therefore, although you could still use those languages using a separate language file, they're no longer included by default in the jar and no longer appear in the language selection dropdown.

Of course, the user guide has also been updated, and has expanded up to 200 pages. All the functions mentioned here are described in detail in the user guide, including screenshots and explanations.

Forthcoming versions

See the development page for details on what's coming with future versions.

Screenshots // How-tos // How-tos (français) // How-tos (deutsch) // How-tos (español) // User guide // Demo videos // Problem-solving // Configuration // Download // Dependencies // What's new // Development // Wishlist // History // Old Screenshots // Internet Fame // User survey // Dev stats