]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/data/DataPoint.java
Version 4, January 2008
[GpsPrune.git] / tim / prune / data / DataPoint.java
index cd285d66790a83f263b78a44e0ef11ce1b7517cc..5e864ce10e821068310932621f24c011be9e3097 100644 (file)
@@ -17,7 +17,7 @@ public class DataPoint
        private Timestamp _timestamp = null;
        private Photo _photo = null;
        private String _waypointName = null;
-       private boolean _pointValid = false;
+       // private boolean _startOfSegment = false;
 
 
        /**
@@ -48,6 +48,7 @@ public class DataPoint
                _altitude = new Altitude(getFieldValue(Field.ALTITUDE), inAltFormat);
                _timestamp = new Timestamp(getFieldValue(Field.TIMESTAMP));
                _waypointName = getFieldValue(Field.WAYPT_NAME);
+               // TODO: Parse segment start field (format?)
        }
 
 
@@ -60,11 +61,15 @@ public class DataPoint
        public DataPoint(Coordinate inLatitude, Coordinate inLongitude, Altitude inAltitude)
        {
                // Only these three fields are available
-               _fieldValues = new String[0];
-               _fieldList = new FieldList();
+               _fieldValues = new String[3];
+               Field[] fields = {Field.LATITUDE, Field.LONGITUDE, Field.ALTITUDE};
+               _fieldList = new FieldList(fields);
                _latitude = inLatitude;
+               _fieldValues[0] = inLatitude.output(Coordinate.FORMAT_DEG_MIN_SEC);
                _longitude = inLongitude;
+               _fieldValues[1] = inLongitude.output(Coordinate.FORMAT_DEG_MIN_SEC);
                _altitude = inAltitude;
+               if (inAltitude != null) {_fieldValues[2] = "" + inAltitude.getValue(Altitude.FORMAT_METRES);}
                _timestamp = new Timestamp(null);
        }
 
@@ -133,30 +138,37 @@ public class DataPoint
        }
 
 
+       /** @return latitude */
        public Coordinate getLatitude()
        {
                return _latitude;
        }
+       /** @return longitude */
        public Coordinate getLongitude()
        {
                return _longitude;
        }
+       /** @return true if point has altitude */
        public boolean hasAltitude()
        {
                return _altitude.isValid();
        }
+       /** @return altitude */
        public Altitude getAltitude()
        {
                return _altitude;
        }
+       /** @return true if point has timestamp */
        public boolean hasTimestamp()
        {
                return _timestamp.isValid();
        }
+       /** @return timestamp */
        public Timestamp getTimestamp()
        {
                return _timestamp;
        }
+       /** @return waypoint name, if any */
        public String getWaypointName()
        {
                return _waypointName;
@@ -197,10 +209,7 @@ public class DataPoint
                {
                        return !inOther.isWaypoint();
                }
-               else
-               {
-                       return (inOther._waypointName != null && inOther._waypointName.equals(_waypointName));
-               }
+               return (inOther._waypointName != null && inOther._waypointName.equals(_waypointName));
        }
 
 
@@ -241,21 +250,33 @@ public class DataPoint
        public DataPoint[] interpolate(DataPoint inEndPoint, int inNumPoints)
        {
                DataPoint[] range = new DataPoint[inNumPoints];
-               Coordinate endLatitude = inEndPoint.getLatitude();
-               Coordinate endLongitude = inEndPoint.getLongitude();
-               Altitude endAltitude = inEndPoint.getAltitude();
-
                // Loop over points
                for (int i=0; i<inNumPoints; i++)
                {
-                       Coordinate latitude = Coordinate.interpolate(_latitude, endLatitude, i, inNumPoints);
-                       Coordinate longitude = Coordinate.interpolate(_longitude, endLongitude, i, inNumPoints);
-                       Altitude altitude = Altitude.interpolate(_altitude, endAltitude, i, inNumPoints);
+                       Coordinate latitude = Coordinate.interpolate(_latitude, inEndPoint.getLatitude(), i, inNumPoints);
+                       Coordinate longitude = Coordinate.interpolate(_longitude, inEndPoint.getLongitude(), i, inNumPoints);
+                       Altitude altitude = Altitude.interpolate(_altitude, inEndPoint.getAltitude(), i, inNumPoints);
                        range[i] = new DataPoint(latitude, longitude, altitude);
                }
                return range;
        }
 
+       /**
+        * Interpolate between the two given points
+        * @param inStartPoint start point
+        * @param inEndPoint end point
+        * @param inFrac fractional distance from first point (0.0 to 1.0)
+        * @return new DataPoint object between two given ones
+        */
+       public static DataPoint interpolate(DataPoint inStartPoint, DataPoint inEndPoint, double inFrac)
+       {
+               if (inStartPoint == null || inEndPoint == null) {return null;}
+               return new DataPoint(
+                       Coordinate.interpolate(inStartPoint.getLatitude(), inEndPoint.getLatitude(), inFrac),
+                       Coordinate.interpolate(inStartPoint.getLongitude(), inEndPoint.getLongitude(), inFrac),
+                       Altitude.interpolate(inStartPoint.getAltitude(), inEndPoint.getAltitude(), inFrac)
+               );
+       }
 
        /**
         * Calculate the number of radians between two points (for distance calculation)
@@ -338,4 +359,14 @@ public class DataPoint
                }
                return false;
        }
+
+
+       /**
+        * Get string for debug
+        * @see java.lang.Object#toString()
+        */
+       public String toString()
+       {
+               return "[Lat=" + getLatitude().toString() + ", Lon=" + getLongitude().toString() + "]";
+       }
 }