source: subversion/applications/editors/osm-editor/qt3/Way.h @ 16590

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

moved current version to qt3 directory in preparation for qt4

File size: 3.4 KB
Line 
1#ifndef WAY_H
2#define WAY_H
3
4/*
5    Copyright (C) 2006 Nick Whitelegg, Hogweed Software, nick@hogweed.org
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
20
21 */
22
23// 030706 change internal representation from Segment* to int (seg id)
24#include "Segment.h"
25#include "RouteMetaDataHandler.h"
26#include <qtextstream.h>
27#include <vector>
28
29
30using std::vector;
31
32
33namespace OpenStreetMap
34{
35
36class Components2;
37
38class Way
39{
40protected:
41        vector<int> segments;
42        QString type, name, ref;
43        int osm_id;
44        Components2 *components;
45        bool area;
46        std::map <QString,QString> tags;
47
48public:
49        Way(Components2 *comp)
50        {
51                osm_id = 0;
52                name = type = ref = "";
53                components = comp;
54                area = false;
55                tags["name"] = tags["ref"] = "";
56        }
57
58        void setSegments(vector<Segment*>&);
59
60        void setName(const QString& n) 
61        {
62                //name = n;
63                tags["name"] = n;
64        }
65        void setRef(const QString& r) 
66        {
67                //ref = r;
68                tags["ref"] = r;
69        }
70
71        // use tags
72        void setType(const QString& t);
73        void setType1(const QString& t) 
74        {
75                // use tags
76                //type = t;
77                RouteMetaDataHandler mdh;
78                RouteMetaData md = mdh.getMetaData(t);
79                tags["foot"] = md.foot;
80                tags["horse"] = md.horse;
81                tags["bicycle"] = md.bike;
82                tags["motorcar"] = md.car;
83                tags["highway"] = md.routeClass;
84                if(md.railway!="")
85                        tags["railway"] = md.railway;
86        }
87        void setSegs();
88
89        QString getName()
90        {
91                //return name;
92                return tags["name"];
93        }
94        QString getType()
95        {
96                // use tags
97                //return type;
98                RouteMetaDataHandler mdh;
99                RouteMetaData md;
100                for(std::map<QString,QString>::iterator i=tags.begin(); i!=tags.end();
101                        i++)
102                {
103                        md.parseKV(i->first, i->second);
104                }
105                QString t = mdh.getRouteType(md);
106                return t;
107        }
108        QString getRef()
109        {
110                //return ref; // eg road number
111                return tags["ref"];
112        }
113
114        void wayToOSM(QTextStream&, bool allUid=false);
115
116        int getOSMID()
117        {
118                return osm_id;
119        }
120
121        void setOSMID(int i);
122
123        QByteArray toOSM();
124
125        void addSegment (Segment *s)
126        {
127                if(s->getOSMID())
128                {
129                        // Segments take on the type of the parent way, if it has one
130                        /* 090706 not any more - no need for this - rendering code looks
131                         * at the segment's parent way
132                        if(type!="")
133                                s->setType(type);
134                        */
135                        s->setWayStatus(true);
136                        s->setWayID(osm_id);
137                        segments.push_back(s->getOSMID());
138                }
139        }
140
141        // used by parsers when the segment is not in the current area
142        void addSegmentID(int i)
143        {
144                segments.push_back(i);
145        }
146
147        int removeSegment(Segment *s);
148        bool addSegmentAt(int index, Segment *s);
149
150        void setComponents(Components2 *c) { components=c; }
151
152        bool isArea() { return area; }
153
154        Segment *getSegment(int i);
155
156        int nSegments() { return segments.size(); }
157
158        void setArea(bool a) { area=a; }
159
160        Segment *longestSegment();
161
162        void addTag(QString& k,const QString& v)
163        {
164                /*
165                k = (k=="car") ? "motorcar" : k;
166                k = (k=="bike") ? "bicycle" : k;
167                */
168                tags[k] = v;
169        }
170};
171
172typedef Way Area;
173
174}
175
176#endif
Note: See TracBrowser for help on using the repository browser.