diff --git a/vtm-playground/resources/assets/styles/style.xml b/vtm-playground/resources/assets/styles/style.xml
new file mode 100644
index 00000000..b3fa9ea2
--- /dev/null
+++ b/vtm-playground/resources/assets/styles/style.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vtm-playground/src/org/oscim/test/MapsforgeStyleTest.java b/vtm-playground/src/org/oscim/test/MapsforgeStyleTest.java
new file mode 100644
index 00000000..fb911dcb
--- /dev/null
+++ b/vtm-playground/src/org/oscim/test/MapsforgeStyleTest.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2016 devemux86
+ *
+ * This program is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License along with
+ * this program. If not, see .
+ */
+package org.oscim.test;
+
+import com.badlogic.gdx.Input;
+
+import org.oscim.core.MapPosition;
+import org.oscim.core.Tile;
+import org.oscim.gdx.GdxMap;
+import org.oscim.gdx.GdxMapApp;
+import org.oscim.layers.tile.buildings.BuildingLayer;
+import org.oscim.layers.tile.vector.VectorTileLayer;
+import org.oscim.layers.tile.vector.labeling.LabelLayer;
+import org.oscim.theme.StreamRenderTheme;
+import org.oscim.theme.XmlRenderThemeMenuCallback;
+import org.oscim.theme.XmlRenderThemeStyleLayer;
+import org.oscim.theme.XmlRenderThemeStyleMenu;
+import org.oscim.tiling.source.mapfile.MapFileTileSource;
+import org.oscim.tiling.source.mapfile.MapInfo;
+
+import java.io.File;
+import java.util.Set;
+
+public class MapsforgeStyleTest extends GdxMap {
+
+ private static File mapFile;
+ private String style;
+
+ @Override
+ public void createLayers() {
+ MapFileTileSource tileSource = new MapFileTileSource();
+ tileSource.setMapFile(mapFile.getAbsolutePath());
+ tileSource.setPreferredLanguage("en");
+
+ VectorTileLayer l = mMap.setBaseMap(tileSource);
+ loadTheme();
+
+ mMap.layers().add(new BuildingLayer(mMap, l));
+ mMap.layers().add(new LabelLayer(mMap, l));
+
+ MapInfo info = tileSource.getMapInfo();
+ MapPosition pos = new MapPosition();
+ pos.setByBoundingBox(info.boundingBox, Tile.SIZE * 4, Tile.SIZE * 4);
+ mMap.setMapPosition(pos);
+ }
+
+ private static File getMapFile(String[] args) {
+ if (args.length == 0) {
+ throw new IllegalArgumentException("missing argument: ");
+ }
+
+ File file = new File(args[0]);
+ if (!file.exists()) {
+ throw new IllegalArgumentException("file does not exist: " + file);
+ } else if (!file.isFile()) {
+ throw new IllegalArgumentException("not a file: " + file);
+ } else if (!file.canRead()) {
+ throw new IllegalArgumentException("cannot read file: " + file);
+ }
+ return file;
+ }
+
+ private void loadTheme() {
+ mMap.setTheme(new StreamRenderTheme("", getClass().getResourceAsStream("/assets/styles/style.xml"), new XmlRenderThemeMenuCallback() {
+ @Override
+ public Set getCategories(XmlRenderThemeStyleMenu renderThemeStyleMenu) {
+ if (style == null)
+ style = renderThemeStyleMenu.getDefaultValue();
+ XmlRenderThemeStyleLayer renderThemeStyleLayer = renderThemeStyleMenu.getLayer(style);
+ if (renderThemeStyleLayer == null) {
+ System.err.println("Invalid style " + style);
+ return null;
+ }
+ Set categories = renderThemeStyleLayer.getCategories();
+ // Add the categories from overlays that are enabled
+ for (XmlRenderThemeStyleLayer overlay : renderThemeStyleLayer.getOverlays()) {
+ if (overlay.isEnabled())
+ categories.addAll(overlay.getCategories());
+ }
+ return categories;
+ }
+ }));
+ }
+
+ @Override
+ protected boolean onKeyDown(int keycode) {
+ switch (keycode) {
+ case Input.Keys.NUM_1:
+ System.out.println("Sea with land");
+ style = "1";
+ loadTheme();
+ mMap.clearMap();
+ return true;
+ case Input.Keys.NUM_2:
+ System.out.println("Sea without land");
+ style = "2";
+ loadTheme();
+ mMap.clearMap();
+ return true;
+ }
+
+ return super.onKeyDown(keycode);
+ }
+
+ public static void main(String[] args) {
+ mapFile = getMapFile(args);
+
+ GdxMapApp.init();
+ GdxMapApp.run(new MapsforgeStyleTest());
+ }
+}