diff --git a/vtm/src/org/oscim/tiling/source/mapfile/MapDatabase.java b/vtm/src/org/oscim/tiling/source/mapfile/MapDatabase.java index b2529a12..2f004a26 100644 --- a/vtm/src/org/oscim/tiling/source/mapfile/MapDatabase.java +++ b/vtm/src/org/oscim/tiling/source/mapfile/MapDatabase.java @@ -217,6 +217,10 @@ public class MapDatabase implements ITileDataSource { mTileClipper = new TileClipper(0, 0, 0, 0); } + public MapFileTileSource getTileSource() { + return mTileSource; + } + @Override public void query(MapTile tile, ITileDataSink sink) { diff --git a/vtm/src/org/oscim/tiling/source/mapfile/MultiMapDatabase.java b/vtm/src/org/oscim/tiling/source/mapfile/MultiMapDatabase.java index 5cd4b4de..b65ffb17 100644 --- a/vtm/src/org/oscim/tiling/source/mapfile/MultiMapDatabase.java +++ b/vtm/src/org/oscim/tiling/source/mapfile/MultiMapDatabase.java @@ -24,6 +24,11 @@ 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 boolean add(MapDatabase mapDatabase) { if (mapDatabases.contains(mapDatabase)) { @@ -36,7 +41,9 @@ public class MultiMapDatabase implements ITileDataSource { public void query(MapTile tile, ITileDataSink mapDataSink) { MultiMapDataSink multiMapDataSink = new MultiMapDataSink(mapDataSink); for (MapDatabase mapDatabase : mapDatabases) { - mapDatabase.query(tile, multiMapDataSink); + int[] zoomLevels = tileSource.getZoomsByTileSource().get(mapDatabase.getTileSource()); + if (zoomLevels == null || (zoomLevels[0] <= tile.zoomLevel && tile.zoomLevel <= zoomLevels[1])) + mapDatabase.query(tile, multiMapDataSink); } mapDataSink.completed(multiMapDataSink.getResult()); } diff --git a/vtm/src/org/oscim/tiling/source/mapfile/MultiMapFileTileSource.java b/vtm/src/org/oscim/tiling/source/mapfile/MultiMapFileTileSource.java index 4f7eb1ff..93bed95f 100644 --- a/vtm/src/org/oscim/tiling/source/mapfile/MultiMapFileTileSource.java +++ b/vtm/src/org/oscim/tiling/source/mapfile/MultiMapFileTileSource.java @@ -22,13 +22,16 @@ import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class MultiMapFileTileSource extends TileSource implements IMapFileTileSource { private static final Logger log = LoggerFactory.getLogger(MultiMapFileTileSource.class); private final List<MapFileTileSource> mapFileTileSources = new ArrayList<>(); + private final Map<MapFileTileSource, int[]> zoomsByTileSource = new HashMap<>(); public MultiMapFileTileSource() { this(0, 17); @@ -45,6 +48,13 @@ public class MultiMapFileTileSource extends TileSource implements IMapFileTileSo return mapFileTileSources.add(mapFileTileSource); } + public boolean add(MapFileTileSource mapFileTileSource, int zoomMin, int zoomMax) { + boolean result = add(mapFileTileSource); + if (result) + zoomsByTileSource.put(mapFileTileSource, new int[]{zoomMin, zoomMax}); + return result; + } + public BoundingBox getBoundingBox() { BoundingBox boundingBox = null; for (MapFileTileSource mapFileTileSource : mapFileTileSources) { @@ -53,9 +63,13 @@ public class MultiMapFileTileSource extends TileSource implements IMapFileTileSo return boundingBox; } + Map<MapFileTileSource, int[]> getZoomsByTileSource() { + return zoomsByTileSource; + } + @Override public ITileDataSource getDataSource() { - MultiMapDatabase multiMapDatabase = new MultiMapDatabase(); + MultiMapDatabase multiMapDatabase = new MultiMapDatabase(this); for (MapFileTileSource mapFileTileSource : mapFileTileSources) { try { multiMapDatabase.add(new MapDatabase(mapFileTileSource));