Ilwis-Objects  1.0
GIS and Remote Sensing framework for data access and processing
 All Classes Functions Enumerations Pages
featurecoverage.h
1 #ifndef FEATURECOVERAGE_H
2 #define FEATURECOVERAGE_H
3 
4 #include <memory>
5 #include <unordered_map>
6 #include "Kernel_global.h"
7 
8 namespace geos{
9 namespace geom{
10 class GeometryFactory;
11 }
12 }
13 namespace Ilwis {
14 
15 class FeatureNode;
16 
17 typedef std::vector<UPFeatureI> Features;
18 
19 class FeatureIterator;
20 class FeatureFactory;
21 class AttributeRecord;
22 typedef std::unique_ptr<geos::geom::GeometryFactory> UPGeomFactory;
23 
24 struct FeatureInfo {
25  FeatureInfo() : _geomCnt(0), _subGeomCnt(0) {}
26  quint32 _geomCnt;
27  quint32 _subGeomCnt;
28  std::vector<quint32> _perIndex;
29 };
30 
76 class KERNELSHARED_EXPORT FeatureCoverage : public Coverage
77 {
78 public:
79 
80  friend class FeatureIterator;
81 
86  ~FeatureCoverage();
87 
94  FeatureCoverage(const Resource &resource);
95 
96  //@override
97  IlwisTypes featureTypes() const;
98 
104  void featureTypes(IlwisTypes types);
105 
117  UPFeatureI& newFeature(geos::geom::Geometry *geom, bool load=true);
118  UPFeatureI& newFeature(const QString& wkt, bool load=true);
119 
134  UPFeatureI& newFeatureFrom(const Ilwis::UPFeatureI &existingFeature, const Ilwis::ICoordinateSystem &csySource=ICoordinateSystem());
135 
145  quint32 featureCount(IlwisTypes types=itFEATURE, bool subAsDistinct=false, int index=iUNDEF) const;
146 
158  void setFeatureCount(IlwisTypes types, quint32 geomCnt, quint32 multicnt, int index=0);
159  quint32 maxIndex() const;
160 
161  //@override
162  IlwisTypes ilwisType() const;
163 
169  FeatureCoverage *clone();
170 
171  static IlwisTypes geometryType(const geos::geom::Geometry *geom) ;
172  const UPGeomFactory &geomfactory() const;
173  bool prepare();
174 protected:
175  void copyTo(IlwisObject *obj);
176 private:
177  IlwisTypes _featureTypes;
178  Features _features;
179  std::vector<FeatureInfo> _featureInfo;
180  FeatureFactory *_featureFactory;
181  std::mutex _mutex2;
182  quint32 _maxIndex;
183  UPGeomFactory _geomfactory;
184  std::mutex _loadmutex;
185 
186 
187  Ilwis::UPFeatureI& createNewFeature(IlwisTypes tp);
188  void adaptFeatureCounts(int tp, quint32 geomCnt, quint32 subGeomCnt, int index);
189 };
190 
192 
193 
194 }
195 
196 KERNELSHARED_EXPORT Ilwis::CoordinateSystem *CSY(geos::geom::Geometry *geom);
197 
198 Q_DECLARE_METATYPE(Ilwis::IFeatureCoverage)
199 
200 #endif // FEATURECOVERAGE_H