diff --git a/vtm-json/src/org/oscim/tiling/source/geojson/GeojsonTileSource.java b/vtm-json/src/org/oscim/tiling/source/geojson/GeojsonTileSource.java
index b979d46c..6739b74a 100644
--- a/vtm-json/src/org/oscim/tiling/source/geojson/GeojsonTileSource.java
+++ b/vtm-json/src/org/oscim/tiling/source/geojson/GeojsonTileSource.java
@@ -1,6 +1,6 @@
/*
* Copyright 2014 Hannes Janetzek
- * Copyright 2017 devemux86
+ * Copyright 2017-2018 devemux86
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
@@ -20,6 +20,7 @@ package org.oscim.tiling.source.geojson;
import org.oscim.core.MapElement;
import org.oscim.core.Tag;
import org.oscim.tiling.ITileDataSource;
+import org.oscim.tiling.OverzoomTileDataSource;
import org.oscim.tiling.source.UrlTileDataSource;
import org.oscim.tiling.source.UrlTileSource;
@@ -41,7 +42,7 @@ public abstract class GeojsonTileSource extends UrlTileSource {
@Override
public ITileDataSource getDataSource() {
- return new UrlTileDataSource(this, new TileDecoder(this), getHttpEngine());
+ return new OverzoomTileDataSource(new UrlTileDataSource(this, new TileDecoder(this), getHttpEngine()), mOverZoom);
}
public Tag getFeatureTag() {
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 d03d5c41..ac66ac24 100644
--- a/vtm-json/src/org/oscim/tiling/source/geojson/MapzenGeojsonTileSource.java
+++ b/vtm-json/src/org/oscim/tiling/source/geojson/MapzenGeojsonTileSource.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2017 devemux86
+ * Copyright 2017-2018 devemux86
* Copyright 2017 Gustl22
*
* This program is free software: you can redistribute it and/or modify it under the
@@ -17,6 +17,8 @@ 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;
@@ -32,8 +34,9 @@ public class MapzenGeojsonTileSource extends GeojsonTileSource {
private String locale = "";
public Builder() {
- super(DEFAULT_URL, DEFAULT_PATH, 1, 17);
+ super(DEFAULT_URL, DEFAULT_PATH, Viewport.MIN_ZOOM_LEVEL, TileSource.MAX_ZOOM);
keyName("api_key");
+ overZoom(16);
}
public T locale(String locale) {
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 7ac3c92f..956b7364 100644
--- a/vtm-json/src/org/oscim/tiling/source/geojson/NextzenGeojsonTileSource.java
+++ b/vtm-json/src/org/oscim/tiling/source/geojson/NextzenGeojsonTileSource.java
@@ -16,6 +16,8 @@ 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;
@@ -31,8 +33,9 @@ public class NextzenGeojsonTileSource extends GeojsonTileSource {
private String locale = "";
public Builder() {
- super(DEFAULT_URL, DEFAULT_PATH, 1, 17);
+ super(DEFAULT_URL, DEFAULT_PATH, Viewport.MIN_ZOOM_LEVEL, TileSource.MAX_ZOOM);
keyName("api_key");
+ overZoom(16);
}
public T locale(String locale) {
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 0ae1dc59..95f11f6f 100644
--- a/vtm-mvt/src/org/oscim/tiling/source/mvt/MapzenMvtTileSource.java
+++ b/vtm-mvt/src/org/oscim/tiling/source/mvt/MapzenMvtTileSource.java
@@ -1,6 +1,6 @@
/*
* Copyright 2013 Hannes Janetzek
- * Copyright 2016-2017 devemux86
+ * Copyright 2016-2018 devemux86
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
@@ -17,7 +17,10 @@
*/
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,8 +33,9 @@ public class MapzenMvtTileSource extends UrlTileSource {
private String locale = "";
public Builder() {
- super(DEFAULT_URL, DEFAULT_PATH, 1, 17);
+ super(DEFAULT_URL, DEFAULT_PATH, Viewport.MIN_ZOOM_LEVEL, TileSource.MAX_ZOOM);
keyName("api_key");
+ overZoom(16);
}
public T locale(String locale) {
@@ -66,6 +70,6 @@ public class MapzenMvtTileSource extends UrlTileSource {
@Override
public ITileDataSource getDataSource() {
- return new UrlTileDataSource(this, new MvtTileDecoder(locale), getHttpEngine());
+ return new OverzoomTileDataSource(new UrlTileDataSource(this, new MvtTileDecoder(locale), getHttpEngine()), mOverZoom);
}
}
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 76280077..5f667980 100644
--- a/vtm-mvt/src/org/oscim/tiling/source/mvt/NextzenMvtTileSource.java
+++ b/vtm-mvt/src/org/oscim/tiling/source/mvt/NextzenMvtTileSource.java
@@ -14,7 +14,10 @@
*/
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;
@@ -27,8 +30,9 @@ public class NextzenMvtTileSource extends UrlTileSource {
private String locale = "";
public Builder() {
- super(DEFAULT_URL, DEFAULT_PATH, 1, 17);
+ super(DEFAULT_URL, DEFAULT_PATH, Viewport.MIN_ZOOM_LEVEL, TileSource.MAX_ZOOM);
keyName("api_key");
+ overZoom(16);
}
public T locale(String locale) {
@@ -63,6 +67,6 @@ public class NextzenMvtTileSource extends UrlTileSource {
@Override
public ITileDataSource getDataSource() {
- return new UrlTileDataSource(this, new MvtTileDecoder(locale), getHttpEngine());
+ return new OverzoomTileDataSource(new UrlTileDataSource(this, new MvtTileDecoder(locale), getHttpEngine()), mOverZoom);
}
}
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 f61d5320..5d15e9ff 100644
--- a/vtm-mvt/src/org/oscim/tiling/source/mvt/OpenMapTilesMvtTileSource.java
+++ b/vtm-mvt/src/org/oscim/tiling/source/mvt/OpenMapTilesMvtTileSource.java
@@ -1,6 +1,6 @@
/*
* Copyright 2013 Hannes Janetzek
- * Copyright 2016-2017 devemux86
+ * Copyright 2016-2018 devemux86
* Copyright 2018 boldtrn
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
@@ -18,7 +18,10 @@
*/
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;
@@ -31,7 +34,8 @@ public class OpenMapTilesMvtTileSource extends UrlTileSource {
private String locale = "";
public Builder() {
- super(DEFAULT_URL, DEFAULT_PATH, 1, 14);
+ super(DEFAULT_URL, DEFAULT_PATH, Viewport.MIN_ZOOM_LEVEL, TileSource.MAX_ZOOM);
+ overZoom(14);
}
public T locale(String locale) {
@@ -66,6 +70,6 @@ public class OpenMapTilesMvtTileSource extends UrlTileSource {
@Override
public ITileDataSource getDataSource() {
- return new UrlTileDataSource(this, new MvtTileDecoder(locale), getHttpEngine());
+ return new OverzoomTileDataSource(new UrlTileDataSource(this, new MvtTileDecoder(locale), getHttpEngine()), mOverZoom);
}
}
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 25f02b14..7e69c4a4 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
@@ -1,3 +1,20 @@
+/*
+ * Copyright 2013 Hannes Janetzek
+ * Copyright 2018 devemux86
+ *
+ * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
+ *
+ * This program is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License along with
+ * this program. If not, see .
+ */
package org.oscim.tiling.source.bitmap;
import com.google.gwt.event.dom.client.ErrorEvent;
@@ -13,9 +30,11 @@ 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;
@@ -27,7 +46,7 @@ public class BitmapTileSource extends UrlTileSource {
public static class Builder> extends UrlTileSource.Builder {
public Builder() {
- super(null, "/{Z}/{X}/{Y}.png", 0, 17);
+ super(null, "/{Z}/{X}/{Y}.png", Viewport.MIN_ZOOM_LEVEL, TileSource.MAX_ZOOM);
}
public BitmapTileSource build() {
diff --git a/vtm/src/org/oscim/layers/tile/TileManager.java b/vtm/src/org/oscim/layers/tile/TileManager.java
index 7187b84a..36d4e2fd 100644
--- a/vtm/src/org/oscim/layers/tile/TileManager.java
+++ b/vtm/src/org/oscim/layers/tile/TileManager.java
@@ -1,5 +1,6 @@
/*
* Copyright 2013 Hannes Janetzek
+ * Copyright 2018 devemux86
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
@@ -14,7 +15,6 @@
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see .
*/
-
package org.oscim.layers.tile;
import org.oscim.core.MapPosition;
@@ -153,12 +153,10 @@ public class TileManager {
void onTileManagerEvent(Event event, MapTile tile);
}
- ;
-
public TileManager(Map map, int cacheLimit) {
mMap = map;
- mMaxZoom = 20;
- mMinZoom = 0;
+ mMaxZoom = map.viewport().getMaxZoomLevel();
+ mMinZoom = map.viewport().getMinZoomLevel();
mCacheLimit = cacheLimit;
mCacheReduce = 0;
diff --git a/vtm/src/org/oscim/layers/tile/vector/OsmTileLayer.java b/vtm/src/org/oscim/layers/tile/vector/OsmTileLayer.java
index ab9bb6a8..06291381 100644
--- a/vtm/src/org/oscim/layers/tile/vector/OsmTileLayer.java
+++ b/vtm/src/org/oscim/layers/tile/vector/OsmTileLayer.java
@@ -1,6 +1,6 @@
/*
* Copyright 2013 Hannes Janetzek
- * Copyright 2016 devemux86
+ * Copyright 2016-2018 devemux86
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
@@ -21,16 +21,15 @@ 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 {
- private static final int MAX_ZOOMLEVEL = 17;
- private static final int MIN_ZOOMLEVEL = 2;
private static final int CACHE_LIMIT = 150;
public OsmTileLayer(Map map) {
- this(map, MIN_ZOOMLEVEL, MAX_ZOOMLEVEL);
+ this(map, map.viewport().getMinZoomLevel(), TileSource.MAX_ZOOM);
}
public OsmTileLayer(Map map, int zoomMin, int zoomMax) {
diff --git a/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java b/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java
index c82b888f..aecc1946 100644
--- a/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java
+++ b/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java
@@ -55,7 +55,6 @@ public class VectorTileLoader extends TileLoader implements RenderStyle.Callback
protected static final byte LAYERS = 11;
public static final byte STROKE_MIN_ZOOM = 12;
- public static final byte STROKE_MAX_ZOOM = 17;
protected IRenderTheme renderTheme;
diff --git a/vtm/src/org/oscim/map/Viewport.java b/vtm/src/org/oscim/map/Viewport.java
index 8cde5209..02d5d191 100644
--- a/vtm/src/org/oscim/map/Viewport.java
+++ b/vtm/src/org/oscim/map/Viewport.java
@@ -39,13 +39,13 @@ import org.oscim.utils.FastMath;
*/
public class Viewport {
- public final static int MAX_ZOOMLEVEL = 20;
- public final static int MIN_ZOOMLEVEL = 2;
+ public final static int MAX_ZOOM_LEVEL = 20;
+ public final static int MIN_ZOOM_LEVEL = 2;
public final static float MIN_TILT = 0;
public final static float MAX_TILT = 65;
- protected double mMaxScale = (1 << MAX_ZOOMLEVEL);
- protected double mMinScale = (1 << MIN_ZOOMLEVEL);
+ protected double mMaxScale = (1 << MAX_ZOOM_LEVEL);
+ protected double mMinScale = (1 << MIN_ZOOM_LEVEL);
protected float mMinTilt = MIN_TILT;
protected float mMaxTilt = MAX_TILT;
@@ -92,7 +92,7 @@ public class Viewport {
mPos.scale = mMinScale;
mPos.x = 0.5;
mPos.y = 0.5;
- mPos.zoomLevel = MIN_ZOOMLEVEL;
+ mPos.zoomLevel = MIN_ZOOM_LEVEL;
mPos.bearing = 0;
mPos.tilt = 0;
mPos.roll = 0;
diff --git a/vtm/src/org/oscim/tiling/OverzoomDataSink.java b/vtm/src/org/oscim/tiling/OverzoomDataSink.java
new file mode 100644
index 00000000..548ee198
--- /dev/null
+++ b/vtm/src/org/oscim/tiling/OverzoomDataSink.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2018 devemux86
+ *
+ * This program is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License along with
+ * this program. If not, see .
+ */
+package org.oscim.tiling;
+
+import org.oscim.backend.CanvasAdapter;
+import org.oscim.backend.canvas.Bitmap;
+import org.oscim.core.MapElement;
+import org.oscim.core.Tile;
+import org.oscim.utils.geom.TileClipper;
+
+class OverzoomDataSink implements ITileDataSink {
+
+ private final ITileDataSink sink;
+
+ private final TileClipper clipper;
+ private final float dx, dy, scale;
+
+ OverzoomDataSink(ITileDataSink sink, Tile overzoomTile, Tile tile) {
+ this.sink = sink;
+
+ int diff = tile.zoomLevel - overzoomTile.zoomLevel;
+ dx = (tile.tileX - (overzoomTile.tileX << diff)) * Tile.SIZE;
+ dy = (tile.tileY - (overzoomTile.tileY << diff)) * Tile.SIZE;
+ scale = 1 << diff;
+ float buffer = 32 * CanvasAdapter.getScale();
+ clipper = new TileClipper((dx - buffer) / scale, (dy - buffer) / scale,
+ (dx + Tile.SIZE + buffer) / scale, (dy + Tile.SIZE + buffer) / scale);
+ }
+
+ @Override
+ public void process(MapElement element) {
+ if (!clipper.clip(element))
+ return;
+ element.scale(scale, scale);
+ element.translate(-dx, -dy);
+ sink.process(element);
+ }
+
+ @Override
+ public void setTileImage(Bitmap bitmap) {
+ sink.setTileImage(bitmap);
+ }
+
+ @Override
+ public void completed(QueryResult result) {
+ sink.completed(result);
+ }
+}
diff --git a/vtm/src/org/oscim/tiling/OverzoomTileDataSource.java b/vtm/src/org/oscim/tiling/OverzoomTileDataSource.java
new file mode 100644
index 00000000..8df3de67
--- /dev/null
+++ b/vtm/src/org/oscim/tiling/OverzoomTileDataSource.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2018 devemux86
+ *
+ * This program is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License along with
+ * this program. If not, see .
+ */
+package org.oscim.tiling;
+
+import org.oscim.layers.tile.MapTile;
+
+public class OverzoomTileDataSource implements ITileDataSource {
+
+ private final ITileDataSource tileDataSource;
+ private final int overZoom;
+
+ public OverzoomTileDataSource(ITileDataSource tileDataSource, int overZoom) {
+ this.tileDataSource = tileDataSource;
+ this.overZoom = overZoom;
+ }
+
+ @Override
+ public void query(MapTile tile, ITileDataSink sink) {
+ MapTile mapTile = tile;
+ ITileDataSink dataSink = sink;
+ int diff = tile.zoomLevel - overZoom;
+ if (diff > 0) {
+ mapTile = new MapTile(tile.node, tile.tileX >> diff, tile.tileY >> diff, overZoom);
+ dataSink = new OverzoomDataSink(sink, mapTile, tile);
+ }
+ tileDataSource.query(mapTile, dataSink);
+ }
+
+ @Override
+ public void dispose() {
+ tileDataSource.dispose();
+ }
+
+ @Override
+ public void cancel() {
+ tileDataSource.cancel();
+ }
+}
diff --git a/vtm/src/org/oscim/tiling/source/mapfile/MultiMapDataSink.java b/vtm/src/org/oscim/tiling/TileDataSink.java
similarity index 70%
rename from vtm/src/org/oscim/tiling/source/mapfile/MultiMapDataSink.java
rename to vtm/src/org/oscim/tiling/TileDataSink.java
index 5ce67fbe..d46267bb 100644
--- a/vtm/src/org/oscim/tiling/source/mapfile/MultiMapDataSink.java
+++ b/vtm/src/org/oscim/tiling/TileDataSink.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2016 devemux86
+ * Copyright 2016-2018 devemux86
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
@@ -12,34 +12,32 @@
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see .
*/
-package org.oscim.tiling.source.mapfile;
+package org.oscim.tiling;
import org.oscim.backend.canvas.Bitmap;
import org.oscim.core.MapElement;
-import org.oscim.tiling.ITileDataSink;
-import org.oscim.tiling.QueryResult;
-class MultiMapDataSink implements ITileDataSink {
+public class TileDataSink implements ITileDataSink {
private QueryResult result;
- private final ITileDataSink tileDataSink;
+ private final ITileDataSink sink;
- MultiMapDataSink(ITileDataSink tileDataSink) {
- this.tileDataSink = tileDataSink;
+ public TileDataSink(ITileDataSink sink) {
+ this.sink = sink;
}
- QueryResult getResult() {
+ public QueryResult getResult() {
return result;
}
@Override
public void process(MapElement element) {
- tileDataSink.process(element);
+ sink.process(element);
}
@Override
public void setTileImage(Bitmap bitmap) {
- tileDataSink.setTileImage(bitmap);
+ sink.setTileImage(bitmap);
}
@Override
diff --git a/vtm/src/org/oscim/tiling/TileSource.java b/vtm/src/org/oscim/tiling/TileSource.java
index 56516370..953634b0 100644
--- a/vtm/src/org/oscim/tiling/TileSource.java
+++ b/vtm/src/org/oscim/tiling/TileSource.java
@@ -19,6 +19,7 @@
package org.oscim.tiling;
import org.oscim.layers.tile.bitmap.BitmapTileLayer.FadeStep;
+import org.oscim.map.Viewport;
import java.util.HashMap;
@@ -26,7 +27,9 @@ public abstract class TileSource {
public abstract static class Builder> {
protected float alpha = 1;
- protected int zoomMin, zoomMax;
+ protected int zoomMin = Viewport.MIN_ZOOM_LEVEL;
+ protected int zoomMax = TileSource.MAX_ZOOM;
+ protected int overZoom = TileSource.MAX_ZOOM;
protected FadeStep[] fadeSteps;
protected String name;
protected int tileSize = 256;
@@ -46,6 +49,11 @@ public abstract class TileSource {
return self();
}
+ public T overZoom(int zoom) {
+ overZoom = zoom;
+ return self();
+ }
+
public T fadeSteps(FadeStep[] fadeSteps) {
this.fadeSteps = fadeSteps;
return self();
@@ -69,24 +77,38 @@ public abstract class TileSource {
public abstract TileSource build();
}
+ // FIXME Same as BuildingLayer.MAX_ZOOM
+ public static final int MAX_ZOOM = 17;
+
protected float mAlpha = 1;
- protected int mZoomMin = 0;
- protected int mZoomMax = 20;
+ protected int mZoomMin = Viewport.MIN_ZOOM_LEVEL;
+ protected int mZoomMax = TileSource.MAX_ZOOM;
+ protected int mOverZoom = TileSource.MAX_ZOOM;
+ protected FadeStep[] mFadeSteps;
protected String mName;
protected int mTileSize = 256;
+ protected final Options options = new Options();
+ public ITileCache tileCache;
+
protected TileSource() {
}
protected TileSource(int zoomMin, int zoomMax) {
+ this(zoomMin, zoomMax, zoomMax);
+ }
+
+ protected TileSource(int zoomMin, int zoomMax, int overZoom) {
mZoomMin = zoomMin;
mZoomMax = zoomMax;
+ mOverZoom = overZoom;
}
public TileSource(Builder> builder) {
mAlpha = builder.alpha;
mZoomMin = builder.zoomMin;
mZoomMax = builder.zoomMax;
+ mOverZoom = builder.overZoom;
mFadeSteps = builder.fadeSteps;
mName = builder.name;
mTileSize = builder.tileSize;
@@ -98,12 +120,6 @@ public abstract class TileSource {
public abstract void close();
- protected final Options options = new Options();
-
- public ITileCache tileCache;
-
- private FadeStep[] mFadeSteps;
-
public float getAlpha() {
return mAlpha;
}
@@ -123,6 +139,10 @@ public abstract class TileSource {
return mZoomMin;
}
+ public int getOverZoom() {
+ return mOverZoom;
+ }
+
public void setFadeSteps(FadeStep[] fadeSteps) {
mFadeSteps = fadeSteps;
}
diff --git a/vtm/src/org/oscim/tiling/source/UrlTileSource.java b/vtm/src/org/oscim/tiling/source/UrlTileSource.java
index 10671017..bb168bbf 100644
--- a/vtm/src/org/oscim/tiling/source/UrlTileSource.java
+++ b/vtm/src/org/oscim/tiling/source/UrlTileSource.java
@@ -1,6 +1,6 @@
/*
* Copyright 2013 Hannes Janetzek
- * Copyright 2016-2017 devemux86
+ * Copyright 2016-2018 devemux86
* Copyright 2016 Izumi Kawashima
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
@@ -19,6 +19,7 @@
package org.oscim.tiling.source;
import org.oscim.core.Tile;
+import org.oscim.map.Viewport;
import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.LwHttp.LwHttpFactory;
@@ -39,9 +40,13 @@ public abstract class UrlTileSource extends TileSource {
protected Builder() {
}
- protected Builder(String url, String tilePath, int zoomMin, int zoomMax) {
+ protected Builder(String url, String tilePath) {
this.url = url;
this.tilePath = tilePath;
+ }
+
+ protected Builder(String url, String tilePath, int zoomMin, int zoomMax) {
+ this(url, tilePath);
this.zoomMin = zoomMin;
this.zoomMax = zoomMax;
}
@@ -97,7 +102,7 @@ public abstract class UrlTileSource extends TileSource {
}
protected UrlTileSource(String urlString, String tilePath) {
- this(urlString, tilePath, 0, 17);
+ this(urlString, tilePath, Viewport.MIN_ZOOM_LEVEL, TileSource.MAX_ZOOM);
}
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 af5f878e..4763d190 100644
--- a/vtm/src/org/oscim/tiling/source/bitmap/BitmapTileSource.java
+++ b/vtm/src/org/oscim/tiling/source/bitmap/BitmapTileSource.java
@@ -1,10 +1,29 @@
+/*
+ * Copyright 2013 Hannes Janetzek
+ * Copyright 2018 devemux86
+ *
+ * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
+ *
+ * This program is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License along with
+ * this program. If not, see .
+ */
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;
@@ -21,7 +40,7 @@ public class BitmapTileSource extends UrlTileSource {
public static class Builder> extends UrlTileSource.Builder {
public Builder() {
- super(null, "/{Z}/{X}/{Y}.png", 0, 17);
+ super(null, "/{Z}/{X}/{Y}.png", Viewport.MIN_ZOOM_LEVEL, TileSource.MAX_ZOOM);
}
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 f35d3a2a..78183893 100644
--- a/vtm/src/org/oscim/tiling/source/mapfile/MapDatabase.java
+++ b/vtm/src/org/oscim/tiling/source/mapfile/MapDatabase.java
@@ -2,7 +2,7 @@
* Copyright 2010, 2011, 2012 mapsforge.org
* Copyright 2013, 2014 Hannes Janetzek
* Copyright 2014-2015 Ludwig M Brinckmann
- * Copyright 2016-2017 devemux86
+ * Copyright 2016-2018 devemux86
* Copyright 2016 Andrey Novikov
* Copyright 2017 Gustl22
*
@@ -32,6 +32,7 @@ import org.oscim.core.Tile;
import org.oscim.layers.tile.MapTile;
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;
@@ -414,7 +415,7 @@ public class MapDatabase implements ITileDataSource {
// At large query zoom levels use enlarged buffer
int buffer;
- if (queryParameters.queryZoomLevel > MapFileTileSource.MAX_ZOOM_LEVEL)
+ if (queryParameters.queryZoomLevel > TileSource.MAX_ZOOM)
buffer = Tile.SIZE / 2;
else
buffer = (int) (16 * CanvasAdapter.getScale() + 0.5f);
@@ -956,7 +957,7 @@ public class MapDatabase implements ITileDataSource {
// At large query zoom levels clip everything
if ((!e.tags.containsKey(Tag.KEY_BUILDING)
&& !e.tags.containsKey(Tag.KEY_BUILDING_PART))
- || queryParameters.queryZoomLevel > MapFileTileSource.MAX_ZOOM_LEVEL) {
+ || queryParameters.queryZoomLevel > TileSource.MAX_ZOOM) {
if (!mTileClipper.clip(e)) {
continue;
}
diff --git a/vtm/src/org/oscim/tiling/source/mapfile/MapFileTileSource.java b/vtm/src/org/oscim/tiling/source/mapfile/MapFileTileSource.java
index b8b06773..2600ae6e 100644
--- a/vtm/src/org/oscim/tiling/source/mapfile/MapFileTileSource.java
+++ b/vtm/src/org/oscim/tiling/source/mapfile/MapFileTileSource.java
@@ -1,7 +1,7 @@
/*
* Copyright 2013 mapsforge.org
* Copyright 2013 Hannes Janetzek
- * Copyright 2016-2017 devemux86
+ * Copyright 2016-2018 devemux86
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
@@ -18,7 +18,9 @@
*/
package org.oscim.tiling.source.mapfile;
+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.mapfile.header.MapFileHeader;
import org.oscim.tiling.source.mapfile.header.MapFileInfo;
@@ -37,7 +39,6 @@ public class MapFileTileSource extends TileSource implements IMapFileTileSource
* Amount of cache blocks that the index cache should store.
*/
private static final int INDEX_CACHE_SIZE = 64;
- static final int MAX_ZOOM_LEVEL = 17;
private static final String READ_ONLY_MODE = "r";
MapFileHeader fileHeader;
@@ -54,11 +55,15 @@ public class MapFileTileSource extends TileSource implements IMapFileTileSource
private Callback callback;
public MapFileTileSource() {
- this(0, MAX_ZOOM_LEVEL);
+ this(Viewport.MIN_ZOOM_LEVEL, TileSource.MAX_ZOOM);
}
public MapFileTileSource(int zoomMin, int zoomMax) {
- super(zoomMin, zoomMax);
+ this(zoomMin, zoomMax, zoomMax);
+ }
+
+ public MapFileTileSource(int zoomMin, int zoomMax, int overZoom) {
+ super(zoomMin, zoomMax, overZoom);
}
/**
@@ -149,7 +154,7 @@ public class MapFileTileSource extends TileSource implements IMapFileTileSource
@Override
public ITileDataSource getDataSource() {
try {
- return new MapDatabase(this);
+ return new OverzoomTileDataSource(new MapDatabase(this), mOverZoom);
} catch (IOException e) {
log.debug(e.getMessage());
}
diff --git a/vtm/src/org/oscim/tiling/source/mapfile/MultiMapDatabase.java b/vtm/src/org/oscim/tiling/source/mapfile/MultiMapDatabase.java
index 468785a7..8bc2b521 100644
--- a/vtm/src/org/oscim/tiling/source/mapfile/MultiMapDatabase.java
+++ b/vtm/src/org/oscim/tiling/source/mapfile/MultiMapDatabase.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2016-2017 devemux86
+ * Copyright 2016-2018 devemux86
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
@@ -18,6 +18,7 @@ import org.oscim.core.Tile;
import org.oscim.layers.tile.MapTile;
import org.oscim.tiling.ITileDataSink;
import org.oscim.tiling.ITileDataSource;
+import org.oscim.tiling.TileDataSink;
import java.util.ArrayList;
import java.util.List;
@@ -25,10 +26,8 @@ import java.util.List;
public class MultiMapDatabase implements ITileDataSource {
private final List mapDatabases = new ArrayList<>();
- private final MultiMapFileTileSource tileSource;
- public MultiMapDatabase(MultiMapFileTileSource tileSource) {
- this.tileSource = tileSource;
+ public MultiMapDatabase() {
}
public boolean add(MapDatabase mapDatabase) {
@@ -39,13 +38,13 @@ public class MultiMapDatabase implements ITileDataSource {
}
@Override
- public void query(MapTile tile, ITileDataSink mapDataSink) {
- MultiMapDataSink multiMapDataSink = new MultiMapDataSink(mapDataSink);
+ public void query(MapTile tile, ITileDataSink sink) {
+ TileDataSink dataSink = new TileDataSink(sink);
for (MapDatabase mapDatabase : mapDatabases) {
if (mapDatabase.supportsTile(tile))
- mapDatabase.query(tile, multiMapDataSink);
+ mapDatabase.query(tile, dataSink);
}
- mapDataSink.completed(multiMapDataSink.getResult());
+ sink.completed(dataSink.getResult());
}
@Override
diff --git a/vtm/src/org/oscim/tiling/source/mapfile/MultiMapFileTileSource.java b/vtm/src/org/oscim/tiling/source/mapfile/MultiMapFileTileSource.java
index 96fbf24e..61269f97 100644
--- a/vtm/src/org/oscim/tiling/source/mapfile/MultiMapFileTileSource.java
+++ b/vtm/src/org/oscim/tiling/source/mapfile/MultiMapFileTileSource.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2016-2017 devemux86
+ * Copyright 2016-2018 devemux86
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
@@ -15,7 +15,9 @@
package org.oscim.tiling.source.mapfile;
import org.oscim.core.BoundingBox;
+import org.oscim.map.Viewport;
import org.oscim.tiling.ITileDataSource;
+import org.oscim.tiling.OverzoomTileDataSource;
import org.oscim.tiling.TileSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -34,11 +36,15 @@ public class MultiMapFileTileSource extends TileSource implements IMapFileTileSo
private final Map zoomsByTileSource = new HashMap<>();
public MultiMapFileTileSource() {
- this(0, 17);
+ this(Viewport.MIN_ZOOM_LEVEL, TileSource.MAX_ZOOM);
}
public MultiMapFileTileSource(int zoomMin, int zoomMax) {
- super(zoomMin, zoomMax);
+ this(zoomMin, zoomMax, zoomMax);
+ }
+
+ public MultiMapFileTileSource(int zoomMin, int zoomMax, int overZoom) {
+ super(zoomMin, zoomMax, overZoom);
}
public boolean add(MapFileTileSource mapFileTileSource) {
@@ -65,7 +71,7 @@ public class MultiMapFileTileSource extends TileSource implements IMapFileTileSo
@Override
public ITileDataSource getDataSource() {
- MultiMapDatabase multiMapDatabase = new MultiMapDatabase(this);
+ MultiMapDatabase multiMapDatabase = new MultiMapDatabase();
for (MapFileTileSource mapFileTileSource : mapFileTileSources) {
try {
MapDatabase mapDatabase = new MapDatabase(mapFileTileSource);
@@ -77,7 +83,7 @@ public class MultiMapFileTileSource extends TileSource implements IMapFileTileSo
log.debug(e.getMessage());
}
}
- return multiMapDatabase;
+ return new OverzoomTileDataSource(multiMapDatabase, mOverZoom);
}
@Override
diff --git a/vtm/src/org/oscim/tiling/source/oscimap4/OSciMap4TileSource.java b/vtm/src/org/oscim/tiling/source/oscimap4/OSciMap4TileSource.java
index 16976f37..785d19c2 100644
--- a/vtm/src/org/oscim/tiling/source/oscimap4/OSciMap4TileSource.java
+++ b/vtm/src/org/oscim/tiling/source/oscimap4/OSciMap4TileSource.java
@@ -1,5 +1,6 @@
/*
* Copyright 2013 Hannes Janetzek
+ * Copyright 2018 devemux86
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
@@ -16,7 +17,10 @@
*/
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;
@@ -28,7 +32,8 @@ public class OSciMap4TileSource extends UrlTileSource {
public static class Builder> extends UrlTileSource.Builder {
public Builder() {
- super(DEFAULT_URL, DEFAULT_PATH, 1, 17);
+ super(DEFAULT_URL, DEFAULT_PATH, Viewport.MIN_ZOOM_LEVEL, TileSource.MAX_ZOOM);
+ overZoom(17);
}
public OSciMap4TileSource build() {
@@ -55,6 +60,6 @@ public class OSciMap4TileSource extends UrlTileSource {
@Override
public ITileDataSource getDataSource() {
- return new UrlTileDataSource(this, new TileDecoder(), getHttpEngine());
+ return new OverzoomTileDataSource(new UrlTileDataSource(this, new TileDecoder(), getHttpEngine()), mOverZoom);
}
}