X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=gps%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fgpx%2FGpxParser.java;fp=gps%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fgpx%2FGpxParser.java;h=9f544a9a48c8fcb0bf98fd9bfdc2b32253c4eb78;hb=1286991171ecbec6bea3ae99c3c1ac314d377efc;hp=043794146a12335665a232414417d4ce31300910;hpb=b6ac6626c441965aa70347c7100094c7831b0b8d;p=utils diff --git a/gps/src/main/java/org/wamblee/gpx/GpxParser.java b/gps/src/main/java/org/wamblee/gpx/GpxParser.java index 04379414..9f544a9a 100644 --- a/gps/src/main/java/org/wamblee/gpx/GpxParser.java +++ b/gps/src/main/java/org/wamblee/gpx/GpxParser.java @@ -34,49 +34,68 @@ import org.wamblee.xml.XMLException; */ public class GpxParser { - private static final String SCHEMA_RESOURCE = "gpx.xsd"; + private static final String SCHEMA_RESOURCE = "gpx.xsd"; - public GpxParser() { - // Empty. - } + public GpxParser() { + // Empty. + } - public Track parse(InputStream aIs) throws XMLException { - Document doc = DomUtils.convert(DomUtils.read(aIs)); - return parse(doc); - } + public Track parse(InputStream aIs) throws XMLException { + Document doc = DomUtils.convert(DomUtils.read(aIs)); + return parse(doc); + } - /** - * @param doc - */ - public Track parse(Document doc) { - Track track = new Track(); - List segments = doc.getRootElement().element("trk").elements( - "trkseg"); + /** + * @param doc + */ + public Track parse(Document doc) { + Track result = new Track(); + List tracks = doc.getRootElement().elements("trk"); + if ( tracks != null ) { + for (Element track: tracks) { + List segments = track.elements("trkseg"); + if ( segments != null ) { + for (Element segment: segments) { + parseTrackPoints(result, segment.elementIterator("trkpt")); + } + } + } + } - for (Element segment : segments) { - for (Iterator i = segment.elementIterator("trkpt"); i.hasNext();) { - Element trkpt = (Element) i.next(); - track.addPoint(parseTrackPoint(trkpt)); - } - } - return track; - } + List routes = doc.getRootElement().elements("rte"); + if ( routes != null ) { + for (Element route: routes) { + parseTrackPoints(result, route.elementIterator("rtept")); + } + } + + return result; + } + + + private void parseTrackPoints(Track aTrack, Iterator aPoints) { + while (aPoints.hasNext()) { + Element point = aPoints.next(); + aTrack.addPoint(parseTrackPoint(point)); + } + } + - /** - * @param trkpt - */ - private TrackPoint parseTrackPoint(Element trkpt) { - // System.out.println(trkpt.asXML() + "|\n"); - double latitude = new Double(trkpt.attributeValue("lat")); - double longitude = new Double(trkpt.attributeValue("lon")); - Element ele = trkpt.element("ele"); - double elevation = 0.0; - if (ele != null) { - elevation = new Double(ele.getText()); - } - // System.out.println(" lat = " + lat + " lon = " + lon + " ele = " + - // ele); - return new TrackPoint(latitude, longitude, elevation); - } + /** + * @param trkpt + */ + private TrackPoint parseTrackPoint(Element trkpt) { + // System.out.println(trkpt.asXML() + "|\n"); + double latitude = new Double(trkpt.attributeValue("lat")); + double longitude = new Double(trkpt.attributeValue("lon")); + Element ele = trkpt.element("ele"); + double elevation = 0.0; + if (ele != null) { + elevation = new Double(ele.getText()); + } + // System.out.println(" lat = " + lat + " lon = " + lon + " ele = " + + // ele); + return new TrackPoint(latitude, longitude, elevation); + } }