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">
<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>

View File

@ -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;
}