add TileGridLayer wrapper for GridRenderer

set GridRenderer line- and text-style
This commit is contained in:
Hannes Janetzek 2014-01-26 00:44:30 +01:00
parent baceacccd5
commit 683e0733a5
5 changed files with 60 additions and 32 deletions

View File

@ -23,13 +23,12 @@ import org.oscim.android.MapActivity;
import org.oscim.android.MapView; import org.oscim.android.MapView;
import org.oscim.android.canvas.AndroidGraphics; import org.oscim.android.canvas.AndroidGraphics;
import org.oscim.core.GeoPoint; import org.oscim.core.GeoPoint;
import org.oscim.layers.GenericLayer; import org.oscim.layers.TileGridLayer;
import org.oscim.layers.marker.ItemizedIconLayer; import org.oscim.layers.marker.ItemizedIconLayer;
import org.oscim.layers.marker.ItemizedIconLayer.OnItemGestureListener; import org.oscim.layers.marker.ItemizedIconLayer.OnItemGestureListener;
import org.oscim.layers.marker.MarkerItem; import org.oscim.layers.marker.MarkerItem;
import org.oscim.layers.marker.MarkerItem.HotspotPlace; import org.oscim.layers.marker.MarkerItem.HotspotPlace;
import org.oscim.layers.marker.MarkerSymbol; import org.oscim.layers.marker.MarkerSymbol;
import org.oscim.renderer.GridRenderer;
import android.os.Bundle; import android.os.Bundle;
import android.widget.Toast; import android.widget.Toast;
@ -65,7 +64,7 @@ public class MarkerOverlayActivity extends MapActivity implements OnItemGestureL
markerLayer.addItems(pts); markerLayer.addItems(pts);
mMap.getLayers().add(new GenericLayer(mMap, new GridRenderer())); mMap.getLayers().add(new TileGridLayer(mMap));
mMap.setMapPosition(0, 0, 1); mMap.setMapPosition(0, 0, 1);
} }

View File

@ -17,6 +17,7 @@
import org.oscim.layers.tile.vector.BuildingLayer; import org.oscim.layers.tile.vector.BuildingLayer;
import org.oscim.layers.tile.vector.labeling.LabelLayer; import org.oscim.layers.tile.vector.labeling.LabelLayer;
import org.oscim.map.Layers;
import org.oscim.theme.InternalRenderTheme; import org.oscim.theme.InternalRenderTheme;
import org.oscim.tiling.TileRenderer; import org.oscim.tiling.TileRenderer;
@ -31,10 +32,11 @@ public class SimpleMapActivity extends BaseMapActivity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
TileRenderer l = mBaseLayer.getTileRenderer(); TileRenderer l = mBaseLayer.getTileRenderer();
mMap.getLayers().add(new BuildingLayer(mMap, l)); Layers layers = mMap.getLayers();
mMap.getLayers().add(new LabelLayer(mMap, l)); layers.add(new BuildingLayer(mMap, l));
layers.add(new LabelLayer(mMap, l));
//mMap.getLayers().add(new GenericLayer(mMap, new GridRenderer())); //layers.add(new TileGridLayer(mMap));
mMap.setTheme(InternalRenderTheme.DEFAULT); mMap.setTheme(InternalRenderTheme.DEFAULT);
//mMap.setTheme(InternalRenderTheme.TRONRENDER); //mMap.setTheme(InternalRenderTheme.TRONRENDER);

View File

