Render theme styles sample improvements #93

This commit is contained in:
Emux 2016-11-09 11:44:45 +02:00
parent efa3cb0231
commit afd03809e8
2 changed files with 32 additions and 33 deletions

View File

@ -4,51 +4,47 @@
xsi:schemaLocation="http://opensciencemap.org/rendertheme https://raw.githubusercontent.com/mapsforge/vtm/master/resources/rendertheme.xsd"> xsi:schemaLocation="http://opensciencemap.org/rendertheme https://raw.githubusercontent.com/mapsforge/vtm/master/resources/rendertheme.xsd">
<stylemenu defaultlang="en" defaultvalue="1" id="menu"> <stylemenu defaultlang="en" defaultvalue="1" id="menu">
<layer enabled="true" id="sea"> <layer enabled="true" id="nature">
<name lang="de" value="Meer" /> <name lang="de" value="Natur" />
<name lang="en" value="Sea" /> <name lang="en" value="Nature" />
<name lang="es" value="Mar" /> <name lang="es" value="Naturaleza" />
<name lang="fr" value="Mer" /> <name lang="fr" value="Nature" />
<cat id="sea" /> <cat id="nature" />
</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> </layer>
<layer id="base"> <layer id="base">
<overlay id="sea" /> <cat id="sea" />
<cat id="land" />
</layer> </layer>
<!-- Sea with land --> <!-- Show nature layers (enabled by default) -->
<layer id="1" parent="base" visible="true"> <layer id="1" parent="base" visible="true">
<name lang="de" value="1" /> <name lang="de" value="1" />
<name lang="en" value="1" /> <name lang="en" value="1" />
<name lang="es" value="1" /> <name lang="es" value="1" />
<name lang="fr" value="1" /> <name lang="fr" value="1" />
<cat id="land" /> <overlay id="nature" />
</layer> </layer>
<!-- Sea without land --> <!-- Don't show nature layers -->
<layer id="2" parent="base" visible="true"> <layer id="2" parent="base" visible="true">
<name lang="de" value="2" /> <name lang="de" value="2" />
<name lang="en" value="2" /> <name lang="en" value="2" />
<name lang="es" value="2" /> <name lang="es" value="2" />
<name lang="fr" value="2" /> <name lang="fr" value="2" />
<overlay id="land" />
</layer> </layer>
</stylemenu> </stylemenu>
<m cat="sea" e="way" k="natural" v="issea|sea"> <m cat="sea" e="way" k="natural" v="issea|sea">
<area fill="#0000ff" mesh="true" /> <area fill="#b5d6f1" mesh="true" />
</m> </m>
<m cat="land" e="way" k="natural" v="nosea"> <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> </m>
</rendertheme> </rendertheme>

View File

@ -36,7 +36,6 @@ import java.util.Set;
public class MapsforgeStyleTest extends GdxMap { public class MapsforgeStyleTest extends GdxMap {
private static File mapFile; private static File mapFile;
private String style;
@Override @Override
public void createLayers() { public void createLayers() {
@ -45,7 +44,7 @@ public class MapsforgeStyleTest extends GdxMap {
tileSource.setPreferredLanguage("en"); tileSource.setPreferredLanguage("en");
VectorTileLayer l = mMap.setBaseMap(tileSource); VectorTileLayer l = mMap.setBaseMap(tileSource);
loadTheme(); loadTheme(null);
mMap.layers().add(new BuildingLayer(mMap, l)); mMap.layers().add(new BuildingLayer(mMap, l));
mMap.layers().add(new LabelLayer(mMap, l)); mMap.layers().add(new LabelLayer(mMap, l));
@ -72,23 +71,31 @@ public class MapsforgeStyleTest extends GdxMap {
return file; return file;
} }
private void loadTheme() { private void loadTheme(final String styleId) {
mMap.setTheme(new StreamRenderTheme("", getClass().getResourceAsStream("/assets/styles/style.xml"), new XmlRenderThemeMenuCallback() { mMap.setTheme(new StreamRenderTheme("", getClass().getResourceAsStream("/assets/styles/style.xml"), new XmlRenderThemeMenuCallback() {
@Override @Override
public Set<String> getCategories(XmlRenderThemeStyleMenu renderThemeStyleMenu) { public Set<String> getCategories(XmlRenderThemeStyleMenu renderThemeStyleMenu) {
if (style == null) // Use the selected style or the default
style = renderThemeStyleMenu.getDefaultValue(); String style = styleId != null ? styleId : renderThemeStyleMenu.getDefaultValue();
// Retrieve the layer from the style id
XmlRenderThemeStyleLayer renderThemeStyleLayer = renderThemeStyleMenu.getLayer(style); XmlRenderThemeStyleLayer renderThemeStyleLayer = renderThemeStyleMenu.getLayer(style);
if (renderThemeStyleLayer == null) { if (renderThemeStyleLayer == null) {
System.err.println("Invalid style " + style); System.err.println("Invalid style " + style);
return null; return null;
} }
// First get the selected layer's categories that are enabled together
Set<String> categories = renderThemeStyleLayer.getCategories(); 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()) { for (XmlRenderThemeStyleLayer overlay : renderThemeStyleLayer.getOverlays()) {
if (overlay.isEnabled()) if (overlay.isEnabled())
categories.addAll(overlay.getCategories()); categories.addAll(overlay.getCategories());
} }
// This is the whole categories set to be enabled
return categories; return categories;
} }
})); }));
@ -98,15 +105,11 @@ public class MapsforgeStyleTest extends GdxMap {
protected boolean onKeyDown(int keycode) { protected boolean onKeyDown(int keycode) {
switch (keycode) { switch (keycode) {
case Input.Keys.NUM_1: case Input.Keys.NUM_1:
System.out.println("Sea with land"); loadTheme("1");
style = "1";
loadTheme();
mMap.clearMap(); mMap.clearMap();
return true; return true;
case Input.Keys.NUM_2: case Input.Keys.NUM_2:
System.out.println("Sea without land"); loadTheme("2");
style = "2";
loadTheme();
mMap.clearMap(); mMap.clearMap();
return true; return true;
} }