extract ThemeLoader from MapTileLayer
This commit is contained in:
parent
e29c36d6e7
commit
5e9b517f50
@ -3,12 +3,12 @@ package org.oscim.android.test;
|
||||
import org.oscim.android.AndroidMapView;
|
||||
import org.oscim.layers.labeling.LabelLayer;
|
||||
import org.oscim.layers.overlay.BuildingOverlay;
|
||||
import org.oscim.layers.overlay.GenericOverlay;
|
||||
import org.oscim.layers.tile.bitmap.BitmapTileLayer;
|
||||
import org.oscim.layers.tile.bitmap.HillShadeTiles;
|
||||
import org.oscim.layers.tile.vector.MapTileLayer;
|
||||
import org.oscim.renderer.layers.GridRenderLayer;
|
||||
import org.oscim.theme.InternalRenderTheme;
|
||||
import org.oscim.tilesource.TileSource;
|
||||
import org.oscim.tilesource.oscimap4.OSciMap4TileSource;
|
||||
import org.oscim.tilesource.oscimap2.OSciMap2TileSource;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.Menu;
|
||||
@ -24,23 +24,26 @@ public class MapActivity extends org.oscim.android.MapActivity {
|
||||
mAndroidMapView = (AndroidMapView) findViewById(R.id.mapView);
|
||||
|
||||
//mMap = mMapView.getMap();
|
||||
//TileSource tileSource = new OSciMap2TileSource();
|
||||
//tileSource.setOption("url", "http://city.informatik.uni-bremen.de/osci/map-live");
|
||||
TileSource tileSource = new OSciMap2TileSource();
|
||||
tileSource.setOption("url", "http://city.informatik.uni-bremen.de/osci/map-live");
|
||||
|
||||
TileSource tileSource = new OSciMap4TileSource();
|
||||
tileSource.setOption("url", "http://city.informatik.uni-bremen.de/osci/testing");
|
||||
//TileSource tileSource = new OSciMap4TileSource();
|
||||
//tileSource.setOption("url", "http://city.informatik.uni-bremen.de/osci/testing");
|
||||
|
||||
MapTileLayer l = mMapView.setBaseMap(tileSource);
|
||||
//mMapView.setDebugSettings(new DebugSettings(false, false, true, false, false));
|
||||
|
||||
mMapView.getLayerManager().add(new BuildingOverlay(mMapView, l.getTileLayer()));
|
||||
mMapView.getLayerManager().add(new LabelLayer(mMapView, l.getTileLayer()));
|
||||
|
||||
l.setRenderTheme(InternalRenderTheme.DEFAULT);
|
||||
//l.setRenderTheme(InternalRenderTheme.TRONRENDER);
|
||||
mMapView.setTheme(InternalRenderTheme.DEFAULT);
|
||||
//mMapView.setTheme(InternalRenderTheme.TRONRENDER);
|
||||
|
||||
mMapView.getLayerManager().add(new BitmapTileLayer(mMapView, HillShadeTiles.INSTANCE));
|
||||
|
||||
//mMapView.setBackgroundMap(new BitmapTileLayer(mMapView, StamenWaterTiles.INSTANCE));
|
||||
//mMap.setBackgroundMap(new BitmapTileLayer(mMap, MapQuestAerial.INSTANCE));
|
||||
|
||||
mMapView.getLayerManager().add(new GenericOverlay(mMapView, new GridRenderLayer(mMapView)));
|
||||
//mMapView.getLayerManager().add(new GenericOverlay(mMapView, new GridRenderLayer(mMapView)));
|
||||
|
||||
mAndroidMapView.setClickable(true);
|
||||
mAndroidMapView.setFocusable(true);
|
||||
|
@ -10,6 +10,7 @@ import org.oscim.layers.tile.vector.MapTileLayer;
|
||||
import org.oscim.renderer.GLRenderer;
|
||||
import org.oscim.renderer.GLState;
|
||||
import org.oscim.theme.InternalRenderTheme;
|
||||
import org.oscim.theme.ThemeLoader;
|
||||
import org.oscim.tilesource.TileSource;
|
||||
import org.oscim.view.MapRenderCallback;
|
||||
import org.oscim.view.MapView;
|
||||
@ -69,7 +70,7 @@ public class GdxMap implements ApplicationListener, MapRenderCallback {
|
||||
// TileSource tileSource = new TestTileSource();
|
||||
|
||||
mMapLayer = mMapView.setBaseMap(mTileSource);
|
||||
mMapLayer.setRenderTheme(InternalRenderTheme.DEFAULT);
|
||||
mMapView.setTheme(InternalRenderTheme.DEFAULT);
|
||||
|
||||
mMapView.getLayerManager().add(new BuildingOverlay(mMapView, mMapLayer.getTileLayer()));
|
||||
mMapView.getLayerManager().add(new LabelLayer(mMapView, mMapLayer.getTileLayer()));
|
||||
@ -87,8 +88,9 @@ public class GdxMap implements ApplicationListener, MapRenderCallback {
|
||||
|
||||
mMapView.getMapViewPosition().setViewport(w, h);
|
||||
MapPosition p = new MapPosition();
|
||||
p.setZoomLevel(17);
|
||||
p.setPosition(53.08, 8.83);
|
||||
p.setZoomLevel(3);
|
||||
//p.setPosition(53.08, 8.83);
|
||||
p.setPosition(0.0, 0.0);
|
||||
mMapView.setMapPosition(p);
|
||||
|
||||
mMapRenderer.onSurfaceCreated();
|
||||
@ -264,18 +266,18 @@ public class GdxMap implements ApplicationListener, MapRenderCallback {
|
||||
mMapView.updateMap(true);
|
||||
break;
|
||||
|
||||
case Input.Keys.R:
|
||||
mMapLayer.reloadTheme();
|
||||
mMapView.updateMap(false);
|
||||
break;
|
||||
// case Input.Keys.R:
|
||||
// mMapLayer.reloadTheme();
|
||||
// mMapView.updateMap(false);
|
||||
// break;
|
||||
|
||||
case Input.Keys.D:
|
||||
mMapLayer.setRenderTheme(InternalRenderTheme.DEFAULT);
|
||||
mMapView.setTheme(InternalRenderTheme.DEFAULT);
|
||||
mMapView.updateMap(false);
|
||||
break;
|
||||
|
||||
case Input.Keys.T:
|
||||
mMapLayer.setRenderTheme(InternalRenderTheme.TRONRENDER);
|
||||
mMapView.setTheme(InternalRenderTheme.TRONRENDER);
|
||||
mMapView.updateMap(false);
|
||||
break;
|
||||
|
||||
|
@ -14,32 +14,29 @@
|
||||
*/
|
||||
package org.oscim.layers.tile.vector;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
import org.oscim.backend.CanvasAdapter;
|
||||
import org.oscim.backend.Log;
|
||||
import org.oscim.core.GeoPoint;
|
||||
import org.oscim.core.MapPosition;
|
||||
import org.oscim.layers.tile.TileLayer;
|
||||
import org.oscim.layers.tile.TileLoader;
|
||||
import org.oscim.layers.tile.TileManager;
|
||||
import org.oscim.renderer.GLRenderer;
|
||||
import org.oscim.theme.ExternalRenderTheme;
|
||||
import org.oscim.theme.IRenderTheme;
|
||||
import org.oscim.theme.InternalRenderTheme;
|
||||
import org.oscim.theme.RenderThemeHandler;
|
||||
import org.oscim.theme.Theme;
|
||||
import org.oscim.tilesource.ITileDataSource;
|
||||
import org.oscim.tilesource.MapInfo;
|
||||
import org.oscim.tilesource.TileSource;
|
||||
import org.oscim.tilesource.TileSource.OpenResult;
|
||||
import org.oscim.utils.IOUtils;
|
||||
import org.oscim.view.MapView;
|
||||
|
||||
/**
|
||||
* The vector-tile-map layer. This class manages instances of
|
||||
* {@link MapTileLoader} that load and assemble vector tiles
|
||||
* for rendering.
|
||||
*/
|
||||
public class MapTileLayer extends TileLayer<MapTileLoader> {
|
||||
private final static String TAG = MapTileLayer.class.getName();
|
||||
|
||||
private TileSource mTileSource;
|
||||
|
||||
public MapTileLayer(MapView mapView) {
|
||||
super(mapView);
|
||||
}
|
||||
@ -49,15 +46,10 @@ public class MapTileLayer extends TileLayer<MapTileLoader> {
|
||||
return new MapTileLoader(tm);
|
||||
}
|
||||
|
||||
private TileSource mTileSource;
|
||||
private String mRenderTheme;
|
||||
|
||||
/**
|
||||
* Sets the TileSource for this MapView.
|
||||
* Sets the {@link TileSource} used by {@link TileLoader}.
|
||||
*
|
||||
* @param tileSource
|
||||
* the new TileSource.
|
||||
* @return true if TileSource changed
|
||||
* @return true when new TileSource was set (has changed)
|
||||
*/
|
||||
public boolean setTileSource(TileSource tileSource) {
|
||||
|
||||
@ -93,6 +85,21 @@ public class MapTileLayer extends TileLayer<MapTileLoader> {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set {@link IRenderTheme} used by {@link TileLoader}
|
||||
*/
|
||||
public void setRenderTheme(IRenderTheme theme) {
|
||||
pauseLoaders(true);
|
||||
|
||||
for (MapTileLoader g : mTileLoader)
|
||||
g.setRenderTheme(theme);
|
||||
|
||||
resumeLoaders();
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
public MapPosition getMapFileCenter() {
|
||||
if (mTileSource == null)
|
||||
return null;
|
||||
@ -113,105 +120,11 @@ public class MapTileLayer extends TileLayer<MapTileLoader> {
|
||||
mapPosition.setPosition(startPos);
|
||||
|
||||
if (mapInfo.startZoomLevel == null)
|
||||
mapPosition.setZoomLevel(12);
|
||||
mapPosition.setZoomLevel(2);
|
||||
else
|
||||
mapPosition.setZoomLevel((mapInfo.startZoomLevel).byteValue());
|
||||
|
||||
return mapPosition;
|
||||
}
|
||||
|
||||
public String getRenderTheme() {
|
||||
return mRenderTheme;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the internal theme which is used for rendering the map.
|
||||
*
|
||||
* @param internalRenderTheme
|
||||
* the internal rendering theme.
|
||||
* @return ...
|
||||
* @throws IllegalArgumentException
|
||||
* if the supplied internalRenderTheme is null.
|
||||
*/
|
||||
public boolean setRenderTheme(InternalRenderTheme internalRenderTheme) {
|
||||
if (internalRenderTheme == null) {
|
||||
throw new IllegalArgumentException("render theme must not be null");
|
||||
}
|
||||
|
||||
if (internalRenderTheme.name() == mRenderTheme)
|
||||
return true;
|
||||
|
||||
boolean ret = setRenderTheme((Theme) internalRenderTheme);
|
||||
if (ret)
|
||||
mRenderTheme = internalRenderTheme.name();
|
||||
|
||||
mMapView.clearMap();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
public boolean reloadTheme(){
|
||||
|
||||
Theme t = InternalRenderTheme.valueOf(mRenderTheme);
|
||||
if (t == null)
|
||||
return false;
|
||||
|
||||
boolean ret = setRenderTheme(t);
|
||||
|
||||
mMapView.clearMap();
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the theme file which is used for rendering the map.
|
||||
*
|
||||
* @param renderThemePath
|
||||
* the path to the XML file which defines the rendering theme.
|
||||
* @throws IllegalArgumentException
|
||||
* if the supplied internalRenderTheme is null.
|
||||
* @throws FileNotFoundException
|
||||
* if the supplied file does not exist, is a directory or cannot
|
||||
* be read.
|
||||
*/
|
||||
public void setRenderTheme(String renderThemePath) throws FileNotFoundException {
|
||||
if (renderThemePath == null) {
|
||||
throw new IllegalArgumentException("render theme path must not be null");
|
||||
}
|
||||
|
||||
boolean ret = setRenderTheme(new ExternalRenderTheme(renderThemePath));
|
||||
if (ret)
|
||||
mRenderTheme = renderThemePath;
|
||||
|
||||
mMapView.clearMap();
|
||||
}
|
||||
|
||||
private boolean setRenderTheme(Theme theme) {
|
||||
|
||||
pauseLoaders(true);
|
||||
|
||||
InputStream inputStream = null;
|
||||
try {
|
||||
inputStream = theme.getRenderThemeAsStream();
|
||||
IRenderTheme t = RenderThemeHandler.getRenderTheme(inputStream);
|
||||
t.scaleTextSize(1 + (CanvasAdapter.dpi / 240 - 1) * 0.5f);
|
||||
|
||||
// FIXME !!!
|
||||
GLRenderer.setRenderTheme(t);
|
||||
|
||||
for (MapTileLoader g : mTileLoader)
|
||||
g.setRenderTheme(t);
|
||||
return true;
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, e.getMessage());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
IOUtils.closeQuietly(inputStream);
|
||||
resumeLoaders();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
72
vtm/src/org/oscim/theme/ThemeLoader.java
Normal file
72
vtm/src/org/oscim/theme/ThemeLoader.java
Normal file
@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Copyright 2013 Hannes Janetzek
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.oscim.theme;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
import org.oscim.backend.CanvasAdapter;
|
||||
import org.oscim.backend.Log;
|
||||
import org.oscim.utils.IOUtils;
|
||||
|
||||
public class ThemeLoader {
|
||||
private final static String TAG = ThemeLoader.class.getName();
|
||||
|
||||
/**
|
||||
* Load internal theme, see {@link InternalRenderTheme}.
|
||||
*
|
||||
* @param internalRenderTheme ...
|
||||
* @return ...
|
||||
*/
|
||||
public static IRenderTheme load(InternalRenderTheme internalRenderTheme) {
|
||||
return load((Theme) internalRenderTheme);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Load theme from XML file.
|
||||
*
|
||||
* @param renderThemePath ..
|
||||
* @return ...
|
||||
* @throws FileNotFoundException ...
|
||||
*/
|
||||
public static IRenderTheme load(String renderThemePath) throws FileNotFoundException {
|
||||
return load(new ExternalRenderTheme(renderThemePath));
|
||||
}
|
||||
|
||||
public static IRenderTheme load(Theme theme) {
|
||||
|
||||
InputStream inputStream = null;
|
||||
try {
|
||||
inputStream = theme.getRenderThemeAsStream();
|
||||
IRenderTheme t = RenderThemeHandler.getRenderTheme(inputStream);
|
||||
t.scaleTextSize(1 + (CanvasAdapter.dpi / 240 - 1) * 0.5f);
|
||||
|
||||
return t;
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, e.getMessage());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
||||
} finally {
|
||||
IOUtils.closeQuietly(inputStream);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
@ -16,6 +16,7 @@ package org.oscim.view;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.oscim.backend.Log;
|
||||
import org.oscim.core.BoundingBox;
|
||||
import org.oscim.core.GeoPoint;
|
||||
import org.oscim.core.MapPosition;
|
||||
@ -25,10 +26,16 @@ import org.oscim.layers.overlay.Overlay;
|
||||
import org.oscim.layers.tile.bitmap.BitmapTileLayer;
|
||||
import org.oscim.layers.tile.vector.MapTileLayer;
|
||||
import org.oscim.layers.tile.vector.MapTileLoader;
|
||||
import org.oscim.renderer.GLRenderer;
|
||||
import org.oscim.theme.IRenderTheme;
|
||||
import org.oscim.theme.InternalRenderTheme;
|
||||
import org.oscim.theme.ThemeLoader;
|
||||
import org.oscim.tilesource.TileSource;
|
||||
|
||||
public class MapView {
|
||||
|
||||
private static final String TAG = MapView.class.getName();
|
||||
|
||||
//public static boolean enableClosePolygons;
|
||||
private final LayerManager mLayerManager;
|
||||
private final MapViewPosition mMapViewPosition;
|
||||
@ -50,21 +57,21 @@ public class MapView {
|
||||
|
||||
mLayerManager.add(0, new MapEventLayer(this));
|
||||
}
|
||||
private MapTileLayer mBaseLayer;
|
||||
|
||||
public MapTileLayer setBaseMap(TileSource tileSource) {
|
||||
MapTileLayer baseLayer = new MapTileLayer(this);
|
||||
|
||||
baseLayer.setTileSource(tileSource);
|
||||
mBaseLayer = new MapTileLayer(this);
|
||||
|
||||
mBaseLayer.setTileSource(tileSource);
|
||||
//mLayerManager.add(0, new MapEventLayer(this));
|
||||
|
||||
mLayerManager.add(1, baseLayer);
|
||||
mLayerManager.add(1, mBaseLayer);
|
||||
|
||||
//mRotationEnabled = true;
|
||||
|
||||
//mLayerManager.add(new GenericOverlay(this, new GridRenderLayer(this)));
|
||||
|
||||
return baseLayer;
|
||||
return mBaseLayer;
|
||||
}
|
||||
|
||||
public void setBackgroundMap(BitmapTileLayer tileLayer) {
|
||||
@ -77,6 +84,21 @@ public class MapView {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void setTheme(InternalRenderTheme theme) {
|
||||
if (mBaseLayer == null){
|
||||
Log.e(TAG, "No base layer set");
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
IRenderTheme t = ThemeLoader.load(theme);
|
||||
if (t == null){
|
||||
Log.e(TAG, "Invalid theme");
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
mBaseLayer.setRenderTheme(t);
|
||||
GLRenderer.setRenderTheme(t);
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
mLayerManager.destroy();
|
||||
}
|
||||
@ -110,7 +132,7 @@ public class MapView {
|
||||
}
|
||||
|
||||
/**
|
||||
* Do not call directly. This function is run on main-loop
|
||||
* Do not call directly! This function is run on main-loop
|
||||
* before rendering a frame.
|
||||
*/
|
||||
public void updateLayers() {
|
||||
@ -199,4 +221,6 @@ public class MapView {
|
||||
public int getHeight() {
|
||||
return mMapRenderCallback.getHeight();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user