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
- 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
- [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());
tileSource.add(mapFileTileSource);
}
tileSource.setDeduplicate(true);
//tileSource.setDeduplicate(true);
//tileSource.setPreferredLanguage("en");
VectorTileLayer l = mMap.setBaseMap(tileSource);

View File

@ -194,7 +194,7 @@ public class VectorTileLoader extends TileLoader implements RenderStyle.Callback
if (element.type == GeometryType.POINT) {
renderNode(renderTheme.matchElement(element.type, tags, mTile.zoomLevel));
} 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));
}
clearState();

View File

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

View File

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

View File

@ -60,11 +60,12 @@ public class MultiMapDatabase implements ITileDataSource {
}
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);
if (mapDatabase.supportsTile(tile)) {
mapDatabase.setDeduplicate(deduplicate);
mapDatabase.setLevel(i);
dataSink.level = i + 1;
dataSink.levels = n;
mapDatabase.query(tile, dataSink);
}
}