From afd03809e8bd060bde9421276f94934fb2f87008 Mon Sep 17 00:00:00 2001 From: Emux <devemux86@gmail.com> Date: Wed, 9 Nov 2016 11:44:45 +0200 Subject: [PATCH] Render theme styles sample improvements #93 --- .../resources/assets/styles/style.xml | 38 +++++++++---------- .../org/oscim/test/MapsforgeStyleTest.java | 27 +++++++------ 2 files changed, 32 insertions(+), 33 deletions(-) diff --git a/vtm-playground/resources/assets/styles/style.xml b/vtm-playground/resources/assets/styles/style.xml index b3fa9ea2..695ffb54 100644 --- a/vtm-playground/resources/assets/styles/style.xml +++ b/vtm-playground/resources/assets/styles/style.xml @@ -4,51 +4,47 @@ xsi:schemaLocation="http://opensciencemap.org/rendertheme https://raw.githubusercontent.com/mapsforge/vtm/master/resources/rendertheme.xsd"> <stylemenu defaultlang="en" defaultvalue="1" id="menu"> - <layer enabled="true" id="sea"> - <name lang="de" value="Meer" /> - <name lang="en" value="Sea" /> - <name lang="es" value="Mar" /> - <name lang="fr" value="Mer" /> - <cat id="sea" /> - </layer> - - <layer id="land"> - <name lang="de" value="Land" /> - <name lang="en" value="Land" /> - <name lang="es" value="Tierra" /> - <name lang="fr" value="Terrain" /> - <cat id="land" /> + <layer enabled="true" id="nature"> + <name lang="de" value="Natur" /> + <name lang="en" value="Nature" /> + <name lang="es" value="Naturaleza" /> + <name lang="fr" value="Nature" /> + <cat id="nature" /> </layer> <layer id="base"> - <overlay id="sea" /> + <cat id="sea" /> + <cat id="land" /> </layer> - <!-- Sea with land --> + <!-- Show nature layers (enabled by default) --> <layer id="1" parent="base" visible="true"> <name lang="de" value="1" /> <name lang="en" value="1" /> <name lang="es" value="1" /> <name lang="fr" value="1" /> - <cat id="land" /> + <overlay id="nature" /> </layer> - <!-- Sea without land --> + <!-- Don't show nature layers --> <layer id="2" parent="base" visible="true"> <name lang="de" value="2" /> <name lang="en" value="2" /> <name lang="es" value="2" /> <name lang="fr" value="2" /> - <overlay id="land" /> </layer> </stylemenu> <m cat="sea" e="way" k="natural" v="issea|sea"> - <area fill="#0000ff" mesh="true" /> + <area fill="#b5d6f1" mesh="true" /> </m> <m cat="land" e="way" k="natural" v="nosea"> - <area fill="#00ff00" mesh="true" /> + <area fill="#f8f8f8" mesh="true" /> + </m> + + <m cat="nature" e="way" k="natural|landuse" v="forest|wood"> + <area fill="#83aa5b" /> </m> </rendertheme> diff --git a/vtm-playground/src/org/oscim/test/MapsforgeStyleTest.java b/vtm-playground/src/org/oscim/test/MapsforgeStyleTest.java index fb911dcb..7de4f8a9 100644 --- a/vtm-playground/src/org/oscim/test/MapsforgeStyleTest.java +++ b/vtm-playground/src/org/oscim/test/MapsforgeStyleTest.java @@ -36,7 +36,6 @@ import java.util.Set; public class MapsforgeStyleTest extends GdxMap { private static File mapFile; - private String style; @Override public void createLayers() { @@ -45,7 +44,7 @@ public class MapsforgeStyleTest extends GdxMap { tileSource.setPreferredLanguage("en"); VectorTileLayer l = mMap.setBaseMap(tileSource); - loadTheme(); + loadTheme(null); mMap.layers().add(new BuildingLayer(mMap, l)); mMap.layers().add(new LabelLayer(mMap, l)); @@ -72,23 +71,31 @@ public class MapsforgeStyleTest extends GdxMap { return file; } - private void loadTheme() { + private void loadTheme(final String styleId) { mMap.setTheme(new StreamRenderTheme("", getClass().getResourceAsStream("/assets/styles/style.xml"), new XmlRenderThemeMenuCallback() { @Override public Set<String> getCategories(XmlRenderThemeStyleMenu renderThemeStyleMenu) { - if (style == null) - style = renderThemeStyleMenu.getDefaultValue(); + // Use the selected style or the default + String style = styleId != null ? styleId : renderThemeStyleMenu.getDefaultValue(); + + // Retrieve the layer from the style id XmlRenderThemeStyleLayer renderThemeStyleLayer = renderThemeStyleMenu.getLayer(style); if (renderThemeStyleLayer == null) { System.err.println("Invalid style " + style); return null; } + + // First get the selected layer's categories that are enabled together Set<String> categories = renderThemeStyleLayer.getCategories(); - // Add the categories from overlays that are enabled + + // Then add the selected layer's overlays that are enabled individually + // Here we use the style menu, but users can use their own preferences for (XmlRenderThemeStyleLayer overlay : renderThemeStyleLayer.getOverlays()) { if (overlay.isEnabled()) categories.addAll(overlay.getCategories()); } + + // This is the whole categories set to be enabled return categories; } })); @@ -98,15 +105,11 @@ public class MapsforgeStyleTest extends GdxMap { protected boolean onKeyDown(int keycode) { switch (keycode) { case Input.Keys.NUM_1: - System.out.println("Sea with land"); - style = "1"; - loadTheme(); + loadTheme("1"); mMap.clearMap(); return true; case Input.Keys.NUM_2: - System.out.println("Sea without land"); - style = "2"; - loadTheme(); + loadTheme("2"); mMap.clearMap(); return true; }