]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/load/xml/GpxHandler.java
Version 5, May 2008
[GpsPrune.git] / tim / prune / load / xml / GpxHandler.java
index 962b495741909fb0e46c1fc07c62c254df18a3d1..b58ec3127cc63bab9541d465a339afcb448d9841 100644 (file)
@@ -13,9 +13,11 @@ import tim.prune.data.Field;
  */
 public class GpxHandler extends XmlHandler
 {
+       private boolean _insideWaypoint = false;
        private boolean _insideName = false;
        private boolean _insideElevation = false;
        private boolean _insideTime = false;
+       private boolean _startSegment = true;
        private String _name = null, _latitude = null, _longitude = null;
        private String _elevation = null;
        private String _time = null;
@@ -27,11 +29,12 @@ public class GpxHandler extends XmlHandler
         * @see org.xml.sax.ContentHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
         */
        public void startElement(String uri, String localName, String qName,
-                       Attributes attributes) throws SAXException
+               Attributes attributes) throws SAXException
        {
                // Read the parameters for waypoints and track points
                if (qName.equalsIgnoreCase("wpt") || qName.equalsIgnoreCase("trkpt"))
                {
+                       _insideWaypoint = qName.equalsIgnoreCase("wpt");
                        int numAttributes = attributes.getLength();
                        for (int i=0; i<numAttributes; i++)
                        {
@@ -55,6 +58,10 @@ public class GpxHandler extends XmlHandler
                {
                        _insideTime = true;
                }
+               else if (qName.equalsIgnoreCase("trkseg"))
+               {
+                       _startSegment = true;
+               }
                super.startElement(uri, localName, qName, attributes);
        }
 
@@ -64,7 +71,7 @@ public class GpxHandler extends XmlHandler
         * @see org.xml.sax.ContentHandler#endElement(java.lang.String, java.lang.String, java.lang.String)
         */
        public void endElement(String uri, String localName, String qName)
-       throws SAXException
+               throws SAXException
        {
                if (qName.equalsIgnoreCase("wpt") || qName.equalsIgnoreCase("trkpt"))
                {
@@ -91,10 +98,10 @@ public class GpxHandler extends XmlHandler
         * @see org.xml.sax.ContentHandler#characters(char[], int, int)
         */
        public void characters(char[] ch, int start, int length)
-                       throws SAXException
+               throws SAXException
        {
                String value = new String(ch, start, length);
-               if (_insideName) {_name = checkCharacters(_name, value);}
+               if (_insideName && _insideWaypoint) {_name = checkCharacters(_name, value);}
                else if (_insideElevation) {_elevation = checkCharacters(_elevation, value);}
                else if (_insideTime) {_time = checkCharacters(_time, value);}
                super.characters(ch, start, length);
@@ -120,10 +127,14 @@ public class GpxHandler extends XmlHandler
        private void processPoint()
        {
                // Put the values into a String array matching the order in getFieldArray()
-               String[] values = new String[5];
+               String[] values = new String[6];
                values[0] = _latitude; values[1] = _longitude;
                values[2] = _elevation; values[3] = _name;
                values[4] = _time;
+               if (_startSegment && !_insideWaypoint) {
+                       values[5] = "1";
+                       _startSegment = false;
+               }
                _pointList.add(values);
        }
 
@@ -134,7 +145,7 @@ public class GpxHandler extends XmlHandler
        public Field[] getFieldArray()
        {
                final Field[] fields = {Field.LATITUDE, Field.LONGITUDE, Field.ALTITUDE,
-                       Field.WAYPT_NAME, Field.TIMESTAMP};
+                       Field.WAYPT_NAME, Field.TIMESTAMP, Field.NEW_SEGMENT};
                return fields;
        }