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.canvas.AndroidGraphics;
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.OnItemGestureListener;
import org.oscim.layers.marker.MarkerItem;
import org.oscim.layers.marker.MarkerItem.HotspotPlace;
import org.oscim.layers.marker.MarkerSymbol;
import org.oscim.renderer.GridRenderer;
import android.os.Bundle;
import android.widget.Toast;
@ -65,7 +64,7 @@ public class MarkerOverlayActivity extends MapActivity implements OnItemGestureL
markerLayer.addItems(pts);
mMap.getLayers().add(new GenericLayer(mMap, new GridRenderer()));
mMap.getLayers().add(new TileGridLayer(mMap));
mMap.setMapPosition(0, 0, 1);
}

View File

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

View File

@ -19,12 +19,13 @@ package org.oscim.gdx;
import org.oscim.backend.AssetAdapter;
import org.oscim.core.Tile;
import org.oscim.layers.GenericLayer;
import org.oscim.layers.TileGridLayer;
import org.oscim.layers.tile.vector.BuildingLayer;
import org.oscim.layers.tile.vector.VectorTileLayer;
import org.oscim.layers.tile.vector.labeling.LabelLayer;
import org.oscim.map.Layers;
import org.oscim.map.Map;
import org.oscim.map.Viewport;
import org.oscim.renderer.GridRenderer;
import org.oscim.renderer.MapRenderer;
import org.oscim.theme.InternalRenderTheme;
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,
boolean buildings) {
Layers layers = mMap.getLayers();
if (tileSource != null) {
mMapLayer = mMap.setBaseMap(tileSource);
mMap.setTheme(InternalRenderTheme.DEFAULT);
if (buildings)
mMap.getLayers()
.add(new BuildingLayer(mMap, mMapLayer.getTileRenderer()));
layers.add(new BuildingLayer(mMap, mMapLayer.getTileRenderer()));
if (labels)
mMap.getLayers()
.add(new LabelLayer(mMap, mMapLayer.getTileRenderer()));
layers.add(new LabelLayer(mMap, mMapLayer.getTileRenderer()));
}
if (tileGrid)
mMap.getLayers()
.add(new GenericLayer(mMap, new GridRenderer()));
layers.add(new TileGridLayer(mMap));
}
// Stage ui;
@ -303,7 +302,7 @@ public abstract class GdxMap implements ApplicationListener {
case Input.Keys.G:
if (mGridLayer == null) {
mGridLayer = new GenericLayer(mMap, new GridRenderer());
mGridLayer = new TileGridLayer(mMap);
mGridLayer.setEnabled(true);
mMap.getLayers().add(mGridLayer);
} 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;
public class GridRenderer extends ElementRenderer {
// private final static String TILE_FORMAT = "%d/%d/%d";
private final TextLayer mTextLayer;
private final Text mText;
private final LineLayer mLineLayer;
private final GeometryBuffer mLines;
private final StringBuffer mStringBuffer;
private int mCurX, mCurY, mCurZ;
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;
// not needed to set but we know:
@ -50,25 +52,33 @@ public class GridRenderer extends ElementRenderer {
float pos = -size * 4;
// 8 vertical lines
for (int i = 0; i < 8; i++) {
float x = pos + i * size;
for (int i = 0; i < 8 * numLines; i++) {
float x = pos + i * size / numLines;
mLines.startLine();
mLines.addPoint(x, pos);
mLines.addPoint(x, pos + size * 8);
}
// 8 horizontal lines
for (int j = 0; j < 8; j++) {
float y = pos + j * size;
for (int j = 0; j < 8 * numLines; j++) {
float y = pos + j * size / numLines;
mLines.startLine();
mLines.addPoint(pos, y);
mLines.addPoint(pos + size * 8, y);
}
mText = Text.createText(22, 0, Color.RED, 0, false);
mText = textStyle;
mTextLayer = layers.addTextLayer(new TextLayer());
mLineLayer = layers.addLineLayer(0, new Line(0x66000066, 1.5f, Cap.BUTT));
if (mText != null) {
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) {
@ -77,15 +87,20 @@ public class GridRenderer extends ElementRenderer {
TextLayer tl = mTextLayer;
tl.clear();
StringBuffer sb = mStringBuffer;
for (int yy = -2; yy < 2; yy++) {
for (int xx = -2; xx < 2; xx++) {
String label = Integer.valueOf(x + xx) + "/" +
Integer.valueOf(y + yy) + "/" +
Integer.valueOf(z);
sb.setLength(0);
sb.append(x + xx);
sb.append(" / ");
sb.append(y + yy);
sb.append(" / ");
sb.append(z);
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);
}
@ -120,10 +135,11 @@ public class GridRenderer extends ElementRenderer {
mMapPosition.y = (double) y / z;
mMapPosition.scale = z;
addLabels(x, y, pos.zoomLevel);
mLineLayer.clear();
mLineLayer.addLine(mLines);
if (mText != null) {
addLabels(x, y, pos.zoomLevel);
mLineLayer.clear();
mLineLayer.addLine(mLines);
}
compile();
}