playground tests
This commit is contained in:
@@ -1,36 +1,44 @@
|
||||
package org.oscim.test;
|
||||
|
||||
import static org.oscim.tiling.source.bitmap.DefaultSources.STAMEN_TONER;
|
||||
|
||||
import org.oscim.backend.canvas.Color;
|
||||
import org.oscim.core.GeometryBuffer.GeometryType;
|
||||
import org.oscim.core.MapElement;
|
||||
import org.oscim.core.MapPosition;
|
||||
import org.oscim.core.MercatorProjection;
|
||||
import org.oscim.gdx.GdxMap;
|
||||
import org.oscim.event.Event;
|
||||
import org.oscim.gdx.GdxMapApp;
|
||||
import org.oscim.layers.TileGridLayer;
|
||||
import org.oscim.layers.tile.MapTile;
|
||||
import org.oscim.layers.tile.MapTile.TileNode;
|
||||
import org.oscim.layers.tile.TileLoader;
|
||||
import org.oscim.layers.tile.TileManager;
|
||||
import org.oscim.layers.tile.TileSet;
|
||||
import org.oscim.layers.tile.VectorTileRenderer;
|
||||
import org.oscim.layers.tile.bitmap.BitmapTileLayer;
|
||||
import org.oscim.layers.tile.vector.VectorTileLayer;
|
||||
import org.oscim.layers.tile.vector.VectorTileLoader;
|
||||
import org.oscim.layers.tile.vector.labeling.LabelLayer;
|
||||
import org.oscim.map.Map;
|
||||
import org.oscim.renderer.MapRenderer;
|
||||
import org.oscim.theme.DebugTheme;
|
||||
import org.oscim.theme.VtmThemes;
|
||||
import org.oscim.tiling.TileSource;
|
||||
import org.oscim.tiling.source.oscimap4.OSciMap4TileSource;
|
||||
|
||||
public class TileRenderTest extends GdxMap {
|
||||
public class TileRenderTest extends GdxMapApp {
|
||||
|
||||
static boolean loadOneTile = true;
|
||||
static int tileX = 34365 >> 2;
|
||||
static int tileY = 21333 >> 2;
|
||||
// static int tileX = 34365 >> 2;
|
||||
// static int tileY = 21333 >> 2;
|
||||
// static byte tileZ = 14;
|
||||
|
||||
static int tileX = 68747 >> 3;
|
||||
static int tileY = 42648 >> 3;
|
||||
static byte tileZ = 14;
|
||||
|
||||
@Override
|
||||
public void createLayers() {
|
||||
final TileManager tileManager;
|
||||
|
||||
MapRenderer.setBackgroundColor(0xff888888);
|
||||
mMap.layers().add(new TileGridLayer(mMap, Color.LTGRAY, 1.2f, 1));
|
||||
|
||||
MapTile tile = new MapTile(null, tileX, tileY, tileZ);
|
||||
|
||||
double w = 1.0 / (1 << tile.zoomLevel);
|
||||
@@ -38,90 +46,156 @@ public class TileRenderTest extends GdxMap {
|
||||
double maxLon = MercatorProjection.toLongitude(tile.x + w);
|
||||
double minLat = MercatorProjection.toLatitude(tile.y + w);
|
||||
double maxLat = MercatorProjection.toLatitude(tile.y);
|
||||
double lat = minLat + (maxLat - minLat) / 2;
|
||||
double lon = minLon + (maxLon - minLon) / 2;
|
||||
|
||||
mMap.setMapPosition(minLat + (maxLat - minLat) / 2, minLon
|
||||
+ (maxLon - minLon) / 2, 1 << tile.zoomLevel);
|
||||
MapPosition mapPosition = new MapPosition(lat, lon, 1 << tile.zoomLevel);
|
||||
|
||||
// mMap.setMapPosition(53.0521, 8.7951, 1 << 15);
|
||||
mMap.setMapPosition(mapPosition);
|
||||
|
||||
final TileManager tileManager;
|
||||
|
||||
if (loadOneTile) {
|
||||
|
||||
tile = new MapTile(new TileNode(), tileX, tileY, tileZ);
|
||||
// setup tile quad-tree, expected for locking
|
||||
// tile.node= new ;
|
||||
/* setup tile quad-tree, expected for locking */
|
||||
tile.node.parent = tile.node;
|
||||
tile.node.parent.parent = tile.node;
|
||||
|
||||
// setup TileSet contatining one tile
|
||||
/* setup TileSet contatining one tile */
|
||||
final TileSet tiles = new TileSet();
|
||||
tiles.cnt = 1;
|
||||
tiles.tiles[0] = tile;
|
||||
tiles.lockTiles();
|
||||
|
||||
tileManager = new TileManager(mMap, 0, 32, 100) {
|
||||
@Override
|
||||
public boolean getActiveTiles(TileSet tileSet) {
|
||||
if (tileSet == null)
|
||||
tileSet = new TileSet(1);
|
||||
|
||||
tileSet.setTiles(tiles);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void releaseTiles(TileSet tileSet) {
|
||||
tileSet.releaseTiles();
|
||||
}
|
||||
};
|
||||
tileManager = new TestTileManager(mMap, tiles);
|
||||
} else {
|
||||
// create TileManager and calculate tiles for current position
|
||||
/* create TileManager and calculate tiles for current position */
|
||||
tileManager = new TileManager(mMap, 0, 32, 100);
|
||||
tileManager.init();
|
||||
tileManager.update(mMap.getMapPosition());
|
||||
}
|
||||
|
||||
final VectorTileLoader[] tileLoader = { null };
|
||||
/* get the loader created by VectorTileLayer ... */
|
||||
final TestTileLoader[] tileLoader = { null };
|
||||
|
||||
VectorTileLayer l = new VectorTileLayer(mMap, tileManager,
|
||||
new VectorTileRenderer()) {
|
||||
protected TileLoader createLoader() {
|
||||
tileLoader[0] = new VectorTileLoader(this) {
|
||||
|
||||
public boolean loadTile(MapTile tile) {
|
||||
mTile = tile;
|
||||
return super.loadTile(tile);
|
||||
}
|
||||
};
|
||||
return tileLoader[0];
|
||||
};
|
||||
};
|
||||
TestVectorTileLayer tileLayer = new TestVectorTileLayer(mMap, tileManager);
|
||||
tileLoader[0] = tileLayer.getTileLoader();
|
||||
|
||||
TileSource tileSource = new OSciMap4TileSource();
|
||||
//TileSource tileSource = new TestTileSource();
|
||||
|
||||
l.setTileSource(tileSource);
|
||||
tileLayer.setTileSource(tileSource);
|
||||
|
||||
//IRenderTheme theme = ThemeLoader.load(VtmThemes.TRONRENDER);
|
||||
//l.setRenderTheme(theme);
|
||||
l.setRenderTheme(new DebugTheme());
|
||||
//IRenderTheme theme = ThemeLoader.load(VtmThemes.OSMARENDER);
|
||||
//tileLayer.setRenderTheme(theme);
|
||||
//tileLayer.setRenderTheme(new DebugTheme());
|
||||
|
||||
/* need to create the labellayer here to get the tileloaded event */
|
||||
LabelLayer labelLayer = new LabelLayer(mMap, tileLayer);
|
||||
|
||||
//mMap.layers().add(tileLayer);
|
||||
mMap.setBaseMap(tileLayer);
|
||||
mMap.setTheme(VtmThemes.DEFAULT);
|
||||
|
||||
log.debug("load tiles:");
|
||||
if (loadOneTile) {
|
||||
log.debug("load {}", tile);
|
||||
|
||||
tileLoader[0].loadTile(tile);
|
||||
tileManager.jobCompleted(tile, true);
|
||||
} else {
|
||||
MapTile t;
|
||||
while ((t = tileManager.getTileJob()) != null) {
|
||||
tileManager.update(mapPosition);
|
||||
MapTile t = tileManager.getTileJob();
|
||||
while (t != null) {
|
||||
log.debug("load {}", t);
|
||||
|
||||
tileLoader[0].loadTile(t);
|
||||
tileManager.jobCompleted(t, true);
|
||||
|
||||
t = tileManager.getTileJob();
|
||||
}
|
||||
}
|
||||
|
||||
mMap.setBaseMap(new BitmapTileLayer(mMap, STAMEN_TONER.build()));
|
||||
mMap.layers().add(labelLayer);
|
||||
|
||||
mMap.layers().add(l);
|
||||
MapRenderer.setBackgroundColor(0xff888888);
|
||||
}
|
||||
|
||||
static class TestTileLoader extends VectorTileLoader {
|
||||
|
||||
public TestTileLoader(VectorTileLayer tileLayer) {
|
||||
super(tileLayer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean loadTile(MapTile tile) {
|
||||
mTile = tile;
|
||||
return super.loadTile(tile);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void process(MapElement element) {
|
||||
/* ignore polygons for testing */
|
||||
if (element.type != GeometryType.LINE)
|
||||
return;
|
||||
|
||||
if (element.tags.containsKey("name"))
|
||||
super.process(element);
|
||||
}
|
||||
}
|
||||
|
||||
static class TestVectorTileLayer extends VectorTileLayer {
|
||||
final VectorTileLoader[] tileLoader = { null };
|
||||
|
||||
public TestVectorTileLayer(Map map, TileManager tileManager) {
|
||||
super(map, tileManager, new VectorTileRenderer());
|
||||
}
|
||||
|
||||
TestTileLoader getTileLoader() {
|
||||
return (TestTileLoader) mTileLoader[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getNumLoaders() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initLoader(int numLoaders) {
|
||||
mTileLoader = new TileLoader[numLoaders];
|
||||
for (int i = 0; i < numLoaders; i++) {
|
||||
mTileLoader[i] = new TestTileLoader(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMapEvent(Event event, MapPosition mapPosition) {
|
||||
/* ignore map events */
|
||||
if (event != Map.CLEAR_EVENT)
|
||||
return;
|
||||
|
||||
//super.onMapEvent(event, mapPosition);
|
||||
}
|
||||
}
|
||||
|
||||
static class TestTileManager extends TileManager {
|
||||
TileSet fixedTiles;
|
||||
|
||||
public TestTileManager(Map map, TileSet fixedTiles) {
|
||||
super(map, 0, 30, 100);
|
||||
this.fixedTiles = fixedTiles;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getActiveTiles(TileSet tileSet) {
|
||||
if (tileSet == null)
|
||||
tileSet = new TileSet(fixedTiles.cnt);
|
||||
|
||||
tileSet.setTiles(fixedTiles);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
GdxMapApp.init();
|
||||
GdxMapApp.run(new TileRenderTest(), null, 256);
|
||||
GdxMapApp.run(new TileRenderTest(), null, 512);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user