more work on building layer

This commit is contained in:
Hannes Janetzek
2013-01-03 18:29:13 +01:00
parent 74ca621de0
commit eb278585fa
22 changed files with 1105 additions and 79 deletions

View File

@@ -24,6 +24,7 @@ import org.oscim.database.IMapDatabaseCallback;
import org.oscim.database.QueryResult;
import org.oscim.renderer.MapTile;
import org.oscim.renderer.WayDecorator;
import org.oscim.renderer.layer.ExtrusionLayer;
import org.oscim.renderer.layer.Layer;
import org.oscim.renderer.layer.Layers;
import org.oscim.renderer.layer.LineLayer;
@@ -103,6 +104,7 @@ public class TileGenerator implements IRenderCallback, IMapDatabaseCallback {
private float mProjectionScaleFactor;
private float mPoiX, mPoiY;
private int mPriority;
private Tag mTagEmptyName = new Tag(Tag.TAG_KEY_NAME, null, false);
private Tag mTagName;
@@ -159,6 +161,14 @@ public class TileGenerator implements IRenderCallback, IMapDatabaseCallback {
mLayers = new Layers();
//Log.d(TAG, "loading: " + tile);
//if ((tile.zoomLevel != 17) || (tile.tileX == 68752 && tile.tileY == 42640))
//if ((tile.zoomLevel != 17) || (tile.tileX == 68743 && tile.tileY == 42681))
//if ((tile.zoomLevel != 17) || (tile.tileX == 68736 && tile.tileY == 42653))
// TODO: building with non simple holes (Berlin):
//if ((tile.zoomLevel != 17) || (tile.tileX == 70428 && tile.tileY == 43009)),
//if ((tile.zoomLevel != 17) || (tile.tileX == 70463 && tile.tileY == 42990))
if (mMapDatabase.executeQuery(tile, this) != QueryResult.SUCCESS) {
//Log.d(TAG, "Failed loading: " + tile);
mLayers.clear();
@@ -188,6 +198,9 @@ public class TileGenerator implements IRenderCallback, IMapDatabaseCallback {
mLayers = null;
mLabels = null;
if (tile.layers.extrusionLayers != null)
((ExtrusionLayer) tile.layers.extrusionLayers).ready = true;
return true;
}
@@ -226,16 +239,19 @@ public class TileGenerator implements IRenderCallback, IMapDatabaseCallback {
return mMapDatabase;
}
private boolean mRenderBuildingModel;
private boolean filterTags(Tag[] tags) {
mRenderBuildingModel = false;
for (int i = 0; i < tags.length; i++) {
String key = tags[i].key;
if (key == Tag.TAG_KEY_NAME) {
if (tags[i].key == Tag.TAG_KEY_NAME) {
mTagName = tags[i];
tags[i] = mTagEmptyName;
} else if (mCurrentTile.zoomLevel >= 17 &&
key == TAG_BUILDING) {
return false;
mRenderBuildingModel = true;
}
}
return true;
@@ -292,20 +308,19 @@ public class TileGenerator implements IRenderCallback, IMapDatabaseCallback {
@Override
public void renderWay(byte layer, Tag[] tags, float[] coords, short[] indices,
boolean closed) {
boolean closed, int prio) {
// reset state
mTagName = null;
mCurLineLayer = null;
mPriority = prio;
mClosed = closed;
// replace tags that should not be cached in Rendertheme (e.g. name)
if (!filterTags(tags))
return;
mDrawingLayer = getValidLayer(layer) * mLevels;
// mProjected = false;
// mSimplify = 0.5f;
// if (closed) {
@@ -317,6 +332,7 @@ public class TileGenerator implements IRenderCallback, IMapDatabaseCallback {
// mSimplify = 0;
// }
mDrawingLayer = getValidLayer(layer) * mLevels;
mCoords = coords;
mIndices = indices;
@@ -394,14 +410,24 @@ public class TileGenerator implements IRenderCallback, IMapDatabaseCallback {
@Override
public void renderArea(Area area, int level) {
int numLayer = mDrawingLayer + level;
if (mRenderBuildingModel) {
//Log.d(TAG, "add buildings: " + mCurrentTile + " " + mPriority);
if (mLayers.extrusionLayers == null)
mLayers.extrusionLayers = new ExtrusionLayer(0);
((ExtrusionLayer) mLayers.extrusionLayers).addBuildings(mCoords, mIndices, mPriority);
return;
}
if (!mDebugDrawPolygons)
return;
// if (!mProjected && !projectToTile())
// return;
int numLayer = mDrawingLayer + level;
PolygonLayer layer = (PolygonLayer) mLayers.getLayer(numLayer, Layer.POLYGON);
if (layer == null)
return;