QGIS API Documentation
3.26.3-Buenos Aires (65e4edfdad)
|
Go to the documentation of this file.
36 QVector< QgsCurvePolygon * > polygonList;
37 QgsCurvePolygon *curvePoly = qgsgeometry_cast< QgsCurvePolygon * >( geom );
41 polygonList.append( curvePoly );
48 polygonList.append( qgsgeometry_cast< QgsCurvePolygon * >( multiGeom->
geometryN( i ) ) );
57 if ( !ring->isClosed() )
61 else if ( !ring->isRing() )
67 ringGeom->prepareGeometry();
70 QVector< QgsCurvePolygon * >::const_iterator polyIter = polygonList.constBegin();
71 for ( ; polyIter != polygonList.constEnd(); ++polyIter )
73 if ( ringGeom->within( *polyIter ) )
76 const int nInnerRings = ( *polyIter )->numInteriorRings();
77 for (
int i = 0; i < nInnerRings; ++i )
79 if ( !ringGeom->disjoint( ( *polyIter )->interiorRing( i ) ) )
91 ( *polyIter )->addInteriorRing( ring.release() );
112 if ( !geomCollection )
121 QgsCurve *curve = qgsgeometry_cast<QgsCurve *>( part.get() );
125 std::unique_ptr<QgsCurvePolygon> poly;
128 poly = std::make_unique< QgsPolygon >();
132 poly = std::make_unique< QgsCurvePolygon >();
134 poly->setExteriorRing( qgsgeometry_cast<QgsCurve *>( part.release() ) );
135 added = geomCollection->
addGeometry( poly.release() );
141 if (
const QgsCurvePolygon *curvePolygon = qgsgeometry_cast< const QgsCurvePolygon *>( part.get() ) )
146 std::unique_ptr< QgsCurvePolygon > polygon( curvePolygon->toPolygon() );
147 part = std::move( polygon );
149 added = geomCollection->
addGeometry( qgsgeometry_cast<QgsCurvePolygon *>( part.release() ) );
153 added = geomCollection->
addGeometry( part.release() );
159 std::unique_ptr<QgsGeometryCollection> parts(
static_cast<QgsGeometryCollection *
>( part.release() ) );
163 for ( i = 0; i < parts->numGeometries(); i++ )
165 if ( !geomCollection->
addGeometry( parts->geometryN( i )->clone() ) )
169 added = i == parts->numGeometries();
188 std::unique_ptr<QgsGeometryCollection> parts( qgsgeometry_cast<QgsGeometryCollection *>( part.release() ) );
192 for ( i = 0; i < parts->numGeometries(); i++ )
194 if ( !geomCollection->
addGeometry( parts->geometryN( i )->clone() ) )
198 added = i == parts->numGeometries();
208 if (
QgsCurve *curve = qgsgeometry_cast<QgsCurve *>( part.get() ) )
213 std::unique_ptr< QgsCurve > line( curve->segmentize() );
214 part = std::move( line );
216 added = geomCollection->
addGeometry( qgsgeometry_cast<QgsCurve *>( part.release() ) );
220 added = geomCollection->
addGeometry( part.release() );
226 added = geomCollection->
addGeometry( part.release() );
233 if ( !geom || partNum < 0 )
247 g =
c->geometryN( partNum );
249 else if ( partNum > 0 )
277 return c->removeGeometry( partNum );
281 const QList<QgsVectorLayer *> &avoidIntersectionsLayers,
282 bool &haveInvalidGeometry,
283 const QHash<
QgsVectorLayer *, QSet<QgsFeatureId> > &ignoreFeatures
287 haveInvalidGeometry =
false;
302 if ( avoidIntersectionsLayers.isEmpty() )
305 QVector< QgsGeometry > nearGeometries;
311 const QHash<QgsVectorLayer *, QSet<qint64> >::const_iterator ignoreIt = ignoreFeatures.constFind( currentLayer );
312 if ( ignoreIt != ignoreFeatures.constEnd() )
313 ignoreIds = ignoreIt.value();
321 if ( ignoreIds.contains( f.
id() ) )
328 haveInvalidGeometry =
true;
334 if ( nearGeometries.isEmpty() )
339 const std::unique_ptr< QgsAbstractGeometry > combinedGeometries( geomEngine->combine( nearGeometries ) );
340 if ( !combinedGeometries )
345 std::unique_ptr< QgsAbstractGeometry > diffGeom( geomEngine->difference( combinedGeometries.get() ) );
Abstract base class for curved geometry type.
@ AddPartNotMultiGeometry
The source geometry is not multi.
@ ExactIntersect
Use exact geometry intersection (slower) instead of bounding boxes.
static Type flatType(Type type) SIP_HOLDGIL
Returns the flat type for a WKB type.
Curve polygon geometry type.
@ AddRingNotClosed
The input ring is not closed.
Type
The WKB type describes the number of dimensions a geometry has.
int numGeometries() const SIP_HOLDGIL
Returns the number of geometries within the collection.
static bool deleteRing(QgsAbstractGeometry *geom, int ringNum, int partNum=0)
Deletes a ring from a geometry.
static std::unique_ptr< QgsAbstractGeometry > avoidIntersections(const QgsAbstractGeometry &geom, const QList< QgsVectorLayer * > &avoidIntersectionsLayers, bool &haveInvalidGeometry, const QHash< QgsVectorLayer *, QSet< QgsFeatureId > > &ignoreFeatures=(QHash< QgsVectorLayer *, QSet< QgsFeatureId > >()))
Alters a geometry so that it avoids intersections with features from all open vector layers.
This class wraps a request for features to a vector layer (or directly its vector data provider).
bool removeInteriorRing(int ringIndex)
Removes an interior ring from the polygon.
QgsWkbTypes::Type wkbType() const SIP_HOLDGIL
Returns the WKB type of the geometry.
virtual bool addGeometry(QgsAbstractGeometry *g)
Adds a geometry and takes ownership. Returns true in case of success.
GeometryOperationResult
Success or failure of a geometry operation.
static bool hasM(Type type) SIP_HOLDGIL
Tests whether a WKB type contains m values.
@ AddRingNotInExistingFeature
The input ring doesn't have any existing ring to fit into.
QgsFeatureRequest & setNoAttributes()
Set that no attributes will be fetched.
static Qgis::GeometryOperationResult addPart(QgsAbstractGeometry *geometry, std::unique_ptr< QgsAbstractGeometry > part)
Add a part to multi type geometry.
QSet< QgsFeatureId > QgsFeatureIds
Abstract base class for all geometries.
static Qgis::GeometryOperationResult addRing(QgsAbstractGeometry *geometry, std::unique_ptr< QgsCurve > ring)
Add an interior ring to a geometry.
static bool deletePart(QgsAbstractGeometry *geom, int partNum)
Deletes a part from a geometry.
virtual QgsRectangle boundingBox() const =0
Returns the minimal bounding box for the geometry.
static QgsGeometryEngine * createGeometryEngine(const QgsAbstractGeometry *geometry)
Creates and returns a new geometry engine representing the specified geometry.
@ InvalidBaseGeometry
The base geometry on which the operation is done is invalid or empty.
const QgsAbstractGeometry * geometryN(int n) const
Returns a const reference to a geometry from within the collection.
bool nextFeature(QgsFeature &f)
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c
Represents a vector layer which manages a vector based data sets.
bool hasGeometry() const
Returns true if the feature has an associated geometry.
@ AddRingCrossesExistingRings
The input ring crosses existing rings (it is not disjoint)
@ Success
Operation succeeded.
static GeometryType geometryType(Type type) SIP_HOLDGIL
Returns the geometry type for a WKB type, e.g., both MultiPolygon and CurvePolygon would have a Polyg...
static bool hasZ(Type type) SIP_HOLDGIL
Tests whether a WKB type contains the z-dimension.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
virtual int numPoints() const =0
Returns the number of points in the curve.
virtual bool isClosed() const SIP_HOLDGIL
Returns true if the curve is closed.
Wrapper for iterator of features from vector data provider or vector layer.
virtual bool removeGeometry(int nr)
Removes a geometry from the collection.
QgsFeatureRequest & setFlags(QgsFeatureRequest::Flags flags)
Sets flags that affect how features will be fetched.
@ InvalidInputGeometryType
The input geometry (ring, part, split line, etc.) has not the correct geometry type.
bool isGeosValid(Qgis::GeometryValidityFlags flags=Qgis::GeometryValidityFlags()) const
Checks validity of the geometry using GEOS.
@ AddRingNotValid
The input ring is not valid.