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);
|
mTileClipper = new TileClipper(0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MapFileTileSource getTileSource() {
|
||||||
|
return mTileSource;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void query(MapTile tile, ITileDataSink sink) {
|
public void query(MapTile tile, ITileDataSink sink) {
|
||||||
|
|
||||||
|
@ -24,6 +24,11 @@ import java.util.List;
|
|||||||
public class MultiMapDatabase implements ITileDataSource {
|
public class MultiMapDatabase implements ITileDataSource {
|
||||||
|
|
||||||
private final List<MapDatabase> mapDatabases = new ArrayList<>();
|
private final List<MapDatabase> mapDatabases = new ArrayList<>();
|
||||||
|
private final MultiMapFileTileSource tileSource;
|
||||||
|
|
||||||
|
public MultiMapDatabase(MultiMapFileTileSource tileSource) {
|
||||||
|
this.tileSource = tileSource;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean add(MapDatabase mapDatabase) {
|
public boolean add(MapDatabase mapDatabase) {
|
||||||
if (mapDatabases.contains(mapDatabase)) {
|
if (mapDatabases.contains(mapDatabase)) {
|
||||||
@ -36,7 +41,9 @@ public class MultiMapDatabase implements ITileDataSource {
|
|||||||
public void query(MapTile tile, ITileDataSink mapDataSink) {
|
public void query(MapTile tile, ITileDataSink mapDataSink) {
|
||||||
MultiMapDataSink multiMapDataSink = new MultiMapDataSink(mapDataSink);
|
MultiMapDataSink multiMapDataSink = new MultiMapDataSink(mapDataSink);
|
||||||
for (MapDatabase mapDatabase : mapDatabases) {
|
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());
|
mapDataSink.completed(multiMapDataSink.getResult());
|
||||||
}
|
}
|
||||||
|
@ -22,13 +22,16 @@ import org.slf4j.LoggerFactory;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class MultiMapFileTileSource extends TileSource implements IMapFileTileSource {
|
public class MultiMapFileTileSource extends TileSource implements IMapFileTileSource {
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(MultiMapFileTileSource.class);
|
private static final Logger log = LoggerFactory.getLogger(MultiMapFileTileSource.class);
|
||||||
|
|
||||||
private final List<MapFileTileSource> mapFileTileSources = new ArrayList<>();
|
private final List<MapFileTileSource> mapFileTileSources = new ArrayList<>();
|
||||||
|
private final Map<MapFileTileSource, int[]> zoomsByTileSource = new HashMap<>();
|
||||||
|
|
||||||
public MultiMapFileTileSource() {
|
public MultiMapFileTileSource() {
|
||||||
this(0, 17);
|
this(0, 17);
|
||||||
@ -45,6 +48,13 @@ public class MultiMapFileTileSource extends TileSource implements IMapFileTileSo
|
|||||||
return mapFileTileSources.add(mapFileTileSource);
|
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() {
|
public BoundingBox getBoundingBox() {
|
||||||
BoundingBox boundingBox = null;
|
BoundingBox boundingBox = null;
|
||||||
for (MapFileTileSource mapFileTileSource : mapFileTileSources) {
|
for (MapFileTileSource mapFileTileSource : mapFileTileSources) {
|
||||||
@ -53,9 +63,13 @@ public class MultiMapFileTileSource extends TileSource implements IMapFileTileSo
|
|||||||
return boundingBox;
|
return boundingBox;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Map<MapFileTileSource, int[]> getZoomsByTileSource() {
|
||||||
|
return zoomsByTileSource;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ITileDataSource getDataSource() {
|
public ITileDataSource getDataSource() {
|
||||||
MultiMapDatabase multiMapDatabase = new MultiMapDatabase();
|
MultiMapDatabase multiMapDatabase = new MultiMapDatabase(this);
|
||||||
for (MapFileTileSource mapFileTileSource : mapFileTileSources) {
|
for (MapFileTileSource mapFileTileSource : mapFileTileSources) {
|
||||||
try {
|
try {
|
||||||
multiMapDatabase.add(new MapDatabase(mapFileTileSource));
|
multiMapDatabase.add(new MapDatabase(mapFileTileSource));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user