- public Track parse(Document doc) {
- Track track = new Track();
- Element root = doc.getRootElement().element("trk").element("trkseg");
- for ( Iterator i =root.elementIterator("trkpt"); i.hasNext(); ) {
- Element trkpt = (Element)i.next();
- track.addPoint(parseTrackPoint(trkpt));
+ public Track parse(String aDescription, Document doc) {
+ TrackImpl result = new TrackImpl(aDescription);
+ List<Element> tracks = doc.getRootElement().elements("trk");
+ if ( tracks != null ) {
+ for (Element track: tracks) {
+ String trackName = track.elementText("name");
+ TrackSegmentImpl trackSegment = new TrackSegmentImpl(trackName);
+ result.addSegment(trackSegment);
+ List<Element> segments = track.elements("trkseg");
+ if ( segments != null ) {
+ for (Element segment: segments) {
+ parseTrackPoints(trackSegment, segment.elementIterator("trkpt"));
+ }
+ }
+ }
+ }
+
+ List<Element> routes = doc.getRootElement().elements("rte");
+ if ( routes != null ) {
+ for (Element route: routes) {
+ String routeName = route.elementText("desc");
+ TrackSegmentImpl trackSegment = new TrackSegmentImpl(routeName);
+ result.addSegment(trackSegment);
+ parseTrackPoints(trackSegment, route.elementIterator("rtept"));
+ }
+ }
+
+ return result;
+ }
+
+
+ private void parseTrackPoints(TrackSegmentImpl aTrack, Iterator<Element> aPoints) {
+ while (aPoints.hasNext()) {
+ Element point = aPoints.next();
+ aTrack.addPoint(parseTrackPoint(point));