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); } }