private Timestamp _timestamp = null;
private Photo _photo = null;
private String _waypointName = null;
- private boolean _pointValid = false;
+ private boolean _startOfSegment = false;
/**
_altitude = new Altitude(getFieldValue(Field.ALTITUDE), inAltFormat);
_timestamp = new Timestamp(getFieldValue(Field.TIMESTAMP));
_waypointName = getFieldValue(Field.WAYPT_NAME);
+ String segmentStr = getFieldValue(Field.NEW_SEGMENT);
+ if (segmentStr != null) {segmentStr = segmentStr.trim();}
+ _startOfSegment = (segmentStr != null && (segmentStr.equals("1") || segmentStr.toUpperCase().equals("Y")));
}
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);
}
}
}
+ /** @param inFlag true for start of track segment */
+ public void setSegmentStart(boolean inFlag)
+ {
+ setFieldValue(Field.NEW_SEGMENT, inFlag?"1":null);
+ }
+ /** @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;
}
+ /** @return true if start of new track segment */
+ public boolean getSegmentStart()
+ {
+ return _startOfSegment;
+ }
+
/**
* @return true if point has a waypoint name
*/
{
return !inOther.isWaypoint();
}
- else
- {
- return (inOther._waypointName != null && inOther._waypointName.equals(_waypointName));
- }
+ return (inOther._waypointName != null && inOther._waypointName.equals(_waypointName));
}
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)
}
return false;
}
+
+
+ /**
+ * Get string for debug
+ * @see java.lang.Object#toString()
+ */
+ public String toString()
+ {
+ return "[Lat=" + getLatitude().toString() + ", Lon=" + getLongitude().toString() + "]";
+ }
}