GPXEditor
JavaFX GPX Editor that support UI and batch mass modifications
Install / Use
/learn @ThomasDaheim/GPXEditorREADME
GPXEditor
JavaFX editor for gpx files
And why would anyone need a new gpx file editor?
Unfortunately, my old working horse GPS-Track-Analyse.NET isn't maintained and updated anymore. While its still doing all its things perfectly it lacks three features:
- batch mode to work on multiple files
- UI mode to work on multiple tracks / tracksegments
- standard fix for annoying Garmin Montana 600 "feature" to start with first point of current.gpx when switched on again (and not with LAST point)
So it was time to start a new self-learning project. And here you see the result.
Notes
-
Note on JavaFX20+: I have made GPXEditor run successfully with all JavaFX Version up to 23.
-
Note on JavaFX19: The bug from JavaFX17 seems to be fixed. Also, significant performance improvements have been added.
-
Note on JavaFX17: In JavaFX17 a bug was introduced (see https://stackoverflow.com/a/70300669) that leads to "hanging" of leaflet map after some mouse movements; works as Java 17 with JavaFX 15
-
Note on JavaFX14: Due to bug fixes in JavaFX 14 the speed of the application has increased without any doing from my end :-)
-
Note on Java 11: There is a version of controlsfx for Java9 and later. Together with various tweaks to build.gradle this now also runs under Java 11. See e.g. https://github.com/kelemen/netbeans-gradle-project/issues/403 an some of the discussion that where required to get there...
-
Note on Java 10: This code itself requires only small changes in TooltipHelper to run under Java 10. However, on of the controlsfx I'm using (RangeSlider) doesn't work with Java 10 out of the box. So for now its Java 8. Until either controlsfx gets fixed or I manage to find a replacement for RangeSlider...
-
Note on running GPXEditor: Analogous to the --add-modules and --add-exports in build.gradle you also need the same set of commands when trying to run GPXEditor. To show how this should look like please see GPXEditor.bat.
-
Note on height data files: There are a number of data files with height data available that can be used. GPXEditor can read SRTM files (*.hgt) for both 3 and 1 arsec resolution. A comparison of available datasets can be found under https://www.gpsvisualizer.com/elevation with links to download the required files.
-
Note on "Stationaries": v4.6 includes my first attempt to include such an algorithm. Its based on the numbers of "neighbours" each waypoint has in a given radius. A Stationary is then defined as a cluster of points with a given number of neighbours (set via preferences) in a given radius (set via preferences) spanning a given duration (set via preferences).
Following features are available via UI:
Update v5.9
- Added slope chart: Similar to height chart but coloring is done based on slope of track/route. This takes some time to create, even after various speed improvements. If things get to slow: there is a preference to disable the slope chart.
- Coloring of height charts now working once again.
- Create route from selected waypoints.
- Bugfixes and dependency updates.
- Added test class TestSunPathForYear. Outputs a csv with sunrise/sunset dates for a year for a given lat/lon location. The csv contains the astronomical sunrise/sunset dates and the "real" ones, when the sun is above the local horizon.
- Added example images for different reduction algos as test resources. Thanks to https://github.com/emcconville/point-reduction-algorithms for the effort of doing the comparison! Long story short: Douglas–Peucker is the best algo, no need to implement further ones.
Update v5.8
- Create route from list of selected waypoints
- Interpolate dates of waypoints from neighbouring values
- Timezones: Show/hide timezones on map
- Offline maps: Not really a code change... Use e.g. Mobile Atlas Creator to download tiles, setup a minimal webserver (e.g. with python), add a new baselayer and voila!
- Drag&Drop: You can now drop a gpx-file on the map as well
- Performance: Updates to handle (select / delete) large number of waypoints. Main impact: use JavaFX 19 :-)
- Upgrade Leaflet to 1.9.4
- Various improvements and bugfixes
Update v5.7
- SunPath: show the suns path for today / summer / winter on the HorizonViewer; show the "actual" sunrise & sunset times, taking horizon into account
- SunPath: show direction and point of sunrise & sunset on the map
- TimeZone: added timezone support where necessary (SunPath calculations, TimeZone overlay)
- Performance: drastically improve speed of reading SRTM data and showing it
- Performance: change horizon viewer to use canvas from hansolo charts
- Updated dependencies
- Bugfixes! Various bugs that have crept in over time are now fixed
Update v5.6
- Images on Maps! Images can be shown on maps as camera iconcs. JSON files with image info are used similar to hgt files for heigt info. MakeImageJSON.java gives an implementation that can create such JSON files using exiftool.
- Horizon Viewer: have a look at the horizon for any point on the map
- Export KMZ as well, extended KML/KMZ export to contain "hidden" gpx data (metadata, tracksegment, waypoint), import KML & KMZ including optional "hidden" data
- Smoothing of tracks using either Hampel or Savitzky-Golay or Double Exponential smoothing
- Matching of tracks to streets/paths using Mapbox matching service
- replaced SRTM height viewer with fxyz3d implementation (previously jzy3d)
- Bugfixes! Various bugs that have crept in over time are now fixed
- Performance: Wherever something was slow, I tried to speed up things
Update v5.5
- moving of selected track waypoints
- Bugfixes! Various bugs that have crept in over time are now fixed
Update v5.4
- download SRTM data from within GPXEditor
- support OpenElevationService as add. elevation provider besides local SRTM files
- show waypoint names in map
- google search (for coordinates or waypoint names) from within map
- start / end symbol of tracks can be switched on/off in preferences
- various performance improvements
- various bugfix
Update v5.3
- show gpx file if passed as parameter
- Switch to JMetro theme
Update v5.2
- added option to playback tracks / segments with date values
- some more functions that can be undone
- fixes around gpx xmnls headers and others
- support for "line" extension for tracks & routes (read & use color / width / opacity / linecap attributes)
- linestyle editor for all attributes (except linecap for now)
- support for openroutingservice V2
Update v5.1
- added GPXEditor.bat to show usage of --add-modules and --add-exports
- switch from de.saring:leafletmap to java implementation (based on kotlin code from de.saring)
- preferences for basemaps and overlays: name, url, sort order, enabled/disable
- add /delete new layers
- added splashscreen to make long startup bearable :-)
Update v5.0 - NoRestForTheWicked
- preferences for heatmap
- app clipboard to unify copy & paste and drag & drop
- support for do/undo
- performance improvements
- icon groups as in Garmin BaseCamp
- add. map layers and overlays
- statusbar that shows info on selected waypoints, copy & paste, do & undo
Update v4.6
Corona-Time...
- added a heat map using JavaFX; leaflet heatmaps are not working with JavaFX11, seem to work with JavaFX14 so waiting for the next LTR...
- added a StatusBar that shows summary info on currently selected waypoints
- introduced tasks for longe running achtions to un-freeze UI (ongoing, will add more in the feature)
- general ability to replace selected waypoints by their weighted center (the one closest to average lat/lon of the selected waypoints)
- added algorithm to find "Stationaries" iun tracks: places without "real" movement but only jumping of coordinates due to GPS accuracy; can be found or replaced by weighted center of the cluster
- various performance improvements in UI (reduce number of layoutPlotChildren() calls) and algorithms (speed up Haversine and Visvalingam-Whyatt)
- test cases for Algorithms
Update v4.5
I had some spare time on my hands...
- select multiple items from same gpx file, will all be shown on map
- split items by distance or time between waypoints
- get height for coordinate
- show item ID and waypoint names in height chart; layout as preferences
- added more layers to leaflet
- export map to png
- a lot of refactoring & bug fixes under the hood...
Update v4.4
- add/delete of metadata segment via context menu
- usage of JavaHelper repo, no changes to functionality
Update v4.3
- show track/route colors in table and height chart
- show speeds together with hight chart
- performance: include various profiling improvements
Update v4.2
- edit waypoint from leaflet context menu
- preference to auto-assign height for new / changed items
Update v4.1
- link to help pages in github
- expand / collapse all option in treeview
- save last used baselayer and overlay settings per baselayer as preference for the next time
- make selected waypoints of tracks draggable
- fixed some anyoing issues (e.g. incorrect zooming for files with many tracks)
Update v4.0
A lot of stuff from my bugs & features list!
- pimped AboutMenu to show build information from MANIFEST.MF
- show mouse & center position on map, button to re-center map
- select waypoints in height chart via mouse drag
- set max number of waypoints shown via preferences
- set search radius via preferences
- add labels for cities, streets and contour lines in Satellite & MapBox map where missing
- identify & show breaks in statistics
- upgrade SRTM viewer with ability to zoom, shift, rotate & show track colors
- select colors for tracks & routes and store in Garmin gpx extension
- export colors of tracks & routes in KML
- CSV export
- save tableview settings: column order, width, visibility, sorting
- menu to delete date, name, extension information of selected waypoints
- inverse and save autorouting explicitly
- added support for OpenCycleMap api key
- option to f