@ -19,12 +19,13 @@ package org.oscim.gdx;
import org.oscim.backend.AssetAdapter; import org.oscim.backend.AssetAdapter;
import org.oscim.core.Tile; import org.oscim.core.Tile;
import org.oscim.layers.GenericLayer; import org.oscim.layers.GenericLayer;
import org.oscim.layers.TileGridLayer;
import org.oscim.layers.tile.vector.BuildingLayer; import org.oscim.layers.tile.vector.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.map.Layers;
import org.oscim.map.Map; import org.oscim.map.Map;
import org.oscim.map.Viewport; import org.oscim.map.Viewport;
import org.oscim.renderer.GridRenderer;
import org.oscim.renderer.MapRenderer; import org.oscim.renderer.MapRenderer;
import org.oscim.theme.InternalRenderTheme; import org.oscim.theme.InternalRenderTheme;
import org.oscim.tiling.source.TileSource; import org.oscim.tiling.source.TileSource;
@ -128,23 +129,21 @@ public abstract class GdxMap implements ApplicationListener {
protected void initDefaultLayers(TileSource tileSource, boolean tileGrid, boolean labels, protected void initDefaultLayers(TileSource tileSource, boolean tileGrid, boolean labels,
boolean buildings) { boolean buildings) {
Layers layers = mMap.getLayers();
if (tileSource != null) { if (tileSource != null) {
mMapLayer = mMap.setBaseMap(tileSource); mMapLayer = mMap.setBaseMap(tileSource);
mMap.setTheme(InternalRenderTheme.DEFAULT); mMap.setTheme(InternalRenderTheme.DEFAULT);
if (buildings) if (buildings)
mMap.getLayers() layers.add(new BuildingLayer(mMap, mMapLayer.getTileRenderer()));
.add(new BuildingLayer(mMap, mMapLayer.getTileRenderer()));
if (labels) if (labels)
mMap.getLayers() layers.add(new LabelLayer(mMap, mMapLayer.getTileRenderer()));
.add(new LabelLayer(mMap, mMapLayer.getTileRenderer()));
} }
if (tileGrid) if (tileGrid)
mMap.getLayers() layers.add(new TileGridLayer(mMap));
.add(new GenericLayer(mMap, new GridRenderer()));
} }
// Stage ui; // Stage ui;
@ -303,7 +302,7 @@ public abstract class GdxMap implements ApplicationListener {
case Input.Keys.G: case Input.Keys.G:
if (mGridLayer == null) { if (mGridLayer == null) {
mGridLayer = new GenericLayer(mMap, new GridRenderer()); mGridLayer = new TileGridLayer(mMap);
mGridLayer.setEnabled(true); mGridLayer.setEnabled(true);
mMap.getLayers().add(mGridLayer); mMap.getLayers().add(mGridLayer);
} else { } else {

View File

@ -0,0 +1,12 @@
package org.oscim.layers;
import org.oscim.map.Map;
import org.oscim.renderer.GridRenderer;
public class TileGridLayer extends GenericLayer {
public TileGridLayer(Map map) {
super(map, new GridRenderer());
}
}

View File

@ -29,18 +29,20 @@ import org.oscim.theme.styles.Line;
import org.oscim.theme.styles.Text; import org.oscim.theme.styles.Text;
public class GridRenderer extends ElementRenderer { public class GridRenderer extends ElementRenderer {
// private final static String TILE_FORMAT = "%d/%d/%d";
private final TextLayer mTextLayer; private final TextLayer mTextLayer;
private final Text mText; private final Text mText;
private final LineLayer mLineLayer; private final LineLayer mLineLayer;
private final GeometryBuffer mLines; private final GeometryBuffer mLines;
private final StringBuffer mStringBuffer;
private int mCurX, mCurY, mCurZ; private int mCurX, mCurY, mCurZ;
public GridRenderer() { public GridRenderer() {
this(1, new Line(Color.LTGRAY, 1.2f, Cap.BUTT),
Text.createText(22, 0, Color.RED, 0, false));
}
public GridRenderer(int numLines, Line lineStyle, Text textStyle) {
int size = Tile.SIZE; int size = Tile.SIZE;
// not needed to set but we know: // not needed to set but we know:
@ -50,25 +52,33 @@ public class GridRenderer extends ElementRenderer {
float pos = -size * 4; float pos = -size * 4;
// 8 vertical lines // 8 vertical lines
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8 * numLines; i++) {
float x = pos + i * size; float x = pos + i * size / numLines;
mLines.startLine(); mLines.startLine();
mLines.addPoint(x, pos); mLines.addPoint(x, pos);
mLines.addPoint(x, pos + size * 8); mLines.addPoint(x, pos + size * 8);
} }
// 8 horizontal lines // 8 horizontal lines
for (int j = 0; j < 8; j++) { for (int j = 0; j < 8 * numLines; j++) {
float y = pos + j * size; float y = pos + j * size / numLines;
mLines.startLine(); mLines.startLine();
mLines.addPoint(pos, y); mLines.addPoint(pos, y);
mLines.addPoint(pos + size * 8, y); mLines.addPoint(pos + size * 8, y);
} }
mText = Text.createText(22, 0, Color.RED, 0, false); mText = textStyle;
mTextLayer = layers.addTextLayer(new TextLayer()); if (mText != null) {
mLineLayer = layers.addLineLayer(0, new Line(0x66000066, 1.5f, Cap.BUTT)); mTextLayer = layers.addTextLayer(new TextLayer());
} else {
mTextLayer = null;
}
mLineLayer = layers.addLineLayer(0, lineStyle);
mLineLayer.addLine(mLines);
mStringBuffer = new StringBuffer(32);
} }
private void addLabels(int x, int y, int z) { private void addLabels(int x, int y, int z) {
@ -77,15 +87,20 @@ public class GridRenderer extends ElementRenderer {
TextLayer tl = mTextLayer; TextLayer tl = mTextLayer;
tl.clear(); tl.clear();
StringBuffer sb = mStringBuffer;
for (int yy = -2; yy < 2; yy++) { for (int yy = -2; yy < 2; yy++) {
for (int xx = -2; xx < 2; xx++) { for (int xx = -2; xx < 2; xx++) {
String label = Integer.valueOf(x + xx) + "/" + sb.setLength(0);
Integer.valueOf(y + yy) + "/" + sb.append(x + xx);
Integer.valueOf(z); sb.append(" / ");
sb.append(y + yy);
sb.append(" / ");
sb.append(z);
TextItem ti = TextItem.pool.get(); TextItem ti = TextItem.pool.get();
ti.set(s * xx + s / 2, s * yy + s / 2, label, mText); ti.set(s * xx + s / 2, s * yy + s / 2, sb.toString(), mText);
tl.addText(ti); tl.addText(ti);
} }
@ -120,10 +135,11 @@ public class GridRenderer extends ElementRenderer {
mMapPosition.y = (double) y / z; mMapPosition.y = (double) y / z;
mMapPosition.scale = z; mMapPosition.scale = z;
addLabels(x, y, pos.zoomLevel); if (mText != null) {
addLabels(x, y, pos.zoomLevel);
mLineLayer.clear(); mLineLayer.clear();
mLineLayer.addLine(mLines); mLineLayer.addLine(mLines);
}
compile(); compile();
} }