From 7498d58878356ee4a50a88a53c4b6d11377952a8 Mon Sep 17 00:00:00 2001 From: Gustl22 Date: Sat, 2 Mar 2019 14:10:21 +0100 Subject: [PATCH] BuildingLayer: tag-transform color values (#683) --- .../layers/tile/buildings/BuildingLayer.java | 32 +++++++++++++++++++ .../layers/tile/buildings/S3DBLayer.java | 10 +++--- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/vtm/src/org/oscim/layers/tile/buildings/BuildingLayer.java b/vtm/src/org/oscim/layers/tile/buildings/BuildingLayer.java index 7af4d812..7ca9271c 100644 --- a/vtm/src/org/oscim/layers/tile/buildings/BuildingLayer.java +++ b/vtm/src/org/oscim/layers/tile/buildings/BuildingLayer.java @@ -270,6 +270,9 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook, ZoomLim return mExtrusionRenderer; } + /** + * @return the tile source tag key or library tag key as fallback + */ protected String getKeyOrDefault(String key) { if (mTileLayer.getTheme() == null) return key; @@ -277,6 +280,35 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook, ZoomLim return res != null ? res : key; } + /** + * Get the forward transformed value from tile source tag via the library tag key. + * + * @param key the library tag key + * @return the tile source tag value transformed to library tag value + */ + protected String getTransformedValue(MapElement element, String key) { + if (mTileLayer.getTheme() == null) + return element.tags.getValue(key); + /* Get tile source key of specified lib key from theme or fall back to lib key */ + key = getKeyOrDefault(key); + /* Get element tag with tile source key, if exists */ + Tag tsTag = element.tags.get(key); + if (tsTag == null) + return null; + /* Transform tile source tag to lib tag */ + Tag libTag = mTileLayer.getTheme().transformForwardTag(tsTag); + if (libTag != null) + return libTag.value; + /* Use tile source value, if transformation rule not exists */ + return tsTag.value; + } + + /** + * Get the tile source tag value via the library tag key. + * + * @param key the library tag key + * @return the tile source tag value of specified library tag key + */ protected String getValue(MapElement element, String key) { return element.tags.getValue(getKeyOrDefault(key)); } diff --git a/vtm/src/org/oscim/layers/tile/buildings/S3DBLayer.java b/vtm/src/org/oscim/layers/tile/buildings/S3DBLayer.java index be14fc41..0f91cd49 100644 --- a/vtm/src/org/oscim/layers/tile/buildings/S3DBLayer.java +++ b/vtm/src/org/oscim/layers/tile/buildings/S3DBLayer.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Gustl22 + * Copyright 2018-2019 Gustl22 * Copyright 2018-2019 devemux86 * * This program is free software: you can redistribute it and/or modify it under the @@ -158,9 +158,9 @@ public class S3DBLayer extends BuildingLayer { // Get building color Integer bColor = null; if (mColored) { - if ((v = getValue(element, Tag.KEY_BUILDING_COLOR)) != null) { + if ((v = getTransformedValue(element, Tag.KEY_BUILDING_COLOR)) != null) { bColor = S3DBUtils.getColor(v, false, false); - } else if ((v = getValue(element, Tag.KEY_BUILDING_MATERIAL)) != null) { + } else if ((v = getTransformedValue(element, Tag.KEY_BUILDING_MATERIAL)) != null) { bColor = S3DBUtils.getMaterialColor(v, false); } } @@ -261,10 +261,10 @@ public class S3DBLayer extends BuildingLayer { String v; if (mColored) { - v = getValue(element, Tag.KEY_ROOF_COLOR); + v = getTransformedValue(element, Tag.KEY_ROOF_COLOR); if (v != null) roofColor = S3DBUtils.getColor(v, true, false); - else if ((v = getValue(element, Tag.KEY_ROOF_MATERIAL)) != null) + else if ((v = getTransformedValue(element, Tag.KEY_ROOF_MATERIAL)) != null) roofColor = S3DBUtils.getMaterialColor(v, true); }