summaryrefslogtreecommitdiff
path: root/android/java/MapboxGLAndroidSDK/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'android/java/MapboxGLAndroidSDK/src/main/java')
-rw-r--r--android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/geometry/BoundingBox.java119
-rw-r--r--android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/geometry/CoordinateSpan.java12
2 files changed, 87 insertions, 44 deletions
diff --git a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/geometry/BoundingBox.java b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/geometry/BoundingBox.java
index 091ac4d06b..d03f24a6fb 100644
--- a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/geometry/BoundingBox.java
+++ b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/geometry/BoundingBox.java
@@ -22,22 +22,21 @@ public final class BoundingBox implements Parcelable, Serializable {
* Construct a new bounding box based on its corners, given in NESW
* order.
*
- * @param north Northern Coordinate
- * @param east Eastern Coordinate
- * @param south Southern Coordinate
- * @param west Western Coordinate
+ * @param northLatitude Northern Latitude
+ * @param eastLongitude Eastern Longitude
+ * @param southLatitude Southern Latitude
+ * @param westLongitude Western Longitude
*/
- public BoundingBox(final double north, final double east, final double south, final double west) {
- this.mLatNorth = north;
- this.mLonEast = east;
- this.mLatSouth = south;
- this.mLonWest = west;
+ public BoundingBox(final double northLatitude, final double eastLongitude, final double southLatitude, final double westLongitude) {
+ this.mLatNorth = northLatitude;
+ this.mLonEast = eastLongitude;
+ this.mLatSouth = southLatitude;
+ this.mLonWest = westLongitude;
this.mIsValid = ((this.mLonWest < this.mLonEast) && (this.mLatNorth > this.mLatSouth));
}
/**
- * Construct a new bounding box based on its corners, given in NESW
- * order.
+ * Construct a new bounding box based on its corners, given in NESW order.
*
* @param northEast Coordinate
* @param southWest Coordinate
@@ -98,6 +97,15 @@ public final class BoundingBox implements Parcelable, Serializable {
}
/**
+ * Get the area spanned by this bounding box
+ *
+ * @return CoordinateSpan area
+ */
+ public CoordinateSpan getSpan() {
+ return new CoordinateSpan(getLatitudeSpan(), getLongitudeSpan());
+ }
+
+ /**
* Get the absolute distance, in degrees, between the north and
* south boundaries of this bounding box
*
@@ -117,6 +125,16 @@ public final class BoundingBox implements Parcelable, Serializable {
return Math.abs(this.mLonEast - this.mLonWest);
}
+
+ /**
+ * Validate if bounding box is empty, determined if absolute distance is
+ *
+ * @return boolean indicating if span is empty
+ */
+ public boolean isEmpty() {
+ return getLongitudeSpan() == 0.0 || getLatitudeSpan() == 0.0;
+ }
+
@Override
public String toString() {
return "N:" + this.mLatNorth + "; E:" + this.mLonEast + "; S:" + this.mLatSouth + "; W:" + this.mLonWest;
@@ -151,13 +169,20 @@ public final class BoundingBox implements Parcelable, Serializable {
/**
* Determines whether this bounding box matches another one via coordinates.
*
- * @param other another bounding box
+ * @param o another object
* @return a boolean indicating whether the bounding boxes are equal
*/
- public boolean equals(final BoundingBox other) {
-
- return other != null && (other == this || mLatNorth == other.getLatNorth() && mLatSouth == other.getLatSouth() && mLonEast == other.getLonEast() && mLonWest == other.getLonWest());
-
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) return true;
+ if (o instanceof BoundingBox) {
+ BoundingBox other = (BoundingBox) o;
+ return mLatNorth == other.getLatNorth()
+ && mLatSouth == other.getLatSouth()
+ && mLonEast == other.getLonEast()
+ && mLonWest == other.getLonWest();
+ }
+ return false;
}
/**
@@ -170,8 +195,10 @@ public final class BoundingBox implements Parcelable, Serializable {
public boolean contains(final ILatLng pGeoPoint) {
final double latitude = pGeoPoint.getLatitude();
final double longitude = pGeoPoint.getLongitude();
- return ((latitude < this.mLatNorth) && (latitude > this.mLatSouth)) && ((longitude
- < this.mLonEast) && (longitude > this.mLonWest));
+ return ((latitude < this.mLatNorth)
+ && (latitude > this.mLatSouth))
+ && ((longitude < this.mLonEast)
+ && (longitude > this.mLonWest));
}
/**
@@ -188,18 +215,17 @@ public final class BoundingBox implements Parcelable, Serializable {
* Returns a new BoundingBox that stretches to include another bounding box,
* given by corner points.
*
- * @param pLatNorth Northern Coordinate
- * @param pLonEast Eastern Coordinate
- * @param pLatSouth Southern Coordinate
- * @param pLonWest Western Coordinate
+ * @param lonNorth Northern Longitude
+ * @param latEast Eastern Latitude
+ * @param lonSouth Southern Longitude
+ * @param latWest Western Longitude
* @return BoundingBox
*/
- public BoundingBox union(final double pLatNorth, final double pLonEast, final double pLatSouth,
- final double pLonWest) {
- return new BoundingBox((this.mLatNorth < pLatNorth) ? pLatNorth : this.mLatNorth,
- (this.mLonEast < pLonEast) ? pLonEast : this.mLonEast,
- (this.mLatSouth > pLatSouth) ? pLatSouth : this.mLatSouth,
- (this.mLonWest > pLonWest) ? pLonWest : this.mLonWest);
+ public BoundingBox union(final double lonNorth, final double latEast, final double lonSouth, final double latWest) {
+ return new BoundingBox((this.mLatNorth < lonNorth) ? lonNorth : this.mLatNorth,
+ (this.mLonEast < latEast) ? latEast : this.mLonEast,
+ (this.mLatSouth > lonSouth) ? lonSouth : this.mLatSouth,
+ (this.mLonWest > latWest) ? latWest : this.mLonWest);
}
/**
@@ -209,24 +235,29 @@ public final class BoundingBox implements Parcelable, Serializable {
* @return BoundingBox
*/
public BoundingBox intersect(BoundingBox box) {
- double maxLonWest = Math.max(this.mLonWest, box.getLonWest());
- double minLonEast = Math.min(this.mLonEast, box.getLonEast());
- double maxLatNorth = Math.min(this.mLatNorth, box.getLatNorth());
- double minLatSouth = Math.max(this.mLatSouth, box.getLatSouth());
- return new BoundingBox(maxLatNorth, minLonEast, minLatSouth, maxLonWest);
+ double minLatWest = Math.max(getLonWest(), box.getLonWest());
+ double maxLatEast = Math.min(getLonEast(), box.getLonEast());
+ if (maxLatEast > minLatWest) {
+ double minLonSouth = Math.max(getLatSouth(), box.getLatSouth());
+ double maxLonNorth = Math.min(getLatNorth(), box.getLatNorth());
+ if (maxLonNorth > minLonSouth) {
+ return new BoundingBox(maxLonNorth, maxLatEast, minLonSouth, minLatWest);
+ }
+ }
+ return null;
}
/**
* Returns a new BoundingBox that is the intersection of this with another box
*
- * @param north Northern Coordinate
- * @param east Eastern Coordinate
- * @param south Southern Coordinate
- * @param west Western Coordinate
+ * @param northLongitude Northern Longitude
+ * @param eastLatitude Eastern Latitude
+ * @param southLongitude Southern Longitude
+ * @param westLatitude Western Latitude
* @return BoundingBox
*/
- public BoundingBox intersect(double north, double east, double south, double west) {
- return intersect(new BoundingBox(north, east, south, west));
+ public BoundingBox intersect(double northLongitude, double eastLatitude, double southLongitude, double westLatitude) {
+ return intersect(new BoundingBox(northLongitude, eastLatitude, southLongitude, westLatitude));
}
public static final Parcelable.Creator<BoundingBox> CREATOR =
@@ -264,10 +295,10 @@ public final class BoundingBox implements Parcelable, Serializable {
}
private static BoundingBox readFromParcel(final Parcel in) {
- final double latNorth = in.readDouble();
- final double lonEast = in.readDouble();
- final double latSouth = in.readDouble();
- final double lonWest = in.readDouble();
- return new BoundingBox(latNorth, lonEast, latSouth, lonWest);
+ final double lonNorth = in.readDouble();
+ final double latEast = in.readDouble();
+ final double lonSouth = in.readDouble();
+ final double latWest = in.readDouble();
+ return new BoundingBox(lonNorth, latEast, lonSouth, latWest);
}
}
diff --git a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/geometry/CoordinateSpan.java b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/geometry/CoordinateSpan.java
index b673f83f72..994c72a05b 100644
--- a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/geometry/CoordinateSpan.java
+++ b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/geometry/CoordinateSpan.java
@@ -28,4 +28,16 @@ public class CoordinateSpan {
public void setLongitudeSpan(final double longitudeSpan) {
this.longitudeSpan = longitudeSpan;
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o instanceof CoordinateSpan) {
+ CoordinateSpan other = (CoordinateSpan) o;
+ return longitudeSpan == other.getLongitudeSpan()
+ && latitudeSpan == other.getLatitudeSpan();
+ }
+ return false;
+ }
+
}