Index: src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java
===================================================================
--- src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java	(revision 5108)
+++ src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java	(working copy)
@@ -106,7 +106,15 @@
             GpxLayer layer = new GpxLayer(rawData, name);
             Layer x = findMergeLayer();
             if (newLayer || x == null) {
+                final boolean isDisplayingMapView = Main.isDisplayingMapView();
                 Main.main.addLayer(layer);
+                // if the GPX layer is the only one and no data is available, prevent
+                // the MapView from zooming in on (0,0), which makes starting another
+                // download unnecessarily difficult. See #7508.
+                if(!isDisplayingMapView && rawData.isEmpty() && reader instanceof BoundingBoxDownloader) {
+                    Bounds b = ((BoundingBoxDownloader) reader).getBounds();
+                    Main.map.mapView.zoomTo(b);
+                }
             } else {
                 x.mergeFrom(layer);
                 Main.map.repaint();
Index: src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 5108)
+++ src/org/openstreetmap/josm/gui/NavigatableComponent.java	(working copy)
@@ -311,18 +311,14 @@
         EastNorth e1 = getProjection().latlon2eastNorth(l1);
         EastNorth e2 = getProjection().latlon2eastNorth(l2);
         double d = e2.north() - e1.north();
-        if(d < height*newScale)
-        {
-            double newScaleH = d/height;
+        if(d < height*newScale && height != 0 && width != 0) {
             e1 = getProjection().latlon2eastNorth(new LatLon(lat, b.getMin().lon()));
             e2 = getProjection().latlon2eastNorth(new LatLon(lat, b.getMax().lon()));
             d = e2.east() - e1.east();
             if(d < width*newScale) {
-                newScale = Math.max(newScaleH, d/width);
+                newScale = Math.max(d/height, d/width);
             }
-        }
-        else
-        {
+        } else if (height != 0) {
             d = d/(l1.greatCircleDistance(l2)*height*10);
             if(newScale < d) {
                 newScale = d;
Index: src/org/openstreetmap/josm/io/BoundingBoxDownloader.java
===================================================================
--- src/org/openstreetmap/josm/io/BoundingBoxDownloader.java	(revision 5108)
+++ src/org/openstreetmap/josm/io/BoundingBoxDownloader.java	(working copy)
@@ -31,6 +31,10 @@
         this.crosses180th = downloadArea.crosses180thMeridian();
     }
 
+    public Bounds getBounds() {
+        return new Bounds(lat1, lon1, lat2, lon2);
+    }
+
     private GpxData downloadRawGps(String url, ProgressMonitor progressMonitor) throws IOException, OsmTransferException, SAXException {
         boolean done = false;
         GpxData result = null;
