track segments are now concatenated into one big track.
[utils] / gps / src / main / java / org / wamblee / gpx / GpxParser.java
index 30ced035712445f7e7cbeaafe02136db2a263d4e..043794146a12335665a232414417d4ce31300910 100644 (file)
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- */ 
+ */
 
 package org.wamblee.gpx;
 
 import java.io.InputStream;
 import java.util.Iterator;
+import java.util.List;
 
 import org.dom4j.Document;
 import org.dom4j.Element;
@@ -27,50 +28,55 @@ import org.wamblee.xml.DomUtils;
 import org.wamblee.xml.XMLException;
 
 /**
- * Parser for GPX tracks.  
- *
+ * Parser for GPX tracks.
+ * 
  * @author Erik Brakkee
  */
 public class GpxParser {
-    
-    private static final String SCHEMA_RESOURCE = "gpx.xsd";
-    
-    public GpxParser() { 
-        // Empty.
-    }
-    
-    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(); 
-        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));
-        }
-        return track;
-    }
 
-    /**
-     * @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);
-    }
+       private static final String SCHEMA_RESOURCE = "gpx.xsd";
+
+       public GpxParser() {
+               // Empty.
+       }
+
+       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<Element> segments = doc.getRootElement().element("trk").elements(
+                               "trkseg");
+
+               for (Element segment : segments) {
+                       for (Iterator i = segment.elementIterator("trkpt"); i.hasNext();) {
+                               Element trkpt = (Element) i.next();
+                               track.addPoint(parseTrackPoint(trkpt));
+                       }
+               }
+               return track;
+       }
+
+       /**
+        * @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);
+       }
 
 }