Mapsforge: improve overlapping map regions (#905)

This commit is contained in:
Emux 2022-02-22 14:08:38 +02:00 committed by GitHub
parent 9357cf380b
commit 825cd05150
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 11 additions and 13 deletions

View File

@ -3,7 +3,7 @@
## New since 0.17.0 ## New since 0.17.0
- Mapsforge: deduplicate maps [#903](https://github.com/mapsforge/vtm/pull/903) - Mapsforge: deduplicate maps [#903](https://github.com/mapsforge/vtm/pull/903)
- Fix overlapping map regions [#903](https://github.com/mapsforge/vtm/pull/903) - Fix overlapping map regions [#903](https://github.com/mapsforge/vtm/pull/903) [#905](https://github.com/mapsforge/vtm/pull/905)
- Minor improvements and bug fixes - Minor improvements and bug fixes
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.18.0) - [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.18.0)

View File

@ -67,7 +67,7 @@ public class MapsforgeTest extends GdxMapApp {
mapFileTileSource.setMapFile(mapFile.getAbsolutePath()); mapFileTileSource.setMapFile(mapFile.getAbsolutePath());
tileSource.add(mapFileTileSource); tileSource.add(mapFileTileSource);
} }
tileSource.setDeduplicate(true); //tileSource.setDeduplicate(true);
//tileSource.setPreferredLanguage("en"); //tileSource.setPreferredLanguage("en");
VectorTileLayer l = mMap.setBaseMap(tileSource); VectorTileLayer l = mMap.setBaseMap(tileSource);

View File

@ -194,7 +194,7 @@ public class VectorTileLoader extends TileLoader implements RenderStyle.Callback
if (element.type == GeometryType.POINT) { if (element.type == GeometryType.POINT) {
renderNode(renderTheme.matchElement(element.type, tags, mTile.zoomLevel)); renderNode(renderTheme.matchElement(element.type, tags, mTile.zoomLevel));
} else { } else {
mCurBucket = getValidLayer(element.layer - (element.isPoly() ? element.level : 0)) * renderTheme.getLevels(); mCurBucket = getValidLayer(element.layer) * renderTheme.getLevels() * (element.level > 0 ? element.level : 1);
renderWay(renderTheme.matchElement(element.type, tags, mTile.zoomLevel)); renderWay(renderTheme.matchElement(element.type, tags, mTile.zoomLevel));
} }
clearState(); clearState();

View File

@ -25,6 +25,7 @@ public class TileDataSink implements ITileDataSink {
public final Set<Integer> hashPois = new HashSet<>(); public final Set<Integer> hashPois = new HashSet<>();
public final Set<Integer> hashWays = new HashSet<>(); public final Set<Integer> hashWays = new HashSet<>();
public int level, levels;
private QueryResult result; private QueryResult result;
private final ITileDataSink sink; private final ITileDataSink sink;

View File

@ -226,7 +226,6 @@ public class MapDatabase implements ITileDataSource {
private int zoomLevelMax = Byte.MAX_VALUE; private int zoomLevelMax = Byte.MAX_VALUE;
private boolean deduplicate; private boolean deduplicate;
private int level;
public MapDatabase(MapFileTileSource tileSource) throws IOException { public MapDatabase(MapFileTileSource tileSource) throws IOException {
mTileSource = tileSource; mTileSource = tileSource;
@ -435,10 +434,6 @@ public class MapDatabase implements ITileDataSource {
this.deduplicate = deduplicate; this.deduplicate = deduplicate;
} }
void setLevel(int level) {
this.level = level;
}
private void setTileClipping(QueryParameters queryParameters, SubFileParameter subFileParameter, private void setTileClipping(QueryParameters queryParameters, SubFileParameter subFileParameter,
long currentRow, long currentCol) { long currentRow, long currentCol) {
long numRows = queryParameters.toBlockY - queryParameters.fromBlockY; long numRows = queryParameters.toBlockY - queryParameters.fromBlockY;
@ -708,7 +703,6 @@ public class MapDatabase implements ITileDataSource {
continue; continue;
e.setLayer(layer); e.setLayer(layer);
e.level = level;
PointOfInterest poi = null; PointOfInterest poi = null;
if (pois != null) { if (pois != null) {
@ -1066,7 +1060,6 @@ public class MapDatabase implements ITileDataSource {
e.simplify(1, true); e.simplify(1, true);
e.setLayer(layer); e.setLayer(layer);
e.level = level;
Way way = null; Way way = null;
if (ways != null) { if (ways != null) {
@ -1085,8 +1078,11 @@ public class MapDatabase implements ITileDataSource {
} }
if (mapDataSink != null) { if (mapDataSink != null) {
if (!deduplicate || way == null || ((TileDataSink) mapDataSink).hashWays.add(way.hashCode())) TileDataSink tileDataSink = (TileDataSink) mapDataSink;
if (!deduplicate || way == null || tileDataSink.hashWays.add(way.hashCode())) {
e.level = e.isLine() ? tileDataSink.levels : tileDataSink.level;
mapDataSink.process(e); mapDataSink.process(e);
}
} }
} }
} }

View File

@ -60,11 +60,12 @@ public class MultiMapDatabase implements ITileDataSource {
} }
TileDataSink dataSink = new TileDataSink(sink); TileDataSink dataSink = new TileDataSink(sink);
for (int i = 0; i < mapDatabases.size(); i++) { for (int i = 0, n = mapDatabases.size(); i < n; i++) {
MapDatabase mapDatabase = mapDatabases.get(i); MapDatabase mapDatabase = mapDatabases.get(i);
if (mapDatabase.supportsTile(tile)) { if (mapDatabase.supportsTile(tile)) {
mapDatabase.setDeduplicate(deduplicate); mapDatabase.setDeduplicate(deduplicate);
mapDatabase.setLevel(i); dataSink.level = i + 1;
dataSink.levels = n;
mapDatabase.query(tile, dataSink); mapDatabase.query(tile, dataSink);
} }
} }