SVN checkout 11/12/2010
[monav:monav.git] / plugins / osmimporter / ientityreader.h
1 /*
2 Copyright 2010  Christian Vetter veaac.fdirct@gmail.com
3
4 This file is part of MoNav.
5
6 MoNav is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 MoNav is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with MoNav.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #ifndef IENTITYREADER_H
21 #define IENTITYREADER_H
22
23 #include "utils/coordinates.h"
24 #include <QStringList>
25 #include <vector>
26
27 class IEntityReader {
28
29 public:
30
31         struct Tag {
32                 unsigned key;
33                 QString value;
34         };
35
36         struct Node {
37                 unsigned id;
38                 GPSCoordinate coordinate;
39                 std::vector< Tag > tags;
40         };
41
42         struct Way {
43                 unsigned id;
44                 std::vector< unsigned > nodes;
45                 std::vector< Tag > tags;
46         };
47
48         struct RelationMember {
49                 unsigned ref;
50                 enum Type {
51                         Way, Node, Relation
52                 } type;
53                 QString role;
54         };
55
56         struct Relation {
57                 unsigned id;
58                 std::vector< RelationMember > members;
59                 std::vector< Tag > tags;
60         };
61
62         enum EntityType {
63                 EntityNone, EntityNode, EntityWay, EntityRelation
64         };
65
66         virtual bool open( QString filename ) = 0;
67         virtual void setNodeTags( QStringList tags ) = 0; // sets the set of tags to extract
68         virtual void setWayTags( QStringList tags ) = 0; // sets the set of tags to extract
69         virtual void setRelationTags( QStringList tags ) = 0; // sets the set of tags to extract
70         virtual EntityType getEntitiy( Node* node, Way* way, Relation* relation ) = 0; // get the next entity. EntityNone signifies the end of the data stream
71         virtual ~IEntityReader(){}
72 };
73
74 #endif // IENTITYREADER_H