package org.oscim.layers.tile.vector;
import org.oscim.core.Tag;
import org.oscim.core.TagSet;
import org.oscim.layers.tile.TileLoader;
import org.oscim.map.Map;
public class OsmTileLayer extends VectorTileLayer {
protected final static int MAX_ZOOMLEVEL = 17;
protected final static int MIN_ZOOMLEVEL = 2;
protected final static int CACHE_LIMIT = 150;
public OsmTileLayer(Map map) {
super(map, CACHE_LIMIT);
mTileManager.setZoomLevel(MIN_ZOOMLEVEL, MAX_ZOOMLEVEL);
}
@Override
protected TileLoader createLoader() {
return new OsmTileLoader(this);
}
static class OsmTileLoader extends VectorTileLoader {
private final TagSet mFilteredTags;
public OsmTileLoader(VectorTileLayer tileLayer) {
super(tileLayer);
mFilteredTags = new TagSet();
}
/* Replace tags that should only be matched by key in RenderTheme
* to avoid caching RenderInstructions for each way of the same type
* only with different name.
* Maybe this should be done within RenderTheme, also allowing
* to set these replacement rules in theme file. */
private static final TagReplacement[] mTagReplacement = {
new TagReplacement(Tag.KEY_NAME),
new TagReplacement(Tag.KEY_HOUSE_NUMBER),
new TagReplacement(Tag.KEY_REF),
new TagReplacement(Tag.KEY_HEIGHT),
new TagReplacement(Tag.KEY_MIN_HEIGHT)
};
protected TagSet filterTags(TagSet tagSet) {
Tag[] tags = tagSet.tags;
mFilteredTags.clear();
O: for (int i = 0, n = tagSet.numTags; i < n; i++) {
Tag t = tags[i];
for (TagReplacement replacement : mTagReplacement) {
if (t.key == replacement.key) {
mFilteredTags.add(replacement.tag);
continue O;
}
}
mFilteredTags.add(t);
}
return mFilteredTags;
}
}
}