]> gitweb.fperrin.net Git - GpsPrune.git/commitdiff
Never overzoom when initially opening a track
authorFrédéric Perrin <fred@fperrin.net>
Sun, 30 Dec 2018 13:56:13 +0000 (13:56 +0000)
committerFrédéric Perrin <fred@fperrin.net>
Sat, 10 Apr 2021 20:13:50 +0000 (21:13 +0100)
src/tim/prune/gui/map/MapCanvas.java
src/tim/prune/gui/map/MapPosition.java
src/tim/prune/gui/map/MapTileManager.java

index 2dd248885165c93a954b2f68acf36675fb803dcb..c3d981297d8a7e36900a16ba46b4a7692837a38c 100644 (file)
@@ -353,8 +353,11 @@ public class MapCanvas extends JPanel implements MouseListener, MouseMotionListe
                        MapUtils.getXFromLongitude(_lonRange.getMaximum()));
                _yRange = new DoubleRange(MapUtils.getYFromLatitude(_latRange.getMinimum()),
                        MapUtils.getYFromLatitude(_latRange.getMaximum()));
-               _mapPosition.zoomToXY(_xRange.getMinimum(), _xRange.getMaximum(), _yRange.getMinimum(), _yRange.getMaximum(),
-                       getWidth(), getHeight());
+               _mapPosition.zoomToXY(
+                       _xRange.getMinimum(), _xRange.getMaximum(),
+                       _yRange.getMinimum(), _yRange.getMaximum(),
+                       getWidth(), getHeight(),
+                       _tileManager.getMaxZoomLevel());
        }
 
        /**
index a62d7821c6b1d54db906b73949449b4ef26a39a2..ef1f8b8fede73b9aa2d1550da2cf808bc4aacab2 100644 (file)
@@ -32,14 +32,14 @@ public class MapPosition
         * @param inWidth width of display
         * @param inHeight height of display
         */
-       public void zoomToXY(double inMinX, double inMaxX, double inMinY, double inMaxY, int inWidth, int inHeight)
+       public void zoomToXY(double inMinX, double inMaxX, double inMinY, double inMaxY, int inWidth, int inHeight, int maxZoom)
        {
                // System.out.println("Zooming to " + inMinX + ", " + inMaxX + ", " + inMinY + ", " + inMaxY + "; width=" + inWidth + ", height=" + inHeight);
                double diffX = Math.abs(inMaxX - inMinX);
                double diffY = Math.abs(inMaxY - inMinY);
                // Find out what zoom level to go to
                int requiredZoom = -1;
-               for (int currZoom = MAX_ZOOM; currZoom >= 2; currZoom--)
+               for (int currZoom = maxZoom; currZoom >= 2; currZoom--)
                {
                        if (transformToPixels(diffX, currZoom) < inWidth
                                && transformToPixels(diffY, currZoom) < inHeight)
index 03b364aa66ca919fe4557ae75c19fee495cf3e91..233e4d9cfdac9d96f356e2bd4e2de57c500015bd 100644 (file)
@@ -70,10 +70,19 @@ public class MapTileManager implements ImageObserver
         * @return true if zoom is too high for tiles
         */
        public boolean isOverzoomed()
+       {
+               return _zoom > getMaxZoomLevel();
+       }
+
+       /**
+        * @return the maximum useable zoom level for tiles
+        */
+       public int getMaxZoomLevel()
        {
                // Ask current map source what maximum zoom is
                int maxZoom = (_mapSource == null?0:_mapSource.getMaxZoomLevel());
-               return (_zoom > maxZoom);
+               return maxZoom;
+
        }
 
        /**