forked from upstream-mirrors/OpenTracks
Fixing issue 148 - properly loading bounding boxes, and adding regression tests.
This commit is contained in:
@@ -375,7 +375,6 @@ public class MyTracksMap extends MapActivity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
protected void setupZoomControls() {
|
protected void setupZoomControls() {
|
||||||
mapView.setBuiltInZoomControls(true);
|
mapView.setBuiltInZoomControls(true);
|
||||||
}
|
}
|
||||||
@@ -640,14 +639,18 @@ public class MyTracksMap extends MapActivity
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
TripStatistics stats = track.getStatistics();
|
TripStatistics stats = track.getStatistics();
|
||||||
int latSpanE6 = stats.getTop() - stats.getBottom();
|
int bottom = stats.getBottom();
|
||||||
int lonSpanE6 = stats.getRight() - stats.getLeft();
|
int left = stats.getLeft();
|
||||||
if (latSpanE6 > 0 && latSpanE6 < 180E6 && lonSpanE6 > 0
|
int latSpanE6 = stats.getTop() - bottom;
|
||||||
&& lonSpanE6 < 180E6) {
|
int lonSpanE6 = stats.getRight() - left;
|
||||||
|
if (latSpanE6 > 0
|
||||||
|
&& latSpanE6 < 180E6
|
||||||
|
&& lonSpanE6 > 0
|
||||||
|
&& lonSpanE6 < 360E6) {
|
||||||
keepMyLocationVisible = false;
|
keepMyLocationVisible = false;
|
||||||
GeoPoint center = new GeoPoint(
|
GeoPoint center = new GeoPoint(
|
||||||
stats.getBottom() + latSpanE6 / 2,
|
bottom + latSpanE6 / 2,
|
||||||
stats.getLeft() + lonSpanE6 / 2);
|
left + lonSpanE6 / 2);
|
||||||
if (MyTracksUtils.isValidGeoPoint(center)) {
|
if (MyTracksUtils.isValidGeoPoint(center)) {
|
||||||
mapView.getController().setCenter(center);
|
mapView.getController().setCenter(center);
|
||||||
mapView.getController().zoomToSpan(latSpanE6, lonSpanE6);
|
mapView.getController().zoomToSpan(latSpanE6, lonSpanE6);
|
||||||
@@ -1026,9 +1029,6 @@ public class MyTracksMap extends MapActivity
|
|||||||
cursor.close();
|
cursor.close();
|
||||||
cursor = null;
|
cursor = null;
|
||||||
}
|
}
|
||||||
if (cursor != null) {
|
|
||||||
cursor.close();
|
|
||||||
}
|
|
||||||
mapView.postInvalidate();
|
mapView.postInvalidate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,6 +86,13 @@ public class ExtremityMonitor {
|
|||||||
* Sets the minimum and maximum values.
|
* Sets the minimum and maximum values.
|
||||||
*/
|
*/
|
||||||
public void set(double min, double max) {
|
public void set(double min, double max) {
|
||||||
|
// If the min is greater than the max and they were actually initialized to
|
||||||
|
// some values, then we have a problem.
|
||||||
|
if (min > max && !Double.isInfinite(max) && !Double.isInfinite(min)) {
|
||||||
|
throw new IllegalArgumentException(
|
||||||
|
"Invalid min: " + min + " vs max:" + max);
|
||||||
|
}
|
||||||
|
|
||||||
this.min = min;
|
this.min = min;
|
||||||
this.max = max;
|
this.max = max;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -403,15 +403,16 @@ public class TripStatistics implements Parcelable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the bounding box for this trip.
|
* Sets the bounding box for this trip.
|
||||||
|
* The unit for all parameters is signed decimal degrees (degrees * 1E6).
|
||||||
*
|
*
|
||||||
* @param left the westmost longitude reached
|
* @param leftE6 the westmost longitude reached
|
||||||
* @param top the northmost latitude reached
|
* @param topE6 the northmost latitude reached
|
||||||
* @param right the eastmost longitude reached
|
* @param rightE6 the eastmost longitude reached
|
||||||
* @param bottom the southmost latitude reached
|
* @param bottomE6 the southmost latitude reached
|
||||||
*/
|
*/
|
||||||
public void setBounds(int left, int top, int right, int bottom) {
|
public void setBounds(int leftE6, int topE6, int rightE6, int bottomE6) {
|
||||||
latitudeExtremities.set(bottom, top);
|
latitudeExtremities.set(bottomE6 / 1E6, topE6 / 1E6);
|
||||||
longitudeExtremities.set(left, right);
|
longitudeExtremities.set(leftE6 / 1E6, rightE6 / 1E6);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Data manipulation methods
|
// Data manipulation methods
|
||||||
|
|||||||
@@ -0,0 +1,105 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010 Google Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||||
|
* use this file except in compliance with the License. You may obtain a copy of
|
||||||
|
* the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations under
|
||||||
|
* the License.
|
||||||
|
*/
|
||||||
|
package com.google.android.apps.mytracks.stats;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests for {@link TripStatistics}.
|
||||||
|
* This only tests non-trivial pieces of that class.
|
||||||
|
*
|
||||||
|
* @author Rodrigo Damazio
|
||||||
|
*/
|
||||||
|
public class TripStatisticsTest extends TestCase {
|
||||||
|
|
||||||
|
private TripStatistics statistics;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void setUp() throws Exception {
|
||||||
|
super.setUp();
|
||||||
|
|
||||||
|
statistics = new TripStatistics();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testSetBounds() {
|
||||||
|
// This is not a trivial setter, conversion happens in it
|
||||||
|
statistics.setBounds(12345, -34567, 56789, -98765);
|
||||||
|
assertEquals(12345, statistics.getLeft());
|
||||||
|
assertEquals(-34567, statistics.getTop());
|
||||||
|
assertEquals(56789, statistics.getRight());
|
||||||
|
assertEquals(-98765, statistics.getBottom());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testMerge() {
|
||||||
|
TripStatistics statistics2 = new TripStatistics();
|
||||||
|
statistics.setStartTime(1000L); // Resulting start time
|
||||||
|
statistics.setStopTime(2500L);
|
||||||
|
statistics2.setStartTime(3000L);
|
||||||
|
statistics2.setStopTime(4000L); // Resulting stop time
|
||||||
|
statistics.setTotalTime(1500L);
|
||||||
|
statistics2.setTotalTime(1000L); // Result: 1500+1000
|
||||||
|
statistics.setMovingTime(700L);
|
||||||
|
statistics2.setMovingTime(600L); // Result: 700+600
|
||||||
|
statistics.setTotalDistance(750.0);
|
||||||
|
statistics2.setTotalDistance(350.0); // Result: 750+350
|
||||||
|
statistics.setTotalElevationGain(50.0);
|
||||||
|
statistics2.setTotalElevationGain(850.0); // Result: 850+50
|
||||||
|
statistics.setMaxSpeed(60.0); // Resulting max speed
|
||||||
|
statistics2.setMaxSpeed(30.0);
|
||||||
|
statistics.setMaxElevation(1250.0);
|
||||||
|
statistics.setMinElevation(1200.0); // Resulting min elevation
|
||||||
|
statistics2.setMaxElevation(3575.0); // Resulting max elevation
|
||||||
|
statistics2.setMinElevation(2800.0);
|
||||||
|
statistics.setMaxGrade(15.0);
|
||||||
|
statistics.setMinGrade(-25.0); // Resulting min grade
|
||||||
|
statistics2.setMaxGrade(35.0); // Resulting max grade
|
||||||
|
statistics2.setMinGrade(0.0);
|
||||||
|
|
||||||
|
// Resulting bounds: -10000, 35000, 30000, -40000
|
||||||
|
statistics.setBounds(-10000, 20000, 30000, -40000);
|
||||||
|
statistics2.setBounds(-5000, 35000, 0, 20000);
|
||||||
|
|
||||||
|
statistics.merge(statistics2);
|
||||||
|
|
||||||
|
assertEquals(1000L, statistics.getStartTime());
|
||||||
|
assertEquals(4000L, statistics.getStopTime());
|
||||||
|
assertEquals(2500L, statistics.getTotalTime());
|
||||||
|
assertEquals(1300L, statistics.getMovingTime());
|
||||||
|
assertEquals(1100.0, statistics.getTotalDistance());
|
||||||
|
assertEquals(900.0, statistics.getTotalElevationGain());
|
||||||
|
assertEquals(60.0, statistics.getMaxSpeed());
|
||||||
|
assertEquals(-10000, statistics.getLeft());
|
||||||
|
assertEquals(30000, statistics.getRight());
|
||||||
|
assertEquals(35000, statistics.getTop());
|
||||||
|
assertEquals(-40000, statistics.getBottom());
|
||||||
|
assertEquals(1200.0, statistics.getMinElevation());
|
||||||
|
assertEquals(3575.0, statistics.getMaxElevation());
|
||||||
|
assertEquals(-25.0, statistics.getMinGrade());
|
||||||
|
assertEquals(35.0, statistics.getMaxGrade());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetAverageSpeed() {
|
||||||
|
statistics.setTotalDistance(1000.0);
|
||||||
|
statistics.setTotalTime(50000); // in milliseconds
|
||||||
|
assertEquals(20.0, statistics.getAverageSpeed());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetAverageMovingSpeed() {
|
||||||
|
statistics.setTotalDistance(1000.0);
|
||||||
|
statistics.setMovingTime(20000); // in milliseconds
|
||||||
|
assertEquals(50.0, statistics.getAverageMovingSpeed());
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user