1111import org .openstreetmap .josm .data .Bounds ;
1212import org .openstreetmap .josm .data .DataSource ;
1313import org .openstreetmap .josm .data .gpx .GpxData ;
14+ import org .openstreetmap .josm .data .gpx .IGpxTrack ;
1415import org .openstreetmap .josm .data .notes .Note ;
1516import org .openstreetmap .josm .data .osm .DataSet ;
1617import org .openstreetmap .josm .gui .progress .ProgressMonitor ;
18+ import org .openstreetmap .josm .spi .preferences .Config ;
1719import org .openstreetmap .josm .tools .CheckParameterUtil ;
1820import org .openstreetmap .josm .tools .JosmRuntimeException ;
1921import org .openstreetmap .josm .tools .Logging ;
22+ import org .openstreetmap .josm .tools .Utils ;
2023import org .xml .sax .SAXException ;
2124
2225/**
@@ -51,7 +54,7 @@ private GpxData downloadRawGps(Bounds b, ProgressMonitor progressMonitor) throws
5154 boolean done = false ;
5255 GpxData result = null ;
5356 final int pointsPerPage = 5000 ; // see https://wiki.openstreetmap.org/wiki/API_v0.6#GPS_traces
54- String url = "trackpoints?bbox=" +b .getMinLon ()+',' +b .getMinLat ()+',' +b .getMaxLon ()+',' +b .getMaxLat ()+"&page=" ;
57+ final String url = getBaseUrl () + "trackpoints?bbox=" +b .getMinLon ()+',' +b .getMinLat ()+',' +b .getMaxLon ()+',' +b .getMaxLat ()+"&page=" ;
5558 for (int i = 0 ; !done && !isCanceled (); ++i ) {
5659 progressMonitor .subTask (tr ("Downloading points {0} to {1}..." , i * pointsPerPage , (i + 1 ) * pointsPerPage ));
5760 try (InputStream in = getInputStream (url +i , progressMonitor .createSubTaskMonitor (1 , true ))) {
@@ -62,6 +65,20 @@ private GpxData downloadRawGps(Bounds b, ProgressMonitor progressMonitor) throws
6265 GpxReader reader = new GpxReader (in );
6366 gpxParsedProperly = reader .parse (false );
6467 GpxData currentGpx = reader .getGpxData ();
68+
69+ // #21538 - Apparently track URLs are no longer complete URLs, but only paths
70+ // We'll prefix the browse URL to get something to navigate to again.
71+ final String browseUrl = Config .getUrls ().getBaseBrowseUrl ();
72+ for (IGpxTrack track : currentGpx .tracks ) {
73+ Object trackUrl = track .get ("url" );
74+ if (trackUrl instanceof String ) {
75+ String sTrackUrl = (String ) trackUrl ;
76+ if (!Utils .isBlank (sTrackUrl ) && !sTrackUrl .startsWith ("http" )) {
77+ track .put ("url" , browseUrl + sTrackUrl );
78+ }
79+ }
80+ }
81+
6582 long count = 0 ;
6683 if (currentGpx .hasTrackPoints ()) {
6784 count = currentGpx .getTrackPoints ().count ();
0 commit comments