From c79dbb26ea080ce346a1d0147f795ddf27cc31ed Mon Sep 17 00:00:00 2001
From: Emux <devemux86@gmail.com>
Date: Fri, 11 May 2018 10:50:04 +0300
Subject: [PATCH] Tile sources: enable full overzoom #393

---
 .../source/geojson/MapzenGeojsonTileSource.java       |  4 +---
 .../source/geojson/NextzenGeojsonTileSource.java      |  4 +---
 .../oscim/tiling/source/mvt/MapzenMvtTileSource.java  |  4 +---
 .../oscim/tiling/source/mvt/NextzenMvtTileSource.java |  4 +---
 .../tiling/source/mvt/OpenMapTilesMvtTileSource.java  |  4 +---
 .../oscim/tiling/source/bitmap/BitmapTileSource.java  |  4 +---
 .../oscim/layers/tile/buildings/BuildingLayer.java    |  5 ++---
 .../org/oscim/layers/tile/buildings/S3DBLayer.java    |  2 +-
 .../org/oscim/layers/tile/vector/OsmTileLayer.java    |  3 +--
 vtm/src/org/oscim/tiling/TileSource.java              | 11 ++++-------
 vtm/src/org/oscim/tiling/source/UrlTileSource.java    |  2 +-
 .../oscim/tiling/source/bitmap/BitmapTileSource.java  |  4 +---
 .../org/oscim/tiling/source/mapfile/MapDatabase.java  |  3 +--
 .../tiling/source/mapfile/MapFileTileSource.java      |  5 +++--
 .../tiling/source/mapfile/MultiMapFileTileSource.java |  5 +++--
 .../tiling/source/oscimap4/OSciMap4TileSource.java    |  4 +---
 16 files changed, 24 insertions(+), 44 deletions(-)

diff --git a/vtm-json/src/org/oscim/tiling/source/geojson/MapzenGeojsonTileSource.java b/vtm-json/src/org/oscim/tiling/source/geojson/MapzenGeojsonTileSource.java
index ac66ac24..54d21af7 100644
--- a/vtm-json/src/org/oscim/tiling/source/geojson/MapzenGeojsonTileSource.java
+++ b/vtm-json/src/org/oscim/tiling/source/geojson/MapzenGeojsonTileSource.java
@@ -17,8 +17,6 @@ package org.oscim.tiling.source.geojson;
 
 import org.oscim.core.MapElement;
 import org.oscim.core.Tag;
-import org.oscim.map.Viewport;
-import org.oscim.tiling.TileSource;
 import org.oscim.tiling.source.UrlTileSource;
 import org.oscim.utils.FastMath;
 
