Mapsforge themes: use tessellation, fix #415
This commit is contained in:
parent
7ba5984e5f
commit
67195bbc0c
@ -27,21 +27,28 @@ import org.oscim.android.filepicker.FilePicker;
|
|||||||
import org.oscim.android.filepicker.FilterByFileExtension;
|
import org.oscim.android.filepicker.FilterByFileExtension;
|
||||||
import org.oscim.android.filepicker.ValidMapFile;
|
import org.oscim.android.filepicker.ValidMapFile;
|
||||||
import org.oscim.android.filepicker.ValidRenderTheme;
|
import org.oscim.android.filepicker.ValidRenderTheme;
|
||||||
|
import org.oscim.core.MapElement;
|
||||||
import org.oscim.core.MapPosition;
|
import org.oscim.core.MapPosition;
|
||||||
|
import org.oscim.core.Tag;
|
||||||
import org.oscim.core.Tile;
|
import org.oscim.core.Tile;
|
||||||
import org.oscim.layers.TileGridLayer;
|
import org.oscim.layers.TileGridLayer;
|
||||||
|
import org.oscim.layers.tile.MapTile;
|
||||||
import org.oscim.layers.tile.buildings.BuildingLayer;
|
import org.oscim.layers.tile.buildings.BuildingLayer;
|
||||||
import org.oscim.layers.tile.vector.VectorTileLayer;
|
import org.oscim.layers.tile.vector.VectorTileLayer;
|
||||||
import org.oscim.layers.tile.vector.labeling.LabelLayer;
|
import org.oscim.layers.tile.vector.labeling.LabelLayer;
|
||||||
import org.oscim.renderer.BitmapRenderer;
|
import org.oscim.renderer.BitmapRenderer;
|
||||||
import org.oscim.renderer.GLViewport;
|
import org.oscim.renderer.GLViewport;
|
||||||
|
import org.oscim.renderer.bucket.RenderBuckets;
|
||||||
import org.oscim.scalebar.DefaultMapScaleBar;
|
import org.oscim.scalebar.DefaultMapScaleBar;
|
||||||
import org.oscim.scalebar.ImperialUnitAdapter;
|
import org.oscim.scalebar.ImperialUnitAdapter;
|
||||||
import org.oscim.scalebar.MapScaleBar;
|
import org.oscim.scalebar.MapScaleBar;
|
||||||
import org.oscim.scalebar.MapScaleBarLayer;
|
import org.oscim.scalebar.MapScaleBarLayer;
|
||||||
import org.oscim.scalebar.MetricUnitAdapter;
|
import org.oscim.scalebar.MetricUnitAdapter;
|
||||||
import org.oscim.theme.ExternalRenderTheme;
|
import org.oscim.theme.ExternalRenderTheme;
|
||||||
|
import org.oscim.theme.ThemeUtils;
|
||||||
import org.oscim.theme.VtmThemes;
|
import org.oscim.theme.VtmThemes;
|
||||||
|
import org.oscim.theme.styles.AreaStyle;
|
||||||
|
import org.oscim.theme.styles.RenderStyle;
|
||||||
import org.oscim.tiling.source.mapfile.MapFileTileSource;
|
import org.oscim.tiling.source.mapfile.MapFileTileSource;
|
||||||
import org.oscim.tiling.source.mapfile.MapInfo;
|
import org.oscim.tiling.source.mapfile.MapInfo;
|
||||||
|
|
||||||
@ -50,9 +57,14 @@ public class MapsforgeMapActivity extends MapActivity {
|
|||||||
static final int SELECT_MAP_FILE = 0;
|
static final int SELECT_MAP_FILE = 0;
|
||||||
static final int SELECT_THEME_FILE = SELECT_MAP_FILE + 1;
|
static final int SELECT_THEME_FILE = SELECT_MAP_FILE + 1;
|
||||||
|
|
||||||
|
private static final Tag ISSEA_TAG = new Tag("natural", "issea");
|
||||||
|
private static final Tag NOSEA_TAG = new Tag("natural", "nosea");
|
||||||
|
private static final Tag SEA_TAG = new Tag("natural", "sea");
|
||||||
|
|
||||||
private TileGridLayer mGridLayer;
|
private TileGridLayer mGridLayer;
|
||||||
private DefaultMapScaleBar mMapScaleBar;
|
private DefaultMapScaleBar mMapScaleBar;
|
||||||
private Menu mMenu;
|
private Menu mMenu;
|
||||||
|
private VectorTileLayer mTileLayer;
|
||||||
MapFileTileSource mTileSource;
|
MapFileTileSource mTileSource;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -158,11 +170,11 @@ public class MapsforgeMapActivity extends MapActivity {
|
|||||||
String file = intent.getStringExtra(FilePicker.SELECTED_FILE);
|
String file = intent.getStringExtra(FilePicker.SELECTED_FILE);
|
||||||
if (mTileSource.setMapFile(file)) {
|
if (mTileSource.setMapFile(file)) {
|
||||||
|
|
||||||
VectorTileLayer l = mMap.setBaseMap(mTileSource);
|
mTileLayer = mMap.setBaseMap(mTileSource);
|
||||||
loadTheme(null);
|
loadTheme(null);
|
||||||
|
|
||||||
mMap.layers().add(new BuildingLayer(mMap, l));
|
mMap.layers().add(new BuildingLayer(mMap, mTileLayer));
|
||||||
mMap.layers().add(new LabelLayer(mMap, l));
|
mMap.layers().add(new LabelLayer(mMap, mTileLayer));
|
||||||
|
|
||||||
mMapScaleBar = new DefaultMapScaleBar(mMap);
|
mMapScaleBar = new DefaultMapScaleBar(mMap);
|
||||||
mMapScaleBar.setScaleBarMode(DefaultMapScaleBar.ScaleBarMode.BOTH);
|
mMapScaleBar.setScaleBarMode(DefaultMapScaleBar.ScaleBarMode.BOTH);
|
||||||
@ -190,6 +202,25 @@ public class MapsforgeMapActivity extends MapActivity {
|
|||||||
|
|
||||||
String file = intent.getStringExtra(FilePicker.SELECTED_FILE);
|
String file = intent.getStringExtra(FilePicker.SELECTED_FILE);
|
||||||
ExternalRenderTheme externalRenderTheme = new ExternalRenderTheme(file);
|
ExternalRenderTheme externalRenderTheme = new ExternalRenderTheme(file);
|
||||||
|
|
||||||
|
// Use tessellation with sea and land for Mapsforge themes
|
||||||
|
if (ThemeUtils.isMapsforgeTheme(externalRenderTheme)) {
|
||||||
|
mTileLayer.addHook(new VectorTileLayer.TileLoaderThemeHook() {
|
||||||
|
@Override
|
||||||
|
public boolean process(MapTile tile, RenderBuckets buckets, MapElement element, RenderStyle style, int level) {
|
||||||
|
if (element.tags.contains(ISSEA_TAG) || element.tags.contains(SEA_TAG) || element.tags.contains(NOSEA_TAG)) {
|
||||||
|
if (style instanceof AreaStyle)
|
||||||
|
((AreaStyle) style).mesh = true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void complete(MapTile tile, boolean success) {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
mMap.setTheme(externalRenderTheme);
|
mMap.setTheme(externalRenderTheme);
|
||||||
mMenu.findItem(R.id.theme_external).setChecked(true);
|
mMenu.findItem(R.id.theme_external).setChecked(true);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2012-2014 Hannes Janetzek
|
* Copyright 2012-2014 Hannes Janetzek
|
||||||
* Copyright 2016 devemux86
|
* Copyright 2016-2017 devemux86
|
||||||
*
|
*
|
||||||
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
|
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
|
||||||
*
|
*
|
||||||
@ -308,6 +308,8 @@ public class VectorTileLoader extends TileLoader implements RenderStyle.Callback
|
|||||||
|
|
||||||
int nLevel = mCurBucket + level;
|
int nLevel = mCurBucket + level;
|
||||||
|
|
||||||
|
mTileLayer.callThemeHooks(mTile, mBuckets, mElement, area, nLevel);
|
||||||
|
|
||||||
if (USE_MESH_POLY || area.mesh) {
|
if (USE_MESH_POLY || area.mesh) {
|
||||||
MeshBucket mb = mBuckets.getMeshBucket(nLevel);
|
MeshBucket mb = mBuckets.getMeshBucket(nLevel);
|
||||||
mb.area = area;
|
mb.area = area;
|
||||||
|
@ -76,7 +76,7 @@ public class AreaStyle extends RenderStyle<AreaStyle> {
|
|||||||
/**
|
/**
|
||||||
* Tessellation
|
* Tessellation
|
||||||
*/
|
*/
|
||||||
public final boolean mesh;
|
public boolean mesh;
|
||||||
|
|
||||||
public final float heightOffset;
|
public final float heightOffset;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user