QGIS API Documentation  2.18.21-Las Palmas (9fba24a)
qgsgeometrycollectionv2.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsgeometrycollectionv2.h
3  -------------------------------------------------------------------
4 Date : 28 Oct 2014
5 Copyright : (C) 2014 by Marco Hugentobler
6 email : marco.hugentobler at sourcepole dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 
16 #ifndef QGSGEOMETRYCOLLECTIONV2_H
17 #define QGSGEOMETRYCOLLECTIONV2_H
18 
19 #include "qgsabstractgeometryv2.h"
20 #include "qgspointv2.h"
21 #include <QVector>
22 
30 {
31  public:
35  virtual ~QgsGeometryCollectionV2();
36 
37  virtual QgsGeometryCollectionV2* clone() const override;
38 
41  int numGeometries() const;
42 
46  const QgsAbstractGeometryV2* geometryN( int n ) const;
47 
51  QgsAbstractGeometryV2* geometryN( int n );
52 
53  //methods inherited from QgsAbstractGeometry
54  virtual int dimension() const override;
55  virtual QString geometryType() const override { return "GeometryCollection"; }
56  virtual void clear() override;
57  virtual QgsAbstractGeometryV2* boundary() const override;
58 
60  virtual bool addGeometry( QgsAbstractGeometryV2* g );
61 
66  virtual bool insertGeometry( QgsAbstractGeometryV2* g, int index );
67 
72  virtual bool removeGeometry( int nr );
73 
75  bool transformZ = false ) override;
76  void transform( const QTransform& t ) override;
77 #if 0
78  virtual void clip( const QgsRectangle& rect ) override;
79 #endif
80  virtual void draw( QPainter& p ) const override;
81 
82  bool fromWkb( QgsConstWkbPtr wkb ) override;
83  virtual bool fromWkt( const QString& wkt ) override;
84  int wkbSize() const override;
85  unsigned char* asWkb( int& binarySize ) const override;
86  QString asWkt( int precision = 17 ) const override;
87  QDomElement asGML2( QDomDocument& doc, int precision = 17, const QString& ns = "gml" ) const override;
88  QDomElement asGML3( QDomDocument& doc, int precision = 17, const QString& ns = "gml" ) const override;
89  QString asJSON( int precision = 17 ) const override;
90 
91  virtual QgsRectangle boundingBox() const override;
92 
93  virtual QgsCoordinateSequenceV2 coordinateSequence() const override;
94  virtual int nCoordinates() const override;
95 
96  virtual double closestSegment( const QgsPointV2& pt, QgsPointV2& segmentPt, QgsVertexId& vertexAfter, bool* leftOf, double epsilon ) const override;
97  bool nextVertex( QgsVertexId& id, QgsPointV2& vertex ) const override;
98 
99  //low-level editing
100  virtual bool insertVertex( QgsVertexId position, const QgsPointV2& vertex ) override;
101  virtual bool moveVertex( QgsVertexId position, const QgsPointV2& newPos ) override;
102  virtual bool deleteVertex( QgsVertexId position ) override;
103 
104  virtual double length() const override;
105  virtual double area() const override;
106  virtual double perimeter() const override;
107 
108  bool hasCurvedSegments() const override;
109 
113  QgsAbstractGeometryV2* segmentize( double tolerance = M_PI_2 / 90, SegmentationToleranceType toleranceType = MaximumAngle ) const override;
114 
119  double vertexAngle( QgsVertexId vertex ) const override;
120 
121  virtual int vertexCount( int part = 0, int ring = 0 ) const override { return mGeometries[part]->vertexCount( 0, ring ); }
122  virtual int ringCount( int part = 0 ) const override { return mGeometries[part]->ringCount(); }
123  virtual int partCount() const override { return mGeometries.size(); }
124  virtual QgsPointV2 vertexAt( QgsVertexId id ) const override { return mGeometries[id.part]->vertexAt( id ); }
125 
126  virtual bool addZValue( double zValue = 0 ) override;
127  virtual bool addMValue( double mValue = 0 ) override;
128  virtual bool dropZValue() override;
129  virtual bool dropMValue() override;
130 
131  protected:
133 
137  virtual bool wktOmitChildType() const { return false; }
138 
141  bool fromCollectionWkt( const QString &wkt, const QList<QgsAbstractGeometryV2*>& subtypes, const QString& defaultChildWkbType = QString() );
142 
143  virtual QgsRectangle calculateBoundingBox() const override;
144  virtual void clearCache() const override { mBoundingBox = QgsRectangle(); mCoordinateSequence.clear(); QgsAbstractGeometryV2::clearCache(); }
145 
146  private:
147 
148  mutable QgsRectangle mBoundingBox;
149  mutable QgsCoordinateSequenceV2 mCoordinateSequence;
150 };
151 
152 #endif // QGSGEOMETRYCOLLECTIONV2_H
static unsigned index
A rectangle specified with double values.
Definition: qgsrectangle.h:35
virtual bool dropMValue()=0
Drops any measure values which exist in the geometry.
virtual QgsCoordinateSequenceV2 coordinateSequence() const =0
Retrieves the sequence of geometries, rings and nodes.
virtual QgsAbstractGeometryV2 & operator=(const QgsAbstractGeometryV2 &geom)
SegmentationToleranceType
Segmentation tolerance as maximum angle or maximum difference between approximation and circle...
TransformDirection
Enum used to indicate the direction (forward or inverse) of the transform.
virtual QString asJSON(int precision=17) const =0
Returns a GeoJSON representation of the geometry.
virtual bool hasCurvedSegments() const
Returns true if the geometry contains curved segments.
Abstract base class for all geometries.
virtual bool dropZValue()=0
Drops any z-dimensions which exist in the geometry.
virtual void clearCache() const
Clears any cached parameters associated with the geometry, eg bounding boxes.
virtual int wkbSize() const =0
Returns the size of the WKB representation of the geometry.
virtual bool wktOmitChildType() const
Returns whether child type names are omitted from Wkt representations of the collection.
#define M_PI_2
Definition: util.cpp:45
virtual bool addMValue(double mValue=0)=0
Adds a measure to the geometry, initialized to a preset value.
virtual void clear()=0
Clears the geometry, ie reset it to a null geometry.
Utility class for identifying a unique vertex within a geometry.
virtual bool fromWkb(QgsConstWkbPtr wkb)=0
Sets the geometry from a WKB string.
Point geometry type, with support for z-dimension and m-values.
Definition: qgspointv2.h:34
virtual QgsAbstractGeometryV2 * segmentize(double tolerance=M_PI/180., SegmentationToleranceType toleranceType=MaximumAngle) const
Returns a version of the geometry without curves.
virtual unsigned char * asWkb(int &binarySize) const =0
Returns a WKB representation of the geometry.
virtual bool addZValue(double zValue=0)=0
Adds a z-dimension to the geometry, initialized to a preset value.
virtual int partCount() const override
Returns count of parts contained in the geometry.
virtual QDomElement asGML3(QDomDocument &doc, int precision=17, const QString &ns="gml") const =0
Returns a GML3 representation of the geometry.
virtual bool nextVertex(QgsVertexId &id, QgsPointV2 &vertex) const =0
Returns next vertex id and coordinates.
virtual int ringCount(int part=0) const override
virtual bool fromWkt(const QString &wkt)=0
Sets the geometry from a WKT string.
virtual int nCoordinates() const
Returns the number of nodes contained in the geometry.
virtual double perimeter() const
Returns the perimeter of the geometry.
virtual QgsAbstractGeometryV2 * boundary() const =0
Returns the closure of the combinatorial boundary of the geometry (ie the topological boundary of the...
virtual QgsRectangle boundingBox() const =0
Returns the minimal bounding box for the geometry.
QVector< QgsAbstractGeometryV2 *> mGeometries
virtual double vertexAngle(QgsVertexId vertex) const =0
Returns approximate angle at a vertex.
virtual void clearCache() const override
Clears any cached parameters associated with the geometry, eg bounding boxes.
virtual bool deleteVertex(QgsVertexId position)=0
Deletes a vertex within the geometry.
virtual bool insertVertex(QgsVertexId position, const QgsPointV2 &vertex)=0
Inserts a vertex into the geometry.
virtual int dimension() const =0
Returns the inherent dimension of the geometry.
virtual double length() const
Returns the length of the geometry.
Class for doing transforms between two map coordinate systems.
virtual QString asWkt(int precision=17) const =0
Returns a WKT representation of the geometry.
virtual QString geometryType() const override
Returns a unique string representing the geometry type.
virtual int vertexCount(int part=0, int ring=0) const override
virtual void draw(QPainter &p) const =0
Draws the geometry using the specified QPainter.
double ANALYSIS_EXPORT leftOf(Point3D *thepoint, Point3D *p1, Point3D *p2)
Returns whether &#39;thepoint&#39; is left or right of the line from &#39;p1&#39; to &#39;p2&#39;.
virtual QgsPointV2 vertexAt(QgsVertexId) const override
Returns the point corresponding to a specified vertex id.
Definition: qgspointv2.h:191
virtual QDomElement asGML2(QDomDocument &doc, int precision=17, const QString &ns="gml") const =0
Returns a GML2 representation of the geometry.
virtual QgsAbstractGeometryV2 * clone() const =0
Clones the geometry by performing a deep copy.
virtual QgsRectangle calculateBoundingBox() const
Default calculator for the minimal bounding box for the geometry.
virtual bool moveVertex(QgsVertexId position, const QgsPointV2 &newPos)=0
Moves a vertex within the geometry.
virtual double closestSegment(const QgsPointV2 &pt, QgsPointV2 &segmentPt, QgsVertexId &vertexAfter, bool *leftOf, double epsilon) const =0
Searches for the closest segment of the geometry to a given point.
virtual QgsPointV2 vertexAt(QgsVertexId id) const override
Returns the point corresponding to a specified vertex id.
virtual double area() const
Returns the area of the geometry.
virtual void transform(const QgsCoordinateTransform &ct, QgsCoordinateTransform::TransformDirection d=QgsCoordinateTransform::ForwardTransform, bool transformZ=false)=0
Transforms the geometry using a coordinate transform.