source: subversion/editors/osm-editor/qt3/GPXParser2.cpp @ 1158

Last change on this file since 1158 was 1158, checked in by nick, 13 years ago

moved current version to qt3 directory in preparation for qt4

File size: 3.5 KB
Line 
1/*
2    Copyright (C) 2006 Nick Whitelegg, Hogweed Software, nick@hogweed.org
3
4    This program is free software; you can redistribute it and/or modify
5    it under the terms of the GNU Lesser General Public License as published by
6    the Free Software Foundation; either version 2 of the License, or
7    (at your option) any later version.
8
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU Lesser General Public License for more details.
13
14    You should have received a copy of the GNU Lesser General Public License
15    along with this program; if not, write to the Free Software
16    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
17
18 */
19
20// Read GPX
21// Track points become nodes of type "trackpoint"
22// Waypoints become nodes of the appropriate type
23// No attempt to parse track segments or anything else.
24
25#include "GPXParser2.h"
26
27#include <iostream>
28#include <cstdlib>
29using std::cout;
30using std::endl;
31using std::cerr;
32
33#include <qregexp.h>
34
35namespace OpenStreetMap
36{
37
38GPXParser2::GPXParser2(  )
39{
40        inDoc = inWpt = inTrk = inName = inTrkpt = inType = false;
41        components = new Components2;
42        curName = curType = curTimestamp = "";
43}
44
45bool GPXParser2::startDocument()
46{
47        inDoc = true;
48        return true;
49}
50
51bool GPXParser2::endDocument()
52{
53        inDoc = false;
54        return true;
55}
56
57bool GPXParser2::startElement(const QString&,const QString&,
58                                                const QString& element,
59                                                const QXmlAttributes& attributes)
60{
61        if(inDoc)
62        {
63                // 28/10/05 changed round to only call newSegment() if trkseg
64                // is encountered
65                if (element=="trk")
66                {
67                        inTrk = true;
68                        cerr<<"inTrk=true"<<endl;
69                }
70
71                else if(element=="wpt")
72                {
73                        inWpt=true;
74                        curType="waypoint";
75                        curName = "";
76                }
77                else if (element=="name" && (inWpt||inTrkpt))
78                {
79                        inName=true;
80                }
81                else if (element=="type" && (inWpt||inTrkpt))
82                {
83                        inType=true;
84                }
85                else if (element=="time" && (inWpt||inTrkpt))
86                {
87                        inTime=true;
88                }
89                else if (element=="trkpt" && inTrk)
90                {
91                        inTrkpt = true;
92                        curType="trackpoint";
93                        curName = "";
94                }
95
96                if(element=="wpt"||element=="trkpt")
97                {
98                        for(int count=0; count<attributes.length(); count++)
99                        {
100                                if(attributes.qName(count)=="lat")
101                                        curLat = atof (attributes.value(count).ascii());               
102                                else if(attributes.qName(count)=="lon")
103                                        curLong = atof (attributes.value(count).ascii());
104                        }
105                }
106        }
107        return true;
108}
109
110bool GPXParser2::endElement(const QString&,const QString&,
111                                                const QString&  element)
112{
113        if(inTrkpt && element=="trkpt")
114        {
115                //components->addNewNode (curLat,curLong,"","trackpoint",curTimestamp);
116                components->addTrackPoint (curLat,curLong,curTimestamp);
117                inTrkpt = false;
118        }
119
120        else if(inTrk && element=="trk")
121        {
122                inTrk = false;
123        }
124
125        else if(inName && element=="name")
126                inName=false;
127
128        else if(inType && element=="type")
129                inType=false;
130
131        else if(inTime && element=="time")
132                inTime=false;
133
134        else if(inWpt && element=="wpt")
135        {
136                components->addNewNode(curLat,curLong,curName,curType,curTimestamp);
137                inWpt = false;
138        }
139
140        return true;
141}
142
143bool GPXParser2::characters(const QString& characters)
144{
145        QString chr=characters;
146        if(characters==QString::null) chr="";
147        if(characters=="\n") return true;
148        if(inName)
149                curName = chr;
150        else if(inType)
151                curType = chr; 
152        else if(inTime)
153                curTimestamp = chr; // 10/04/05 timestamp now string
154
155        return true;
156}
157
158}
159////////////////////////////////////////////////////////////////////////////////
160
Note: See TracBrowser for help on using the repository browser.