move TagFilter stuff to OsmTileLayer

This commit is contained in:
Hannes Janetzek 2014-03-09 17:01:11 +01:00
parent 8926c84ca9
commit d00e9771e0
2 changed files with 20 additions and 32 deletions

View File

@ -22,9 +22,11 @@ public class OsmTileLayer extends VectorTileLayer {
} }
static class OsmTileLoader extends VectorTileLoader { static class OsmTileLoader extends VectorTileLoader {
private final TagSet mFilteredTags;
public OsmTileLoader(TileManager tileManager) { public OsmTileLoader(TileManager tileManager) {
super(tileManager); super(tileManager);
mFilteredTags = new TagSet();
} }
/* Replace tags that should only be matched by key in RenderTheme /* Replace tags that should only be matched by key in RenderTheme
@ -40,7 +42,7 @@ public class OsmTileLayer extends VectorTileLayer {
new TagReplacement(Tag.KEY_MIN_HEIGHT) new TagReplacement(Tag.KEY_MIN_HEIGHT)
}; };
protected boolean filterTags(TagSet tagSet) { protected TagSet filterTags(TagSet tagSet) {
Tag[] tags = tagSet.tags; Tag[] tags = tagSet.tags;
mFilteredTags.clear(); mFilteredTags.clear();
@ -58,7 +60,7 @@ public class OsmTileLayer extends VectorTileLayer {
mFilteredTags.add(t); mFilteredTags.add(t);
} }
return true; return mFilteredTags;
} }
} }
} }

View File

@ -79,8 +79,6 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
/** Line-scale-factor depending on zoom and latitude */ /** Line-scale-factor depending on zoom and latitude */
protected float mLineScale = 1.0f; protected float mLineScale = 1.0f;
protected final TagSet mFilteredTags;
public void setRenderTheme(IRenderTheme theme) { public void setRenderTheme(IRenderTheme theme) {
renderTheme = theme; renderTheme = theme;
renderLevels = theme.getLevels(); renderLevels = theme.getLevels();
@ -88,8 +86,6 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
public VectorTileLoader(TileManager tileManager) { public VectorTileLoader(TileManager tileManager) {
super(tileManager); super(tileManager);
mFilteredTags = new TagSet();
} }
@Override @Override
@ -151,11 +147,11 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
} }
} }
public void setDataSource(ITileDataSource mapDatabase) { public void setDataSource(ITileDataSource dataSource) {
if (mTileDataSource != null) if (mTileDataSource != null)
mTileDataSource.destroy(); mTileDataSource.destroy();
mTileDataSource = mapDatabase; mTileDataSource = dataSource;
} }
static class TagReplacement { static class TagReplacement {
@ -171,17 +167,14 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
/** /**
* Override this method to change tags that should be passed * Override this method to change tags that should be passed
* to {@link RenderTheme} matching. * to {@link RenderTheme} matching.
* E.g. to replace tags that should not be cached in Rendertheme
*/ */
protected boolean filterTags(TagSet tagSet) { protected TagSet filterTags(TagSet tagSet) {
mFilteredTags.clear(); return tagSet;
for (int i = 0; i < tagSet.numTags; i++)
mFilteredTags.add(tagSet.tags[i]);
return true;
} }
@Override @Override
public void process(MapElement element) { public void process(MapElement element) {
clearState();
if (isCanceled() || mTile.state(CANCEL)) if (isCanceled() || mTile.state(CANCEL))
throw new CancellationException(); throw new CancellationException();
@ -189,28 +182,20 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
mElement = element; mElement = element;
if (element.type == GeometryType.POINT) { if (element.type == GeometryType.POINT) {
// remove tags that should not be cached in Rendertheme TagSet tags = filterTags(element.tags);
filterTags(element.tags);
// get and apply render instructions /* get and apply render instructions */
renderNode(renderTheme.matchElement(element.type, mFilteredTags, mTile.zoomLevel)); renderNode(renderTheme.matchElement(element.type, tags, mTile.zoomLevel));
} else { } else {
TagSet tags = filterTags(element.tags);
// replace tags that should not be cached in Rendertheme (e.g. name)
if (!filterTags(element.tags))
return;
mCurLayer = getValidLayer(element.layer) * renderLevels; mCurLayer = getValidLayer(element.layer) * renderLevels;
// get and apply render instructions /* get and apply render instructions */
renderWay(renderTheme.matchElement(element.type, mFilteredTags, mTile.zoomLevel)); renderWay(renderTheme.matchElement(element.type, tags, mTile.zoomLevel));
//boolean closed = element.type == GeometryType.POLY;
mCurLineLayer = null;
} }
clearState();
mElement = null;
} }
//protected void debugUnmatched(boolean closed, TagSet tags) { //protected void debugUnmatched(boolean closed, TagSet tags) {
@ -243,6 +228,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
protected void clearState() { protected void clearState() {
mCurLineLayer = null; mCurLineLayer = null;
mElement = null;
} }
/*** RenderThemeCallback ***/ /*** RenderThemeCallback ***/
@ -271,7 +257,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
ll.addLine(mElement); ll.addLine(mElement);
// NB: keep reference for outline layer(s) /* keep reference for outline layer(s) */
mCurLineLayer = ll; mCurLineLayer = ll;
} else { } else {
@ -291,8 +277,8 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
} }
} }
// slower to load (requires tesselation) and uses /* slower to load (requires tesselation) and uses
// more memory but should be faster to render * more memory but should be faster to render */
protected final static boolean USE_MESH_POLY = false; protected final static boolean USE_MESH_POLY = false;
@Override @Override