]> 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, 30 Nov 2019 11:22:39 +0000 (11:22 +0000)
src/tim/prune/gui/map/MapCanvas.java
src/tim/prune/gui/map/MapPosition.java
src/tim/prune/gui/map/MapTileManager.java

index aa25dbcd939e39b96a6642f188b68665d4c74c4f..429fcdcde2063308953da1de03f219088a7d0167 100644 (file)
@@ -345,8 +345,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 25f05fc1a2a238370d8888ea4b807b7d3f5f8adb..71ab6cd4d88ed9eb9823db56ab19dc72d574db53 100644 (file)
@@ -30,14 +30,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 f7370c5c90c833e7f053fc786eafdae37ab7f843..d1e0047a2bc2624284308fad0f4ab1ea9df2dc09 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;
+
        }
 
        /**