From 683e0733a5fe1e853766ed3a97da7cb7220ddcf6 Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Sun, 26 Jan 2014 00:44:30 +0100 Subject: [PATCH] add TileGridLayer wrapper for GridRenderer set GridRenderer line- and text-style --- .../android/test/MarkerOverlayActivity.java | 5 +- .../oscim/android/test/SimpleMapActivity.java | 8 +-- vtm-gdx/src/org/oscim/gdx/GdxMap.java | 15 +++--- vtm/src/org/oscim/layers/TileGridLayer.java | 12 +++++ vtm/src/org/oscim/renderer/GridRenderer.java | 52 ++++++++++++------- 5 files changed, 60 insertions(+), 32 deletions(-) create mode 100644 vtm/src/org/oscim/layers/TileGridLayer.java diff --git a/vtm-android-example/src/org/oscim/android/test/MarkerOverlayActivity.java b/vtm-android-example/src/org/oscim/android/test/MarkerOverlayActivity.java index 0d41c00c..ef67152b 100644 --- a/vtm-android-example/src/org/oscim/android/test/MarkerOverlayActivity.java +++ b/vtm-android-example/src/org/oscim/android/test/MarkerOverlayActivity.java @@ -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); } diff --git a/vtm-android-example/src/org/oscim/android/test/SimpleMapActivity.java b/vtm-android-example/src/org/oscim/android/test/SimpleMapActivity.java index 87080354..89bdbaed 100644 --- a/vtm-android-example/src/org/oscim/android/test/SimpleMapActivity.java +++ b/vtm-android-example/src/org/oscim/android/test/SimpleMapActivity.java @@ -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); diff --git a/vtm-gdx/src/org/oscim/gdx/GdxMap.java b/vtm-gdx/src/org/oscim/gdx/GdxMap.java index 7119373e..fa9b91c5 100644 --- a/vtm-gdx/src/org/oscim/gdx/GdxMap.java +++ b/vtm-gdx/src/org/oscim/gdx/GdxMap.java @@ -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 { diff --git a/vtm/src/org/oscim/layers/TileGridLayer.java b/vtm/src/org/oscim/layers/TileGridLayer.java new file mode 100644 index 00000000..1d2760e7 --- /dev/null +++ b/vtm/src/org/oscim/layers/TileGridLayer.java @@ -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()); + } + +} diff --git a/vtm/src/org/oscim/renderer/GridRenderer.java b/vtm/src/org/oscim/renderer/GridRenderer.java index 7d3adb1f..847915ca 100644 --- a/vtm/src/org/oscim/renderer/GridRenderer.java +++ b/vtm/src/org/oscim/renderer/GridRenderer.java @@ -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(); }