Mapsforge: multiple map files with zoom levels, #208
This commit is contained in:
parent
f85453e60c
commit
e10a223ea6
@ -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) {
|
||||
|
||||
|
@ -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());
|
||||
}
|
||||
|
@ -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));
|
||||
|
Loading…
x
Reference in New Issue
Block a user