Mapsforge: improve overlapping map regions (#905)
This commit is contained in:
parent
9357cf380b
commit
825cd05150
@ -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)
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user