QGIS API Documentation
3.26.3-Buenos Aires (65e4edfdad)
|
Go to the documentation of this file.
25 #include <nlohmann/json.hpp>
56 return ( diff > 0 ) - ( diff < 0 );
98 const bool hasZ = subgeom->
is3D();
121 double xmin = std::numeric_limits<double>::max();
122 double ymin = std::numeric_limits<double>::max();
123 double xmax = -std::numeric_limits<double>::max();
124 double ymax = -std::numeric_limits<double>::max();
225 for ( ; j < n; i = j++ )
233 const double d = vi.
x() * vj.
y() - vj.
x() * vi.
y();
235 Cx += ( vi.
x() + vj.
x() ) * d;
236 Cy += ( vi.
y() + vj.
y() ) * d;
242 for (
int i = 0; i < n - 1; ++i )
248 return QgsPoint( Cx / ( n - 1 ), Cy / ( n - 1 ) );
252 return QgsPoint( v0.
x() + Cx / ( 3. * A ), v0.
y() + Cy / ( 3. * A ) );
272 addZValue( std::numeric_limits<double>::quiet_NaN() );
281 addMValue( std::numeric_limits<double>::quiet_NaN() );
397 Q_UNUSED( tolerance )
398 Q_UNUSED( toleranceType )
406 levels.fill( Level() );
408 levels[0].index = index;
415 if ( depth == 0 && levels[0].index >= levels[0].g->childCount() )
418 Q_ASSERT( !levels[depth].g->hasChildGeometries() );
420 ++levels[depth].index;
423 while ( depth > 0 && levels[depth].index >= levels[depth].g->childCount() )
426 ++levels[depth].index;
443 Q_ASSERT( !levels[depth].g->hasChildGeometries() );
444 return levels[depth].g->childPoint( levels[depth].index );
449 int part = 0, ring = 0, vertex = levels[depth].index;
454 else if ( depth == 1 )
457 part = levels[0].index;
459 ring = levels[0].index;
461 else if ( depth == 2 )
463 part = levels[0].index;
464 ring = levels[1].index;
474 if (
const QgsCurve *curve =
dynamic_cast<const QgsCurve *
>( levels[depth].g ) )
477 curve->pointAt( vertex, p, vertexType );
480 return QgsVertexId( part, ring, vertex, vertexType );
485 if ( depth != other.depth )
487 return std::equal( std::begin( levels ), std::begin( levels ) + depth + 1, std::begin( other.levels ) );
490 void QgsAbstractGeometry::vertex_iterator::digDown()
492 if ( levels[depth].g->hasChildGeometries() && levels[depth].index >= levels[depth].g->childCount() )
496 while ( levels[depth].g->hasChildGeometries() )
499 Q_ASSERT( depth < 3 );
500 levels[depth].index = 0;
501 levels[depth].g = levels[depth - 1].g->childGeometry( levels[depth - 1].index );
519 const QgsGeometryCollection *collection = qgsgeometry_cast< const QgsGeometryCollection * >( mGeometry );
558 return mGeometry == other.mGeometry && mIndex == other.mIndex;
577 const QgsGeometryCollection *collection = qgsgeometry_cast< const QgsGeometryCollection * >( mGeometry );
600 const QgsGeometryCollection *collection = qgsgeometry_cast< const QgsGeometryCollection * >( mGeometry );
616 return mGeometry == other.mGeometry && mIndex == other.mIndex;
627 return g == other.g && index == other.index;
bool intersects(const QgsRectangle &rect) const SIP_HOLDGIL
Returns true when rectangle intersects with other rectangle.
Abstract base class for curved geometry type.
virtual QgsCoordinateSequence coordinateSequence() const =0
Retrieves the sequence of geometries, rings and nodes.
QVector< QgsRingSequence > QgsCoordinateSequence
bool operator==(const_part_iterator other) const
virtual bool dropMValue()=0
Drops any measure values which exist in the geometry.
virtual int compareToSameClass(const QgsAbstractGeometry *other) const =0
Compares to an other geometry of the same class, and returns a integer for sorting of the two geometr...
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, e.g., bounding boxes.
QgsAbstractGeometry * operator*() const
Returns the current item.
virtual bool addZValue(double zValue=0)=0
Adds a z-dimension to the geometry, initialized to a preset value.
bool operator==(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
vertex_iterator & operator++()
The prefix ++ operator (++it) advances the iterator to the next vertex and returns an iterator to the...
Point geometry type, with support for z-dimension and m-values.
virtual bool addMValue(double mValue=0)=0
Adds a measure to the geometry, initialized to a preset value.
static Type flatType(Type type) SIP_HOLDGIL
Returns the flat type for a WKB type.
virtual void filterVertices(const std::function< bool(const QgsPoint &) > &filter)
Filters the vertices from the geometry in place, removing any which do not return true for the filter...
QgsGeometryConstPartIterator parts() const
Returns Java-style iterator for traversal of parts of the geometry.
static Type addZ(Type type) SIP_HOLDGIL
Adds the z dimension to a WKB type and returns the new type.
Java-style iterator for const traversal of parts of a geometry.
QString wktTypeStr() const
Returns the WKT type string of the geometry.
virtual double length() const
Returns the planar, 2-dimensional length of the geometry.
Type
The WKB type describes the number of dimensions a geometry has.
SegmentationToleranceType
Segmentation tolerance as maximum angle or maximum difference between approximation and circle.
QgsPoint operator*() const
Returns the current item.
QgsWkbTypes::Type mWkbType
int sortIndex() const
Returns the sort index for the geometry, used in the compareTo() method to compare geometries of diff...
virtual int compareTo(const QgsAbstractGeometry *other) const
Comparator for sorting of geometry.
A rectangle specified with double values.
virtual int vertexCount(int part=0, int ring=0) const =0
Returns the number of vertices of which this geometry is built.
bool operator==(const vertex_iterator &other) const
QgsAbstractGeometry()=default
Constructor for QgsAbstractGeometry.
virtual QgsPoint vertexAt(QgsVertexId id) const =0
Returns the point corresponding to a specified vertex id.
bool isMeasure() const SIP_HOLDGIL
Returns true if the geometry contains m values.
const QgsAbstractGeometry * operator*() const
Returns the current item.
The part_iterator class provides STL-style iterator for geometry parts.
virtual double area() const
Returns the planar, 2-dimensional area of the geometry.
static Type addM(Type type) SIP_HOLDGIL
Adds the m dimension to a WKB type and returns the new type.
double & rx()
Returns a reference to the x-coordinate of this point.
virtual int dimension() const =0
Returns the inherent dimension of the geometry.
int partCount() const override
Returns count of parts contained in the geometry.
QgsWkbTypes::Type wkbType() const SIP_HOLDGIL
Returns the WKB type of the geometry.
virtual bool hasChildGeometries() const
Returns whether the geometry has any child geometries (false for point / curve, true otherwise)
virtual json asJsonObject(int precision=17) const
Returns a json object representation of the geometry.
The part_iterator class provides STL-style iterator for const references to geometry parts.
virtual QgsPoint childPoint(int index) const
Returns point at index (for geometries without child geometries - i.e.
const_part_iterator()=default
Create invalid iterator.
virtual const QgsAbstractGeometry * simplifiedTypeRef() const SIP_HOLDGIL
Returns a reference to the simplest lossless representation of this geometry, e.g.
virtual QgsAbstractGeometry * clone() const =0
Clones the geometry by performing a deep copy.
const_part_iterator & operator++()
The prefix ++ operator (++it) advances the iterator to the next part and returns an iterator to the n...
static bool hasM(Type type) SIP_HOLDGIL
Tests whether a WKB type contains m values.
virtual int nCoordinates() const
Returns the number of nodes contained in the geometry.
part_iterator()=default
Create invalid iterator.
virtual bool hasCurvedSegments() const
Returns true if the geometry contains curved segments.
QgsVertexId vertexId() const
Returns vertex ID of the current item.
const_part_iterator const_parts_end() const
Returns STL-style iterator pointing to the imaginary const part after the last part of the geometry.
virtual void clear()=0
Clears the geometry, ie reset it to a null geometry.
QgsPoint next()
Returns next vertex of the geometry (undefined behavior if hasNext() returns false before calling nex...
QVector< QgsPointSequence > QgsRingSequence
virtual bool isEmpty() const
Returns true if the geometry is empty.
part_iterator & operator++()
The prefix ++ operator (++it) advances the iterator to the next part and returns an iterator to the n...
Abstract base class for all geometries.
const QgsAbstractGeometry * next()
Returns next part of the geometry (undefined behavior if hasNext() returns false before calling next(...
virtual QgsAbstractGeometry * segmentize(double tolerance=M_PI/180., SegmentationToleranceType toleranceType=MaximumAngle) const
Returns a version of the geometry without curves.
virtual QString geometryType() const =0
Returns a unique string representing the geometry type.
bool is3D() const SIP_HOLDGIL
Returns true if the geometry is 3D and contains a z-value.
virtual QgsRectangle boundingBox() const =0
Returns the minimal bounding box for the geometry.
VertexType
Types of vertex.
const QgsAbstractGeometry * geometryN(int n) const
Returns a const reference to a geometry from within the collection.
The vertex_iterator class provides STL-style iterator for vertices.
virtual QgsPoint centroid() const
Returns the centroid of the geometry.
QgsAbstractGeometry & operator=(const QgsAbstractGeometry &geom)
QVector< QgsPoint > QgsPointSequence
Java-style iterator for traversal of parts of a geometry.
part_iterator parts_end()
Returns STL-style iterator pointing to the imaginary part after the last part of the geometry.
QgsVertexIterator vertices() const
Returns a read-only, Java-style iterator for traversal of vertices of all the geometry,...
Utility class for identifying a unique vertex within a geometry.
QgsAbstractGeometry * next()
Returns next part of the geometry (undefined behavior if hasNext() returns false before calling next(...
virtual double perimeter() const
Returns the planar, 2-dimensional perimeter of the geometry.
bool operator==(part_iterator other) const
virtual void transformVertices(const std::function< QgsPoint(const QgsPoint &) > &transform)
Transforms the vertices from the geometry in place, applying the transform function to every vertex.
int partNumber() const
Returns the part number of the current item.
Java-style iterator for traversal of vertices of a geometry.
virtual bool convertTo(QgsWkbTypes::Type type)
Converts the geometry to a specified type.
static bool hasZ(Type type) SIP_HOLDGIL
Tests whether a WKB type contains the z-dimension.
virtual bool boundingBoxIntersects(const QgsRectangle &rectangle) const SIP_HOLDGIL
Returns true if the bounding box of this geometry intersects with a rectangle.
void setZMTypeFromSubGeometry(const QgsAbstractGeometry *subggeom, QgsWkbTypes::Type baseGeomType)
Updates the geometry type based on whether sub geometries contain z or m values.
double & ry()
Returns a reference to the y-coordinate of this point.
vertex_iterator()=default
Create invalid iterator.
QString asJson(int precision=17)
Returns a GeoJSON representation of the geometry as a QString.
static bool isMultiType(Type type) SIP_HOLDGIL
Returns true if the WKB type is a multi type.
int partNumber() const
Returns the part number of the current item.
virtual bool nextVertex(QgsVertexId &id, QgsPoint &vertex) const =0
Returns next vertex id and coordinates.
virtual QgsRectangle calculateBoundingBox() const
Default calculator for the minimal bounding box for the geometry.