Map overzoom implementation #393

This commit is contained in:
Emux 2018-02-11 15:00:43 +02:00
parent 67dde0af7d
commit a5c6bc027f
No known key found for this signature in database
GPG Key ID: 89C6921D7AF2BDD0
22 changed files with 278 additions and 76 deletions

View File

@ -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() {

View File

@ -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) {

View File

@ -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) {

View File

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

View File

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

View File

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

View File

@ -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 <http://www.gnu.org/licenses/>.
*/
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<T extends Builder<T>> extends UrlTileSource.Builder<T> {
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() {

View File

@ -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 <http://www.gnu.org/licenses/>.
*/
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;

View File

@ -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) {

View File

@ -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;

View File

@ -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;

View File

@ -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 <http://www.gnu.org/licenses/>.
*/
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);
}
}

View File

@ -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 <http://www.gnu.org/licenses/>.
*/
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();
}
}

View File

@ -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 <http://www.gnu.org/licenses/>.
*/
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

View File

@ -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<T extends Builder<T>> {
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;
}

View File

@ -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) {

View File

@ -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 <http://www.gnu.org/licenses/>.
*/
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<T extends Builder<T>> extends UrlTileSource.Builder<T> {
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() {

View File

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

View File

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

View File

@ -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<MapDatabase> 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

View File

@ -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<MapFileTileSource, int[]> 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

View File

@ -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<T extends Builder<T>> extends UrlTileSource.Builder<T> {
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);
}
}