X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=gps%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fgps%2Ftrack%2FTrackImpl.java;fp=gps%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fgps%2Ftrack%2FTrackImpl.java;h=12513f3e1c09c258da460f890049911346b374bc;hb=698d0d066b8cc06d28c3cc9160ed0d897ac44606;hp=0000000000000000000000000000000000000000;hpb=0ef9fcaa10df47bac114bda9264981396fb18c49;p=utils diff --git a/gps/src/main/java/org/wamblee/gps/track/TrackImpl.java b/gps/src/main/java/org/wamblee/gps/track/TrackImpl.java new file mode 100644 index 00000000..12513f3e --- /dev/null +++ b/gps/src/main/java/org/wamblee/gps/track/TrackImpl.java @@ -0,0 +1,83 @@ +package org.wamblee.gps.track; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.wamblee.gps.geometry.Point; + +public class TrackImpl implements Track { + + private String _description; + private List _segments; + + public TrackImpl(String aDescription) { + _description = aDescription; + _segments = new ArrayList(); + } + + public void addSegment(TrackSegment aSegment) { + _segments.add(aSegment); + } + + @Override + public String getDescription() { + return _description; + } + + @Override + public Point getPoint(int aIndex) { + int localIndex = aIndex; + Iterator i = _segments.iterator(); + while (i.hasNext()) { + TrackSegment segment = i.next(); + if ( localIndex < segment.size() ) { + return segment.getPoint(localIndex); + } + localIndex -= segment.size(); + } + throw new IndexOutOfBoundsException("" + aIndex); + } + + @Override + public double getMinCoordinate(int i) { + if ( size() == 0 ) { + throw new IllegalArgumentException("empty track"); + } + double result = Double.MAX_VALUE; + for (TrackSegment segment: _segments) { + if ( segment.size() > 0 ) { + result = Math.min(result, segment.getMinCoordinate(i)); + } + } + return 0; + } + + @Override + public double getMaxCoordinate(int i) { + if ( size() == 0 ) { + throw new IllegalArgumentException("empty track"); + } + double result = Double.MIN_VALUE; + for (TrackSegment segment: _segments) { + if ( segment.size() > 0 ) { + result = Math.max(result, segment.getMaxCoordinate(i)); + } + } + return 0; + } + + @Override + public List getSegments() { + return _segments; + } + + @Override + public int size() { + int result = 0; + for (TrackSegment segment: _segments) { + result += segment.size(); + } + return result; + } +}