@@ -34,7 +32,7 @@ public class MapzenGeojsonTileSource extends GeojsonTileSource {
         private String locale = "";
 
         public Builder() {
-            super(DEFAULT_URL, DEFAULT_PATH, Viewport.MIN_ZOOM_LEVEL, TileSource.MAX_ZOOM);
+            super(DEFAULT_URL, DEFAULT_PATH);
             keyName("api_key");
             overZoom(16);
         }
diff --git a/vtm-json/src/org/oscim/tiling/source/geojson/NextzenGeojsonTileSource.java b/vtm-json/src/org/oscim/tiling/source/geojson/NextzenGeojsonTileSource.java
index 956b7364..414b9138 100644
--- a/vtm-json/src/org/oscim/tiling/source/geojson/NextzenGeojsonTileSource.java
+++ b/vtm-json/src/org/oscim/tiling/source/geojson/NextzenGeojsonTileSource.java
@@ -16,8 +16,6 @@ package org.oscim.tiling.source.geojson;
 
 import org.oscim.core.MapElement;
 import org.oscim.core.Tag;
-import org.oscim.map.Viewport;
-import org.oscim.tiling.TileSource;
 import org.oscim.tiling.source.UrlTileSource;
 import org.oscim.utils.FastMath;
 
@@ -33,7 +31,7 @@ public class NextzenGeojsonTileSource extends GeojsonTileSource {
         private String locale = "";
 
         public Builder() {
-            super(DEFAULT_URL, DEFAULT_PATH, Viewport.MIN_ZOOM_LEVEL, TileSource.MAX_ZOOM);
+            super(DEFAULT_URL, DEFAULT_PATH);
             keyName("api_key");
             overZoom(16);
         }
diff --git a/vtm-mvt/src/org/oscim/tiling/source/mvt/MapzenMvtTileSource.java b/vtm-mvt/src/org/oscim/tiling/source/mvt/MapzenMvtTileSource.java
index 95f11f6f..4d791c06 100644
--- a/vtm-mvt/src/org/oscim/tiling/source/mvt/MapzenMvtTileSource.java
+++ b/vtm-mvt/src/org/oscim/tiling/source/mvt/MapzenMvtTileSource.java
@@ -17,10 +17,8 @@
  */
 package org.oscim.tiling.source.mvt;
 
-import org.oscim.map.Viewport;
 import org.oscim.tiling.ITileDataSource;
 import org.oscim.tiling.OverzoomTileDataSource;
-import org.oscim.tiling.TileSource;
 import org.oscim.tiling.source.UrlTileDataSource;
 import org.oscim.tiling.source.UrlTileSource;
 
@@ -33,7 +31,7 @@ public class MapzenMvtTileSource extends UrlTileSource {
         private String locale = "";
 
         public Builder() {
-            super(DEFAULT_URL, DEFAULT_PATH, Viewport.MIN_ZOOM_LEVEL, TileSource.MAX_ZOOM);
+            super(DEFAULT_URL, DEFAULT_PATH);
             keyName("api_key");
             overZoom(16);
         }
diff --git a/vtm-mvt/src/org/oscim/tiling/source/mvt/NextzenMvtTileSource.java b/vtm-mvt/src/org/oscim/tiling/source/mvt/NextzenMvtTileSource.java
index 5f667980..9bbf5ab4 100644
--- a/vtm-mvt/src/org/oscim/tiling/source/mvt/NextzenMvtTileSource.java
+++ b/vtm-mvt/src/org/oscim/tiling/source/mvt/NextzenMvtTileSource.java
@@ -14,10 +14,8 @@
  */
 package org.oscim.tiling.source.mvt;
 
-import org.oscim.map.Viewport;
 import org.oscim.tiling.ITileDataSource;
 import org.oscim.tiling.OverzoomTileDataSource;
-import org.oscim.tiling.TileSource;
 import org.oscim.tiling.source.UrlTileDataSource;
 import org.oscim.tiling.source.UrlTileSource;
 
@@ -30,7 +28,7 @@ public class NextzenMvtTileSource extends UrlTileSource {
         private String locale = "";
 
         public Builder() {
-            super(DEFAULT_URL, DEFAULT_PATH, Viewport.MIN_ZOOM_LEVEL, TileSource.MAX_ZOOM);
+            super(DEFAULT_URL, DEFAULT_PATH);
             keyName("api_key");
             overZoom(16);
         }
diff --git a/vtm-mvt/src/org/oscim/tiling/source/mvt/OpenMapTilesMvtTileSource.java b/vtm-mvt/src/org/oscim/tiling/source/mvt/OpenMapTilesMvtTileSource.java
index 5d15e9ff..d75281a2 100644
--- a/vtm-mvt/src/org/oscim/tiling/source/mvt/OpenMapTilesMvtTileSource.java
+++ b/vtm-mvt/src/org/oscim/tiling/source/mvt/OpenMapTilesMvtTileSource.java
@@ -18,10 +18,8 @@
  */
 package org.oscim.tiling.source.mvt;
 
-import org.oscim.map.Viewport;
 import org.oscim.tiling.ITileDataSource;
 import org.oscim.tiling.OverzoomTileDataSource;
-import org.oscim.tiling.TileSource;
 import org.oscim.tiling.source.UrlTileDataSource;
 import org.oscim.tiling.source.UrlTileSource;
 
@@ -34,7 +32,7 @@ public class OpenMapTilesMvtTileSource extends UrlTileSource {
         private String locale = "";
 
         public Builder() {
-            super(DEFAULT_URL, DEFAULT_PATH, Viewport.MIN_ZOOM_LEVEL, TileSource.MAX_ZOOM);
+            super(DEFAULT_URL, DEFAULT_PATH);
             overZoom(14);
         }
 
diff --git a/vtm-web/src/org/oscim/gdx/emu/org/oscim/tiling/source/bitmap/BitmapTileSource.java b/vtm-web/src/org/oscim/gdx/emu/org/oscim/tiling/source/bitmap/BitmapTileSource.java
index 7e69c4a4..17b90daf 100644
--- a/vtm-web/src/org/oscim/gdx/emu/org/oscim/tiling/source/bitmap/BitmapTileSource.java
+++ b/vtm-web/src/org/oscim/gdx/emu/org/oscim/tiling/source/bitmap/BitmapTileSource.java
@@ -30,11 +30,9 @@ import org.oscim.gdx.client.GwtBitmap;
 import org.oscim.layers.tile.LoadDelayTask;
 import org.oscim.layers.tile.MapTile;
 import org.oscim.layers.tile.TileLoader;
-import org.oscim.map.Viewport;
 import org.oscim.tiling.ITileDataSink;
 import org.oscim.tiling.ITileDataSource;
 import org.oscim.tiling.QueryResult;
-import org.oscim.tiling.TileSource;
 import org.oscim.tiling.source.LwHttp;
 import org.oscim.tiling.source.UrlTileSource;
 import org.slf4j.Logger;
@@ -46,7 +44,7 @@ public class BitmapTileSource extends UrlTileSource {
     public static class Builder<T extends Builder<T>> extends UrlTileSource.Builder<T> {
 
         public Builder() {
-            super(null, "/{Z}/{X}/{Y}.png", Viewport.MIN_ZOOM_LEVEL, TileSource.MAX_ZOOM);
+            super(null, "/{Z}/{X}/{Y}.png");
         }
 
         public BitmapTileSource build() {
diff --git a/vtm/src/org/oscim/layers/tile/buildings/BuildingLayer.java b/vtm/src/org/oscim/layers/tile/buildings/BuildingLayer.java
index 51e06f5a..053e58ad 100644
--- a/vtm/src/org/oscim/layers/tile/buildings/BuildingLayer.java
+++ b/vtm/src/org/oscim/layers/tile/buildings/BuildingLayer.java
@@ -45,7 +45,6 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook, ZoomLim
     protected final static int BUILDING_LEVEL_HEIGHT = 280; // cm
 
     public final static int MIN_ZOOM = 17;
-    public final static int MAX_ZOOM = 17; // TODO use Viewport.MAX_ZOOM_LEVEL;
 
     public static boolean POST_AA = false;
     public static boolean TRANSLUCENT = true;
@@ -68,11 +67,11 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook, ZoomLim
     }
 
     public BuildingLayer(Map map, VectorTileLayer tileLayer) {
-        this(map, tileLayer, MIN_ZOOM, MAX_ZOOM, false);
+        this(map, tileLayer, false);
     }
 
     public BuildingLayer(Map map, VectorTileLayer tileLayer, boolean mesh) {
-        this(map, tileLayer, MIN_ZOOM, MAX_ZOOM, mesh);
+        this(map, tileLayer, MIN_ZOOM, map.viewport().getMaxZoomLevel(), mesh);
     }
 
     public BuildingLayer(Map map, VectorTileLayer tileLayer, int zoomMin, int zoomMax, boolean mesh) {
diff --git a/vtm/src/org/oscim/layers/tile/buildings/S3DBLayer.java b/vtm/src/org/oscim/layers/tile/buildings/S3DBLayer.java
index 73f7871b..38ee3a3d 100644
--- a/vtm/src/org/oscim/layers/tile/buildings/S3DBLayer.java
+++ b/vtm/src/org/oscim/layers/tile/buildings/S3DBLayer.java
@@ -47,7 +47,7 @@ public class S3DBLayer extends BuildingLayer {
     private boolean mColored = true;
 
     public S3DBLayer(Map map, VectorTileLayer tileLayer) {
-        this(map, tileLayer, MIN_ZOOM, MAX_ZOOM);
+        this(map, tileLayer, MIN_ZOOM, map.viewport().getMaxZoomLevel());
     }
 
     public S3DBLayer(Map map, VectorTileLayer tileLayer, int zoomMin, int zoomMax) {
diff --git a/vtm/src/org/oscim/layers/tile/vector/OsmTileLayer.java b/vtm/src/org/oscim/layers/tile/vector/OsmTileLayer.java
index 06291381..135f69ad 100644
--- a/vtm/src/org/oscim/layers/tile/vector/OsmTileLayer.java
+++ b/vtm/src/org/oscim/layers/tile/vector/OsmTileLayer.java
@@ -21,7 +21,6 @@ import org.oscim.core.Tag;
 import org.oscim.core.TagSet;
 import org.oscim.layers.tile.TileLoader;
 import org.oscim.map.Map;
-import org.oscim.tiling.TileSource;
 import org.oscim.utils.Utils;
 
 public class OsmTileLayer extends VectorTileLayer {
@@ -29,7 +28,7 @@ public class OsmTileLayer extends VectorTileLayer {
     private static final int CACHE_LIMIT = 150;
 
     public OsmTileLayer(Map map) {
-        this(map, map.viewport().getMinZoomLevel(), TileSource.MAX_ZOOM);
+        this(map, map.viewport().getMinZoomLevel(), map.viewport().getMaxZoomLevel());
     }
 
     public OsmTileLayer(Map map, int zoomMin, int zoomMax) {
diff --git a/vtm/src/org/oscim/tiling/TileSource.java b/vtm/src/org/oscim/tiling/TileSource.java
index 42cf9e55..ce1e0702 100644
--- a/vtm/src/org/oscim/tiling/TileSource.java
+++ b/vtm/src/org/oscim/tiling/TileSource.java
@@ -29,8 +29,8 @@ public abstract class TileSource {
     public abstract static class Builder<T extends Builder<T>> {
         protected float alpha = 1;
         protected int zoomMin = Viewport.MIN_ZOOM_LEVEL;
-        protected int zoomMax = TileSource.MAX_ZOOM;
-        protected int overZoom = TileSource.MAX_ZOOM;
+        protected int zoomMax = Viewport.MAX_ZOOM_LEVEL;
+        protected int overZoom = BuildingLayer.MIN_ZOOM;
         protected FadeStep[] fadeSteps;
         protected String name;
         protected int tileSize = 256;
@@ -82,13 +82,10 @@ public abstract class TileSource {
         }
     }
 
-    // FIXME Sane default since buildings don't have overzoom
-    public static final int MAX_ZOOM = BuildingLayer.MAX_ZOOM;
-
     protected float mAlpha = 1;
     protected int mZoomMin = Viewport.MIN_ZOOM_LEVEL;
-    protected int mZoomMax = TileSource.MAX_ZOOM;
-    protected int mOverZoom = TileSource.MAX_ZOOM;
+    protected int mZoomMax = Viewport.MAX_ZOOM_LEVEL;
+    protected int mOverZoom = BuildingLayer.MIN_ZOOM;
     protected FadeStep[] mFadeSteps;
     protected String mName;
     protected int mTileSize = 256;
diff --git a/vtm/src/org/oscim/tiling/source/UrlTileSource.java b/vtm/src/org/oscim/tiling/source/UrlTileSource.java
index bb168bbf..4dde3adb 100644
--- a/vtm/src/org/oscim/tiling/source/UrlTileSource.java
+++ b/vtm/src/org/oscim/tiling/source/UrlTileSource.java
@@ -102,7 +102,7 @@ public abstract class UrlTileSource extends TileSource {
     }
 
     protected UrlTileSource(String urlString, String tilePath) {
-        this(urlString, tilePath, Viewport.MIN_ZOOM_LEVEL, TileSource.MAX_ZOOM);
+        this(urlString, tilePath, Viewport.MIN_ZOOM_LEVEL, Viewport.MAX_ZOOM_LEVEL);
     }
 
     protected UrlTileSource(String urlString, String tilePath, int zoomMin, int zoomMax) {
diff --git a/vtm/src/org/oscim/tiling/source/bitmap/BitmapTileSource.java b/vtm/src/org/oscim/tiling/source/bitmap/BitmapTileSource.java
index 4763d190..8645e8c4 100644
--- a/vtm/src/org/oscim/tiling/source/bitmap/BitmapTileSource.java
+++ b/vtm/src/org/oscim/tiling/source/bitmap/BitmapTileSource.java
@@ -20,10 +20,8 @@ package org.oscim.tiling.source.bitmap;
 import org.oscim.backend.CanvasAdapter;
 import org.oscim.backend.canvas.Bitmap;
 import org.oscim.core.Tile;
-import org.oscim.map.Viewport;
 import org.oscim.tiling.ITileDataSink;
 import org.oscim.tiling.ITileDataSource;
-import org.oscim.tiling.TileSource;
 import org.oscim.tiling.source.ITileDecoder;
 import org.oscim.tiling.source.LwHttp;
 import org.oscim.tiling.source.UrlTileDataSource;
@@ -40,7 +38,7 @@ public class BitmapTileSource extends UrlTileSource {
     public static class Builder<T extends Builder<T>> extends UrlTileSource.Builder<T> {
 
         public Builder() {
-            super(null, "/{Z}/{X}/{Y}.png", Viewport.MIN_ZOOM_LEVEL, TileSource.MAX_ZOOM);
+            super(null, "/{Z}/{X}/{Y}.png");
         }
 
         public BitmapTileSource build() {
diff --git a/vtm/src/org/oscim/tiling/source/mapfile/MapDatabase.java b/vtm/src/org/oscim/tiling/source/mapfile/MapDatabase.java
index b5d4d0ba..eacc95a1 100644
--- a/vtm/src/org/oscim/tiling/source/mapfile/MapDatabase.java
+++ b/vtm/src/org/oscim/tiling/source/mapfile/MapDatabase.java
@@ -34,7 +34,6 @@ import org.oscim.layers.tile.MapTile;
 import org.oscim.layers.tile.buildings.BuildingLayer;
 import org.oscim.tiling.ITileDataSink;
 import org.oscim.tiling.ITileDataSource;
-import org.oscim.tiling.TileSource;
 import org.oscim.tiling.source.mapfile.header.SubFileParameter;
 import org.oscim.utils.Parameters;
 import org.oscim.utils.geom.TileClipper;
@@ -416,7 +415,7 @@ public class MapDatabase implements ITileDataSource {
 
         // At large query zoom levels use enlarged buffer
         int buffer;
-        if (queryParameters.queryZoomLevel > TileSource.MAX_ZOOM)
+        if (queryParameters.queryZoomLevel > BuildingLayer.MIN_ZOOM)
             buffer = Tile.SIZE / 2;
         else
             buffer = (int) (16 * CanvasAdapter.getScale() + 0.5f);
diff --git a/vtm/src/org/oscim/tiling/source/mapfile/MapFileTileSource.java b/vtm/src/org/oscim/tiling/source/mapfile/MapFileTileSource.java
index 2600ae6e..84aa4e2a 100644
--- a/vtm/src/org/oscim/tiling/source/mapfile/MapFileTileSource.java
+++ b/vtm/src/org/oscim/tiling/source/mapfile/MapFileTileSource.java
@@ -18,6 +18,7 @@
  */
 package org.oscim.tiling.source.mapfile;
 
+import org.oscim.layers.tile.buildings.BuildingLayer;
 import org.oscim.map.Viewport;
 import org.oscim.tiling.ITileDataSource;
 import org.oscim.tiling.OverzoomTileDataSource;
@@ -55,11 +56,11 @@ public class MapFileTileSource extends TileSource implements IMapFileTileSource
     private Callback callback;
 
     public MapFileTileSource() {
-        this(Viewport.MIN_ZOOM_LEVEL, TileSource.MAX_ZOOM);
+        this(Viewport.MIN_ZOOM_LEVEL, Viewport.MAX_ZOOM_LEVEL);
     }
 
     public MapFileTileSource(int zoomMin, int zoomMax) {
-        this(zoomMin, zoomMax, zoomMax);
+        this(zoomMin, zoomMax, BuildingLayer.MIN_ZOOM);
     }
 
     public MapFileTileSource(int zoomMin, int zoomMax, int overZoom) {
diff --git a/vtm/src/org/oscim/tiling/source/mapfile/MultiMapFileTileSource.java b/vtm/src/org/oscim/tiling/source/mapfile/MultiMapFileTileSource.java
index 61269f97..150770fc 100644
--- a/vtm/src/org/oscim/tiling/source/mapfile/MultiMapFileTileSource.java
+++ b/vtm/src/org/oscim/tiling/source/mapfile/MultiMapFileTileSource.java
@@ -15,6 +15,7 @@
 package org.oscim.tiling.source.mapfile;
 
 import org.oscim.core.BoundingBox;
+import org.oscim.layers.tile.buildings.BuildingLayer;
 import org.oscim.map.Viewport;
 import org.oscim.tiling.ITileDataSource;
 import org.oscim.tiling.OverzoomTileDataSource;
@@ -36,11 +37,11 @@ public class MultiMapFileTileSource extends TileSource implements IMapFileTileSo
     private final Map<MapFileTileSource, int[]> zoomsByTileSource = new HashMap<>();
 
     public MultiMapFileTileSource() {
-        this(Viewport.MIN_ZOOM_LEVEL, TileSource.MAX_ZOOM);
+        this(Viewport.MIN_ZOOM_LEVEL, Viewport.MAX_ZOOM_LEVEL);
     }
 
     public MultiMapFileTileSource(int zoomMin, int zoomMax) {
-        this(zoomMin, zoomMax, zoomMax);
+        this(zoomMin, zoomMax, BuildingLayer.MIN_ZOOM);
     }
 
     public MultiMapFileTileSource(int zoomMin, int zoomMax, int overZoom) {
diff --git a/vtm/src/org/oscim/tiling/source/oscimap4/OSciMap4TileSource.java b/vtm/src/org/oscim/tiling/source/oscimap4/OSciMap4TileSource.java
index 785d19c2..0fa288bc 100644
--- a/vtm/src/org/oscim/tiling/source/oscimap4/OSciMap4TileSource.java
+++ b/vtm/src/org/oscim/tiling/source/oscimap4/OSciMap4TileSource.java
@@ -17,10 +17,8 @@
  */
 package org.oscim.tiling.source.oscimap4;
 
-import org.oscim.map.Viewport;
 import org.oscim.tiling.ITileDataSource;
 import org.oscim.tiling.OverzoomTileDataSource;
-import org.oscim.tiling.TileSource;
 import org.oscim.tiling.source.UrlTileDataSource;
 import org.oscim.tiling.source.UrlTileSource;
 
@@ -32,7 +30,7 @@ public class OSciMap4TileSource extends UrlTileSource {
     public static class Builder<T extends Builder<T>> extends UrlTileSource.Builder<T> {
 
         public Builder() {
-            super(DEFAULT_URL, DEFAULT_PATH, Viewport.MIN_ZOOM_LEVEL, TileSource.MAX_ZOOM);
+            super(DEFAULT_URL, DEFAULT_PATH);
             overZoom(17);
         }