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;
 	}
 
 	/**