Ilwis-Objects  1.0
GIS and Remote Sensing framework for data access and processing
 All Classes Functions Enumerations Pages
feature.h
1 #ifndef FEATURE_H
2 #define FEATURE_H
3 
4 #include "Kernel_global.h"
5 
6 namespace Ilwis {
7 
8 class ColumnDefinition;
9 class UPFeatureI;
10 typedef std::unique_ptr<geos::geom::Geometry> UPGeometry;
11 class VertexIterator;
12 
13 //typedef QSharedPointer<FeatureInterface> UPFeatureI;
14 
15 class KERNELSHARED_EXPORT FeatureInterface {
16 public:
17  virtual ~FeatureInterface() ;
18  virtual quint64 featureid() const = 0;
19  virtual bool isValid() const = 0 ;
20  virtual const UPGeometry& geometry(quint32 index=0) const = 0;
21  virtual UPGeometry& geometry(quint32 index=0) = 0;
22  virtual void set(geos::geom::Geometry *geom, int index = 0) = 0;
23  QVariant operator()(const QString& name, int index = -1, bool asRaw=true);
24  virtual FeatureInterface *clone() const=0;
25  virtual IlwisTypes geometryType(qint32 index=0) const = 0;
26  virtual quint32 trackSize() const = 0;
27  virtual QVariant cell(const QString& name, int index=-1, bool asRaw=true) = 0;
28  virtual void setCell(const QString& name, const QVariant& var, int index=-1) = 0;
29  virtual void setCell(quint32 colIndex, const QVariant& var, int index=-1) = 0;
30  virtual QVariant cell(quint32 colIndex, int index=-1, bool asRaw=true) = 0;
31  virtual ColumnDefinition columndefinition(const QString& name, bool coverages=true) const = 0;
32  virtual ColumnDefinition columndefinition(quint32 index, bool coverages=true) const = 0;
33  virtual quint32 attributeColumnCount(bool coverages=true) const = 0;
34 protected:
35 
36 
37 };
38 
39 class KERNELSHARED_EXPORT UPFeatureI : public std::unique_ptr<FeatureInterface> {
40 public:
42  QVariant operator ()(const QString &name, int index, bool asRaw=true);
43  QVariant operator ()(const QString &name, bool asRaw=true);
44  void operator ()(const QString &name, const QVariant& var, int index=-1);
45  VertexIterator begin();
46  VertexIterator end();
47 };
48 
49 class Feature;
50 
51 class KERNELSHARED_EXPORT FeatureNode : public FeatureInterface {
52 
53  friend class Feature;
54 public:
55  ~FeatureNode() {}
56 private:
57  FeatureNode();
58  FeatureNode(geos::geom::Geometry *geom, Feature* feature, quint32 index );
59 
60  quint64 featureid() const ;
61  bool isValid() const ;
62  const UPGeometry& geometry(quint32 index=0) const;
63  UPGeometry& geometry(quint32 index=0);
64  void set(geos::geom::Geometry *geom, int index = 0);
65  FeatureInterface *clone() const;
66  IlwisTypes geometryType(qint32 index=0) const ;
67  quint32 trackSize() const ;
68  QVariant cell(quint32 colIndex, int index=-1, bool asRaw=true) ;
69  virtual QVariant cell(const QString& name, int index=-1, bool asRaw=true) ;
70  virtual void setCell(const QString& name, const QVariant& var, int index=-1);
71  virtual void setCell(quint32 colIndex, const QVariant& var, int index=-1);
72  ColumnDefinition columndefinition(const QString& name, bool coverages=true) const;
73  ColumnDefinition columndefinition(quint32 index, bool coverages=true) const;
74  quint32 attributeColumnCount(bool coverages=true) const;
75  quint32 index() const;
76  void setIndex(quint32 ind);
77 
78  Feature *_feature;
79  UPGeometry _geometry;
80  quint32 _index;
81 
82 };
83 
84 class FeatureCoverage;
85 class AttributeRecord;
86 
87 typedef std::unique_ptr<FeatureNode> UPFeatureNode;
89 typedef std::unique_ptr<AttributeRecord> UPAttributeRecord;
90 
97 class KERNELSHARED_EXPORT Feature : public FeatureInterface {
98  friend class FeatureCoverage;
99  friend class FeatureIterator;
100  friend class FeatureNode;
101 
102 public:
103  Feature();
104  Feature(const Ilwis::IFeatureCoverage &fcoverage, int rec=iUNDEF) ;
105  Feature(const FeatureCoverage* fcoverage, int rec=iUNDEF);
106  ~Feature();
107 
108  quint64 featureid() const;
109  bool isValid() const ;
110  const UPGeometry& geometry(quint32 index=0) const;
111  UPGeometry& geometry(quint32 index=0);
112  void set(geos::geom::Geometry *geom, int index = 0);
113  FeatureInterface* clone() const;
114  IlwisTypes geometryType(qint32 index=iUNDEF) const;
115  quint32 trackSize() const;
116  QVariant cell(quint32 colIndex, int index=-1, bool asRaw=true) ;
117  QVariant cell(const QString& name, int index=-1, bool asRaw=true);
118  void setCell(const QString& name, const QVariant& var, int index=-1);
119  void setCell(quint32 colIndex, const QVariant& var, int index=-1) ;
120  ColumnDefinition columndefinition(const QString& name, bool coverages=true) const;
121  ColumnDefinition columndefinition(quint32 index, bool coverages=true) const;
122  quint32 attributeColumnCount(bool coverages=true) const;
123 
124 private:
125  Feature(const Feature& f) ; // nocopy constructor, _featureid is unique
126  Feature(AttributeRecord *rec);
127  Feature& operator=(const Feature& f) ; // no assignment , _featureid is unique
128 
129  static quint64 _idbase;
130  quint64 _featureid; // unique
131  std::vector<UPFeatureNode> _track;
132  UPAttributeRecord _record;
133 };
134 
135 
136 
137 bool operator==(const Feature& f1, const Feature& f2) ;
138 
139 }
140 Ilwis::FeatureInterface *createFeature(Ilwis::FeatureCoverage *fcoverage);
141 #endif // FEATURE_H