Add BoundingBox calculation
The BoundingBox is computed using all existing Waypoints of a Track and returning the box through a collection of GeoPoints. The box might be used to autofit the map of a saved Track. See issue #60.
This commit is contained in:
parent
77220dad80
commit
9902060d7b
1 changed files with 30 additions and 2 deletions
|
@ -20,6 +20,10 @@ import android.location.Location;
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import org.osmdroid.util.BoundingBox;
|
||||||
|
import org.osmdroid.util.GeoPoint;
|
||||||
import org.y20k.trackbook.helpers.LocationHelper;
|
import org.y20k.trackbook.helpers.LocationHelper;
|
||||||
import org.y20k.trackbook.helpers.TrackbookKeys;
|
import org.y20k.trackbook.helpers.TrackbookKeys;
|
||||||
|
|
||||||
|
@ -28,8 +32,6 @@ import java.util.Date;
|
||||||
import java.util.GregorianCalendar;
|
import java.util.GregorianCalendar;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Track class
|
* Track class
|
||||||
|
@ -53,6 +55,32 @@ public class Track implements TrackbookKeys, Parcelable {
|
||||||
private double mPositiveElevation;
|
private double mPositiveElevation;
|
||||||
private double mNegativeElevation;
|
private double mNegativeElevation;
|
||||||
|
|
||||||
|
private BoundingBox boundingBox;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a {@code BoundingBox} for the collection of
|
||||||
|
* {@code WayPoint}s, so that it would be possible to fit the map in
|
||||||
|
* such box and see the whole {@code Track} in the map without
|
||||||
|
* manual zooming.
|
||||||
|
*
|
||||||
|
* It computes the {@code BoundingBox} only once since it's possibly
|
||||||
|
* useless to compute it everytime.
|
||||||
|
*
|
||||||
|
* @return {@code BoundingBox} containing all {@code Waypoint}s
|
||||||
|
*/
|
||||||
|
public BoundingBox getBoundingBox() {
|
||||||
|
if (null == boundingBox) {
|
||||||
|
final ArrayList<GeoPoint> geoPoints = new ArrayList<>(mWayPoints.size());
|
||||||
|
|
||||||
|
for (final WayPoint aWayPoint : mWayPoints) {
|
||||||
|
final GeoPoint aGeoPoint = new GeoPoint(aWayPoint.getLocation());
|
||||||
|
geoPoints.add(aGeoPoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
boundingBox = BoundingBox.fromGeoPoints(geoPoints);
|
||||||
|
}
|
||||||
|
return boundingBox;
|
||||||
|
}
|
||||||
|
|
||||||
/* Generic Constructor */
|
/* Generic Constructor */
|
||||||
public Track(int trackFormatVersion, List<WayPoint> wayPoints, float trackLength, long duration, float stepCount, Date recordingStart, Date recordingStop, double maxAltitude, double minAltitude, double positiveElevation, double negativeElevation) {
|
public Track(int trackFormatVersion, List<WayPoint> wayPoints, float trackLength, long duration, float stepCount, Date recordingStart, Date recordingStop, double maxAltitude, double minAltitude, double positiveElevation, double negativeElevation) {
|
||||||
|
|
Loading…
Reference in a new issue