Map overzoom implementation #393
This commit is contained in:
parent
67dde0af7d
commit
a5c6bc027f
@ -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() {
|
||||
|
@ -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) {
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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() {
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
60
vtm/src/org/oscim/tiling/OverzoomDataSink.java
Normal file
60
vtm/src/org/oscim/tiling/OverzoomDataSink.java
Normal 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);
|
||||
}
|
||||
}
|
50
vtm/src/org/oscim/tiling/OverzoomTileDataSource.java
Normal file
50
vtm/src/org/oscim/tiling/OverzoomTileDataSource.java
Normal 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();
|
||||
}
|
||||
}
|
@ -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
|
@ -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;
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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() {
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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());
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user