import java.io.File;
/**
- * Class to hold the source of the point data,
- * including original file and file type, and
- * also file offsets for source copying
+ * Class to hold the source of the point data, including the original file
+ * and file type, and references to each of the point objects
*/
public class SourceInfo
{
/** File type of source file */
- public enum FILE_TYPE {TEXT, GPX, KML, NMEA, GPSBABEL, GPSIES};
+ public enum FILE_TYPE {TEXT, GPX, KML, NMEA, GPSBABEL, GPSIES, JSON};
/** Source file */
private File _sourceFile = null;
/** Array of datapoints */
private DataPoint[] _points = null;
+ /** Number of points */
+ private int _numPoints = 0;
+ /** Array of point indices (if necessary) */
+ private int[] _pointIndices = null;
/**
*/
public int getNumPoints()
{
- return _points.length;
+ return _numPoints;
+ }
+
+ /**
+ * Set the indices of the points selected out of a loaded track
+ * @param inSelectedFlags array of booleans showing whether each point in the original data was loaded or not
+ */
+ public void setPointIndices(boolean[] inSelectedFlags)
+ {
+ _numPoints = inSelectedFlags.length;
+ _pointIndices = new int[_numPoints];
+ int p=0;
+ for (int i=0; i<_numPoints; i++) {
+ if (inSelectedFlags[i]) {_pointIndices[p++] = i;}
+ }
+ // Now the point indices array holds the index of each of the selected points
}
/**
*/
public void populatePointObjects(Track inTrack, int inNumPoints)
{
+ if (_numPoints == 0) {_numPoints = inNumPoints;}
if (inNumPoints > 0)
{
_points = new DataPoint[inNumPoints];
public int getIndex(DataPoint inPoint)
{
int idx = -1;
- for (int i=0; i<_points.length && (idx < 0); i++) {
- if (_points[i] == inPoint) {idx = i;}
+ for (int i=0; i<_points.length; i++)
+ {
+ if (_points[i] == inPoint) {
+ idx = i;
+ break;
+ }
}
- return idx;
+ if (idx == -1) {return idx;} // point not found
+ if (_pointIndices == null) {return idx;} // All points loaded
+ return _pointIndices[idx]; // use point index mapping
}
}