refactor TileLayer:
- set specific TileRenderer in sub-class constructor - remove TileLoader generics from TileLayer
This commit is contained in:
parent
5cffe3a3b3
commit
adb56c7613
@ -36,7 +36,7 @@ public class PathOverlayActivity extends BitmapTileMapActivity {
|
|||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
mBitmapLayer.getTileRenderer().setBitmapAlpha(0.5f);
|
mBitmapLayer.tileRenderer().setBitmapAlpha(0.5f);
|
||||||
|
|
||||||
createLayers(1, true);
|
createLayers(1, true);
|
||||||
|
|
||||||
|
@ -147,7 +147,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTileDataSource(ITileDataSource mapDatabase) {
|
public void setDataSource(ITileDataSource mapDatabase) {
|
||||||
if (mTileDataSource != null)
|
if (mTileDataSource != null)
|
||||||
mTileDataSource.destroy();
|
mTileDataSource.destroy();
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@ import org.oscim.renderer.elements.ElementLayers;
|
|||||||
import org.oscim.tiling.MapTile;
|
import org.oscim.tiling.MapTile;
|
||||||
import org.oscim.tiling.TileLoader;
|
import org.oscim.tiling.TileLoader;
|
||||||
import org.oscim.tiling.TileManager;
|
import org.oscim.tiling.TileManager;
|
||||||
|
import org.oscim.tiling.TileRenderer;
|
||||||
import org.oscim.tiling.source.ITileDataSink;
|
import org.oscim.tiling.source.ITileDataSink;
|
||||||
import org.oscim.tiling.source.ITileDataSource;
|
import org.oscim.tiling.source.ITileDataSource;
|
||||||
import org.oscim.tiling.source.ITileDataSource.QueryResult;
|
import org.oscim.tiling.source.ITileDataSource.QueryResult;
|
||||||
@ -38,7 +39,7 @@ import org.oscim.utils.FastMath;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
public class BitmapTileLayer extends TileLayer<TileLoader> {
|
public class BitmapTileLayer extends TileLayer {
|
||||||
|
|
||||||
protected static final Logger log = LoggerFactory.getLogger(BitmapTileLayer.class);
|
protected static final Logger log = LoggerFactory.getLogger(BitmapTileLayer.class);
|
||||||
|
|
||||||
@ -65,7 +66,8 @@ public class BitmapTileLayer extends TileLayer<TileLoader> {
|
|||||||
public BitmapTileLayer(Map map, TileSource tileSource, int cacheLimit) {
|
public BitmapTileLayer(Map map, TileSource tileSource, int cacheLimit) {
|
||||||
super(map, tileSource.getZoomLevelMin(), tileSource.getZoomLevelMax(), cacheLimit);
|
super(map, tileSource.getZoomLevelMin(), tileSource.getZoomLevelMax(), cacheLimit);
|
||||||
mTileSource = tileSource;
|
mTileSource = tileSource;
|
||||||
initLoader();
|
setRenderer(new TileRenderer(mTileManager));
|
||||||
|
initLoader(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -96,7 +98,7 @@ public class BitmapTileLayer extends TileLayer<TileLoader> {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
mRenderLayer.setBitmapAlpha(alpha);
|
tileRenderer().setBitmapAlpha(alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -16,18 +16,18 @@
|
|||||||
*/
|
*/
|
||||||
package org.oscim.layers.tile;
|
package org.oscim.layers.tile;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import org.oscim.core.MapPosition;
|
import org.oscim.core.MapPosition;
|
||||||
import org.oscim.layers.Layer;
|
import org.oscim.layers.Layer;
|
||||||
import org.oscim.map.Map;
|
import org.oscim.map.Map;
|
||||||
|
import org.oscim.map.Map.UpdateListener;
|
||||||
import org.oscim.tiling.TileLoader;
|
import org.oscim.tiling.TileLoader;
|
||||||
import org.oscim.tiling.TileManager;
|
import org.oscim.tiling.TileManager;
|
||||||
import org.oscim.tiling.TileRenderer;
|
import org.oscim.tiling.TileRenderer;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
public abstract class TileLayer<T extends TileLoader> extends Layer implements Map.UpdateListener {
|
public abstract class TileLayer extends Layer implements UpdateListener {
|
||||||
|
|
||||||
static final Logger log = LoggerFactory.getLogger(TileLayer.class);
|
static final Logger log = LoggerFactory.getLogger(TileLayer.class);
|
||||||
|
|
||||||
private final static int MAX_ZOOMLEVEL = 17;
|
private final static int MAX_ZOOMLEVEL = 17;
|
||||||
@ -35,10 +35,8 @@ public abstract class TileLayer<T extends TileLoader> extends Layer implements M
|
|||||||
private final static int CACHE_LIMIT = 150;
|
private final static int CACHE_LIMIT = 150;
|
||||||
|
|
||||||
protected final TileManager mTileManager;
|
protected final TileManager mTileManager;
|
||||||
protected final TileRenderer mRenderLayer;
|
|
||||||
|
|
||||||
protected final int mNumTileLoader = 4;
|
protected TileLoader[] mTileLoader;
|
||||||
protected final ArrayList<T> mTileLoader;
|
|
||||||
|
|
||||||
public TileLayer(Map map) {
|
public TileLayer(Map map) {
|
||||||
this(map, MIN_ZOOMLEVEL, MAX_ZOOMLEVEL, CACHE_LIMIT);
|
this(map, MIN_ZOOMLEVEL, MAX_ZOOMLEVEL, CACHE_LIMIT);
|
||||||
@ -46,39 +44,36 @@ public abstract class TileLayer<T extends TileLoader> extends Layer implements M
|
|||||||
|
|
||||||
public TileLayer(Map map, int minZoom, int maxZoom, int cacheLimit) {
|
public TileLayer(Map map, int minZoom, int maxZoom, int cacheLimit) {
|
||||||
super(map);
|
super(map);
|
||||||
|
/* TileManager responsible for adding visible tiles
|
||||||
// TileManager responsible for adding visible tiles
|
* to load queue and managing in-memory tile cache. */
|
||||||
// to load queue and managing in-memory tile cache.
|
|
||||||
mTileManager = new TileManager(map, minZoom, maxZoom, cacheLimit);
|
mTileManager = new TileManager(map, minZoom, maxZoom, cacheLimit);
|
||||||
|
|
||||||
// Instantiate TileLoader threads
|
|
||||||
mTileLoader = new ArrayList<T>();
|
|
||||||
|
|
||||||
// RenderLayer is working in GL Thread and actually
|
|
||||||
// drawing loaded tiles to screen.
|
|
||||||
mRenderer = mRenderLayer = new TileRenderer(mTileManager);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void initLoader() {
|
abstract protected TileLoader createLoader(TileManager tm);
|
||||||
for (int i = 0; i < mNumTileLoader; i++) {
|
|
||||||
T tileGenerator = createLoader(mTileManager);
|
protected void setRenderer(TileRenderer renderer) {
|
||||||
mTileLoader.add(tileGenerator);
|
mRenderer = renderer;
|
||||||
tileGenerator.start();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract protected T createLoader(TileManager tm);
|
public TileRenderer tileRenderer() {
|
||||||
|
|
||||||
public TileRenderer getTileRenderer() {
|
|
||||||
return (TileRenderer) mRenderer;
|
return (TileRenderer) mRenderer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void initLoader(int numLoaders) {
|
||||||
|
mTileLoader = new TileLoader[numLoaders];
|
||||||
|
|
||||||
|
for (int i = 0; i < numLoaders; i++) {
|
||||||
|
mTileLoader[i] = createLoader(mTileManager);
|
||||||
|
mTileLoader[i].start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onMapUpdate(MapPosition mapPosition, boolean changed, boolean clear) {
|
public void onMapUpdate(MapPosition mapPosition, boolean changed, boolean clear) {
|
||||||
if (clear) {
|
if (clear) {
|
||||||
// sync with TileRenderer
|
// sync with TileRenderer
|
||||||
synchronized (mRenderLayer) {
|
synchronized (mRenderer) {
|
||||||
mRenderLayer.clearTiles();
|
tileRenderer().clearTiles();
|
||||||
mTileManager.init();
|
mTileManager.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,7 +86,7 @@ public abstract class TileLayer<T extends TileLoader> extends Layer implements M
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDetach() {
|
public void onDetach() {
|
||||||
for (T loader : mTileLoader) {
|
for (TileLoader loader : mTileLoader) {
|
||||||
loader.pause();
|
loader.pause();
|
||||||
loader.interrupt();
|
loader.interrupt();
|
||||||
loader.cleanup();
|
loader.cleanup();
|
||||||
@ -99,27 +94,26 @@ public abstract class TileLayer<T extends TileLoader> extends Layer implements M
|
|||||||
}
|
}
|
||||||
|
|
||||||
void notifyLoaders() {
|
void notifyLoaders() {
|
||||||
for (int i = 0; i < mNumTileLoader; i++) {
|
for (TileLoader loader : mTileLoader)
|
||||||
mTileLoader.get(i).go();
|
loader.go();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void pauseLoaders(boolean wait) {
|
protected void pauseLoaders(boolean wait) {
|
||||||
for (T loader : mTileLoader) {
|
for (TileLoader loader : mTileLoader) {
|
||||||
if (!loader.isPausing())
|
if (!loader.isPausing())
|
||||||
loader.pause();
|
loader.pause();
|
||||||
}
|
}
|
||||||
if (!wait)
|
if (!wait)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (T loader : mTileLoader) {
|
for (TileLoader loader : mTileLoader) {
|
||||||
if (!loader.isPausing())
|
if (!loader.isPausing())
|
||||||
loader.awaitPausing();
|
loader.awaitPausing();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void resumeLoaders() {
|
protected void resumeLoaders() {
|
||||||
for (T loader : mTileLoader)
|
for (TileLoader loader : mTileLoader)
|
||||||
loader.proceed();
|
loader.proceed();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,6 @@ import org.oscim.backend.canvas.Paint.Cap;
|
|||||||
import org.oscim.core.GeometryBuffer;
|
import org.oscim.core.GeometryBuffer;
|
||||||
import org.oscim.core.Tile;
|
import org.oscim.core.Tile;
|
||||||
import org.oscim.layers.tile.TileLayer;
|
import org.oscim.layers.tile.TileLayer;
|
||||||
import org.oscim.layers.tile.example.TestTileLayer.TestTileLoader;
|
|
||||||
import org.oscim.map.Map;
|
import org.oscim.map.Map;
|
||||||
import org.oscim.renderer.elements.ElementLayers;
|
import org.oscim.renderer.elements.ElementLayers;
|
||||||
import org.oscim.renderer.elements.LineLayer;
|
import org.oscim.renderer.elements.LineLayer;
|
||||||
@ -32,7 +31,7 @@ import org.oscim.tiling.TileManager;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
public class TestTileLayer extends TileLayer<TestTileLoader> {
|
public class TestTileLayer extends TileLayer {
|
||||||
static final Logger log = LoggerFactory.getLogger(TestTileLayer.class);
|
static final Logger log = LoggerFactory.getLogger(TestTileLayer.class);
|
||||||
|
|
||||||
public TestTileLayer(Map map) {
|
public TestTileLayer(Map map) {
|
||||||
|
@ -29,7 +29,7 @@ public class BuildingLayer extends Layer {
|
|||||||
|
|
||||||
public BuildingLayer(Map map, VectorTileLayer tileLayer) {
|
public BuildingLayer(Map map, VectorTileLayer tileLayer) {
|
||||||
super(map);
|
super(map);
|
||||||
mExtLayer = new ExtrusionRenderer(tileLayer.getTileRenderer()) {
|
mExtLayer = new ExtrusionRenderer(tileLayer.tileRenderer()) {
|
||||||
private long mStartTime;
|
private long mStartTime;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -21,7 +21,7 @@ import org.oscim.map.Map;
|
|||||||
import org.oscim.theme.IRenderTheme;
|
import org.oscim.theme.IRenderTheme;
|
||||||
import org.oscim.tiling.TileLoader;
|
import org.oscim.tiling.TileLoader;
|
||||||
import org.oscim.tiling.TileManager;
|
import org.oscim.tiling.TileManager;
|
||||||
import org.oscim.tiling.source.ITileDataSource;
|
import org.oscim.tiling.TileRenderer;
|
||||||
import org.oscim.tiling.source.TileSource;
|
import org.oscim.tiling.source.TileSource;
|
||||||
import org.oscim.tiling.source.TileSource.OpenResult;
|
import org.oscim.tiling.source.TileSource.OpenResult;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@ -32,19 +32,21 @@ import org.slf4j.LoggerFactory;
|
|||||||
* {@link VectorTileLoader} that load and assemble vector tiles
|
* {@link VectorTileLoader} that load and assemble vector tiles
|
||||||
* for rendering.
|
* for rendering.
|
||||||
*/
|
*/
|
||||||
public class VectorTileLayer extends TileLayer<VectorTileLoader> {
|
public class VectorTileLayer extends TileLayer {
|
||||||
static final Logger log = LoggerFactory.getLogger(VectorTileLayer.class);
|
static final Logger log = LoggerFactory.getLogger(VectorTileLayer.class);
|
||||||
|
|
||||||
private TileSource mTileSource;
|
private TileSource mTileSource;
|
||||||
|
|
||||||
public VectorTileLayer(Map map) {
|
public VectorTileLayer(Map map) {
|
||||||
super(map);
|
super(map);
|
||||||
initLoader();
|
setRenderer(new TileRenderer(mTileManager));
|
||||||
|
initLoader(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
public VectorTileLayer(Map map, int minZoom, int maxZoom, int cacheLimit) {
|
public VectorTileLayer(Map map, int minZoom, int maxZoom, int cacheLimit) {
|
||||||
super(map, minZoom, maxZoom, cacheLimit);
|
super(map, minZoom, maxZoom, cacheLimit);
|
||||||
initLoader();
|
setRenderer(new TileRenderer(mTileManager));
|
||||||
|
initLoader(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -75,10 +77,8 @@ public class VectorTileLayer extends TileLayer<VectorTileLoader> {
|
|||||||
|
|
||||||
mTileSource = tileSource;
|
mTileSource = tileSource;
|
||||||
|
|
||||||
for (int i = 0; i < mNumTileLoader; i++) {
|
for (TileLoader l : mTileLoader)
|
||||||
ITileDataSource tileDataSource = tileSource.getDataSource();
|
((VectorTileLoader) l).setDataSource(tileSource.getDataSource());
|
||||||
mTileLoader.get(i).setTileDataSource(tileDataSource);
|
|
||||||
}
|
|
||||||
|
|
||||||
mMap.clearMap();
|
mMap.clearMap();
|
||||||
resumeLoaders();
|
resumeLoaders();
|
||||||
@ -96,10 +96,10 @@ public class VectorTileLayer extends TileLayer<VectorTileLoader> {
|
|||||||
pauseLoaders(true);
|
pauseLoaders(true);
|
||||||
mTileManager.clearJobs();
|
mTileManager.clearJobs();
|
||||||
|
|
||||||
for (VectorTileLoader g : mTileLoader)
|
for (TileLoader l : mTileLoader)
|
||||||
g.setRenderTheme(theme);
|
((VectorTileLoader) l).setRenderTheme(theme);
|
||||||
|
|
||||||
mRenderLayer.setOverdrawColor(theme.getMapBackground());
|
tileRenderer().setOverdrawColor(theme.getMapBackground());
|
||||||
|
|
||||||
resumeLoaders();
|
resumeLoaders();
|
||||||
}
|
}
|
||||||
|
@ -158,7 +158,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTileDataSource(ITileDataSource mapDatabase) {
|
public void setDataSource(ITileDataSource mapDatabase) {
|
||||||
if (mTileDataSource != null)
|
if (mTileDataSource != null)
|
||||||
mTileDataSource.destroy();
|
mTileDataSource.destroy();
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ public class LabelLayer extends Layer implements Map.InputListener, Map.UpdateLi
|
|||||||
super(map);
|
super(map);
|
||||||
l.getManager().events.bind(this);
|
l.getManager().events.bind(this);
|
||||||
|
|
||||||
mLabelPlacer = new LabelPlacement(map, l.getTileRenderer());
|
mLabelPlacer = new LabelPlacement(map, l.tileRenderer());
|
||||||
mWorker = new Worker(map);
|
mWorker = new Worker(map);
|
||||||
mRenderer = new TextRenderer(mWorker);
|
mRenderer = new TextRenderer(mWorker);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user