+++ /dev/null
-package tim.prune.data;
-
-/**
- * Class to provide checking functions
- */
-public abstract class Checker
-{
-
- /**
- * Check if a given track is doubled, so that each point is given twice,
- * once as waypoint and again as track point
- * @param inTrack track to check
- * @return true if track is doubled, false otherwise
- */
- public static boolean isDoubledTrack(Track inTrack)
- {
- // Check for empty track
- if (inTrack == null || inTrack.getNumPoints() < 2) {return false;}
- // Check for non-even number of points
- final int numPoints = inTrack.getNumPoints();
- if (numPoints % 2 != 0) {return false;}
- // Loop through first half of track
- final int halfNum = numPoints / 2;
- for (int i=0; i<halfNum; i++)
- {
- DataPoint firstPoint = inTrack.getPoint(i);
- DataPoint secondPoint = inTrack.getPoint(i + halfNum);
- if (!firstPoint.getLatitude().equals(secondPoint.getLatitude())
- || !firstPoint.getLongitude().equals(secondPoint.getLongitude())) {
- return false;
- }
- }
- // Passed the test, so contents must all be doubled
- return true;
- }
-
- /**
- * Find the index of the next segment start after the given index
- * @param inTrack track object
- * @param inIndex current index
- * @return index of next segment start
- */
- public static int getNextSegmentStart(Track inTrack, int inIndex)
- {
- int i = inIndex + 1;
- DataPoint point = null;
- while ((point=inTrack.getPoint(i)) != null && (point.isWaypoint() || !point.getSegmentStart())) {
- i++;
- }
- return Math.min(i, inTrack.getNumPoints()-1);
- }
-
- /**
- * Find the index of the previous segment start before the given index
- * @param inTrack track object
- * @param inIndex current index
- * @return index of previous segment start
- */
- public static int getPreviousSegmentStart(Track inTrack, int inIndex)
- {
- int i = inIndex - 1;
- DataPoint point = null;
- while ((point=inTrack.getPoint(i)) != null && (point.isWaypoint() || !point.getSegmentStart())) {
- i--;
- }
- // Have we gone past the beginning of the track?
- i = Math.max(i, 0);
- // count forwards past the waypoints if necessary
- while ((point=inTrack.getPoint(i)) != null && point.isWaypoint()) {
- i++;
- }
- return i;
- }
-
- /**
- * Find the index of the last track point in the current segment
- * @param inTrack track object
- * @param inIndex current index
- * @return index of next segment end
- */
- public static int getNextSegmentEnd(Track inTrack, int inIndex)
- {
- // First, go to start of following segment, or the end of the track
- int i = getNextSegmentStart(inTrack, inIndex);
- // If it's the next segment, subtract one
- DataPoint point = inTrack.getPoint(i);
- if (point == null || point.getSegmentStart())
- {
- i--;
- }
- // Now we may be on a waypoint, so count back to get the last track point
- while ((point=inTrack.getPoint(i)) != null && point.isWaypoint()) {
- i--;
- }
- return Math.min(i, inTrack.getNumPoints()-1);
- }
-
-
- /**
- * @param inTrack track object
- * @return true if there is at least one waypoint with a timestamp
- */
- public static boolean haveWaypointsGotTimestamps(Track inTrack)
- {
- if (inTrack != null)
- {
- for (int i=0; i<inTrack.getNumPoints(); i++)
- {
- DataPoint p = inTrack.getPoint(i);
- if (p != null && p.isWaypoint() && p.hasTimestamp())
- {
- return true;
- }
- }
- }
- return false;
- }
-}