From 3402308ced958e326bd0afcfa206460603f2ef0c Mon Sep 17 00:00:00 2001 From: Hannes Janetzek <hannes.janetzek@gmail.com> Date: Wed, 17 Jun 2015 23:21:18 +0200 Subject: [PATCH] Viewport: remove BoundingBox utility function --- .../oscim/layers/marker/ItemizedLayer.java | 9 ++-- .../layers/vector/AbstractVectorLayer.java | 4 +- vtm/src/org/oscim/map/Viewport.java | 41 +++++-------------- 3 files changed, 19 insertions(+), 35 deletions(-) diff --git a/vtm/src/org/oscim/layers/marker/ItemizedLayer.java b/vtm/src/org/oscim/layers/marker/ItemizedLayer.java index 3e180624..6f822483 100644 --- a/vtm/src/org/oscim/layers/marker/ItemizedLayer.java +++ b/vtm/src/org/oscim/layers/marker/ItemizedLayer.java @@ -21,7 +21,7 @@ package org.oscim.layers.marker; import java.util.ArrayList; import java.util.List; -import org.oscim.core.BoundingBox; +import org.oscim.core.Box; import org.oscim.core.Point; import org.oscim.event.Gesture; import org.oscim.event.GestureListener; @@ -167,7 +167,9 @@ public class ItemizedLayer<Item extends MarkerItem> extends MarkerLayer<Item> int eventY = (int) event.getY() - mMap.getHeight() / 2; Viewport mapPosition = mMap.viewport(); - BoundingBox bbox = mapPosition.getBBox(128); + Box box = mapPosition.getBBox(null, 128); + box.map2mercator(); + box.scale(1E6); int nearest = -1; int inside = -1; @@ -179,7 +181,8 @@ public class ItemizedLayer<Item extends MarkerItem> extends MarkerLayer<Item> for (int i = 0; i < size; i++) { Item item = mItemList.get(i); - if (!bbox.contains(item.geoPoint)) + if (!box.contains(item.geoPoint.longitudeE6, + item.geoPoint.latitudeE6)) continue; mapPosition.toScreenPoint(item.getPoint(), mTmpPoint); diff --git a/vtm/src/org/oscim/layers/vector/AbstractVectorLayer.java b/vtm/src/org/oscim/layers/vector/AbstractVectorLayer.java index 25192667..d99c4bbd 100644 --- a/vtm/src/org/oscim/layers/vector/AbstractVectorLayer.java +++ b/vtm/src/org/oscim/layers/vector/AbstractVectorLayer.java @@ -87,8 +87,8 @@ public abstract class AbstractVectorLayer<T> extends Layer implements UpdateList Viewport v = mMap.viewport(); BoundingBox bbox; synchronized (v) { - bbox = v.getBBox(); - v.getMapPosition(t.position); + bbox = v.getBBox(null, 0); + mMap.getMapPosition(t.position); } double scale = t.position.scale * Tile.SIZE; diff --git a/vtm/src/org/oscim/map/Viewport.java b/vtm/src/org/oscim/map/Viewport.java index 9be3822f..da0fa45d 100644 --- a/vtm/src/org/oscim/map/Viewport.java +++ b/vtm/src/org/oscim/map/Viewport.java @@ -16,7 +16,6 @@ */ package org.oscim.map; -import org.oscim.core.BoundingBox; import org.oscim.core.Box; import org.oscim.core.GeoPoint; import org.oscim.core.MapPosition; @@ -25,6 +24,8 @@ import org.oscim.core.Point; import org.oscim.core.Tile; import org.oscim.renderer.GLMatrix; import org.oscim.utils.FastMath; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * The Viewport class contains a MapPosition and the projection matrices. @@ -34,7 +35,8 @@ import org.oscim.utils.FastMath; * Public methods are thread safe. */ public class Viewport { - //static final Logger log = LoggerFactory.getLogger(Viewport.class); + + static final Logger log = LoggerFactory.getLogger(Viewport.class); private final static int MAX_ZOOMLEVEL = 20; private final static int MIN_ZOOMLEVEL = 2; @@ -72,8 +74,6 @@ public class Viewport { protected final float[] mu = new float[4]; protected final float[] mViewCoords = new float[8]; - protected final Box mMapBBox = new Box(); - protected float mHeight, mWidth; public final static float VIEW_DISTANCE = 3.0f; @@ -237,35 +237,15 @@ public class Viewport { coords[position + 1] = (float) (ny + dist * dy); } - /** - * Get the minimal axis-aligned BoundingBox that encloses - * the visible part of the map. - * - * @return BoundingBox containing view - */ - public synchronized BoundingBox getBBox(int expand) { - getBBox(mMapBBox, expand); - - /* scale map-pixel coordinates at current scale to - * absolute coordinates and apply mercator projection. */ - double minLon = MercatorProjection.toLongitude(mMapBBox.xmin); - double maxLon = MercatorProjection.toLongitude(mMapBBox.xmax); - double minLat = MercatorProjection.toLatitude(mMapBBox.ymax); - double maxLat = MercatorProjection.toLatitude(mMapBBox.ymin); - - return new BoundingBox(minLat, minLon, maxLat, maxLon); - } - - public synchronized BoundingBox getBBox() { - return getBBox(0); - } - /** * Get the minimal axis-aligned BoundingBox that encloses * the visible part of the map. Sets box to map coordinates: - * xmin,ymin,ymax,ymax + * xmin,ymin,xmax,ymax */ - public synchronized void getBBox(Box box, int expand) { + public Box getBBox(Box box, int expand) { + if (box == null) + box = new Box(); + float[] coords = mViewCoords; getMapExtents(coords, expand); @@ -281,7 +261,6 @@ public class Viewport { box.ymax = Math.max(box.ymax, coords[i + 1]); } - //updatePosition(); double cs = mPos.scale * Tile.SIZE; double cx = mPos.x * cs; double cy = mPos.y * cs; @@ -290,6 +269,8 @@ public class Viewport { box.xmax = (cx + box.xmax) / cs; box.ymin = (cy + box.ymin) / cs; box.ymax = (cy + box.ymax) / cs; + + return box; } /**