52  if ( geometryType != Qgis::GeometryType::Point
 
   53       || !( flags & SanitizeFlag::DontPromotePointGeometryToMultiPoint ) )
 
   85  if ( geometryType != Qgis::GeometryType::Point
 
   86       || !( flags & QgsOverlayUtils::SanitizeFlag::DontPromotePointGeometryToMultiPoint ) )
 
   97static QString writeFeatureError()
 
   99  return QObject::tr( 
"Could not write feature" );
 
  107  if ( outputAttrs != OutputBA )
 
  121    feedback->
setProgress( 
static_cast< double >( i ) * step );
 
  132  attrs.resize( outputAttrs == OutputA ? fieldsCountA : ( fieldsCountA + fieldsCountB ) );
 
  134  if ( totalCount == 0 )
 
  142  if ( outputAttrs == OutputBA )
 
  158      if ( outputAttrs != OutputBA )
 
  161      std::unique_ptr< QgsGeometryEngine > engine;
 
  162      if ( !intersects.isEmpty() )
 
  166        engine->prepareGeometry();
 
  169      QVector<QgsGeometry> geometriesB;
 
  181      if ( !geometriesB.isEmpty() )
 
  196      if ( !geom.
isNull() && !sanitizeDifferenceResult( geom, geometryType, flags ) )
 
  200      switch ( outputAttrs )
 
  206          for ( 
int i = 0; i < fieldsCountA; ++i )
 
  207            attrs[i] = attrsA[i];
 
  210          for ( 
int i = 0; i < fieldsCountA; ++i )
 
  211            attrs[i + fieldsCountB] = attrsA[i];
 
  229    feedback->
setProgress( count / 
static_cast< double >( totalCount ) * 100. );
 
  237  const int attrCount = fieldIndicesA.count() + fieldIndicesB.count();
 
  255    feedback->
setProgress( 
static_cast< double >( i ) * step );
 
  263  if ( totalCount == 0 )
 
  266  feedback->
setProgressText( QObject::tr( 
"Calculating intersection" ) );
 
  286    std::unique_ptr< QgsGeometryEngine > engine;
 
  287    if ( !intersects.isEmpty() )
 
  291      engine->prepareGeometry();
 
  296    for ( 
int i = 0; i < fieldIndicesA.count(); ++i )
 
  297      outAttributes[i] = attrsA[fieldIndicesA[i]];
 
  307      if ( !engine->intersects( tmpGeom.constGet() ) )
 
  311      if ( !sanitizeIntersectionResult( intGeom, geometryType ) )
 
  315      for ( 
int i = 0; i < fieldIndicesB.count(); ++i )
 
  316        outAttributes[fieldIndicesA.count() + i] = attrsB[fieldIndicesB[i]];
 
  325    feedback->
setProgress( count / 
static_cast<double >( totalCount ) * 100. );
 
  333  if ( totalCount == 0 )
 
  352  QSet<QgsFeatureId> fids;
 
  359    fids.insert( f.
id() );
 
  362  QHash<QgsFeatureId, QgsGeometry> geometries;
 
  364  QHash<QgsFeatureId, QList<QgsFeatureId> > intersectingIds;  
 
  376    std::unique_ptr< QgsGeometryEngine > g1engine;
 
  378    geometries.insert( fid1, g1 );
 
  382    const QList<QgsFeatureId> ids = index.
intersects( bbox );
 
  392        g1engine->prepareGeometry();
 
  396      if ( !g1engine->intersects( g2.
constGet() ) )
 
  400      if ( !sanitizeIntersectionResult( geomIntersection, geometryType ) )
 
  408      while ( fids.contains( newFid ) )
 
  410      fids.insert( newFid );
 
  412      geometries.insert( newFid, geomIntersection );
 
  414      fx.setGeometry( geomIntersection );
 
  420      QList<QgsFeatureId> lst;
 
  421      if ( intersectingIds.contains( fid1 ) )
 
  422        lst << intersectingIds.value( fid1 );
 
  425      if ( intersectingIds.contains( fid2 ) )
 
  426        lst << intersectingIds.value( fid2 );
 
  429      intersectingIds.insert( newFid, lst );
 
  438      geometries.remove( fid1 );
 
  440      if ( sanitizeDifferenceResult( g12, geometryType, flags ) )
 
  442        geometries.insert( fid1, g12 );
 
  445        f1x.setGeometry( g12 );
 
  456      f2old.setGeometry( g2 );
 
  459      geometries.remove( fid2 );
 
  461      if ( sanitizeDifferenceResult( g21, geometryType, flags ) )
 
  463        geometries.insert( fid2, g21 );
 
  466        f2x.setGeometry( g21 );
 
  476    feedback->
setProgress( count / 
static_cast< double >( totalCount ) * 100. );
 
  488  QHash<QgsFeatureId, QgsAttributes> attributesHash;
 
  500  for ( 
auto i = geometries.constBegin(); i != geometries.constEnd(); ++i )
 
  506    outFeature.setGeometry( i.value() );
 
  508    if ( intersectingIds.contains( i.key() ) )
 
  510      const QList<QgsFeatureId> ids = intersectingIds.value( i.key() );
 
  513        outFeature.setAttributes( attributesHash.value( 
id ) );
 
  520      outFeature.setAttributes( attributesHash.value( i.key() ) );
 
GeometryType
The geometry types are used to group Qgis::WkbType in a coarse way.
 
@ GeometryCollection
GeometryCollection.
 
Wrapper for iterator of features from vector data provider or vector layer.
 
bool nextFeature(QgsFeature &f)
 
This class wraps a request for features to a vector layer (or directly its vector data provider).
 
QgsFeatureRequest & setFilterFids(const QgsFeatureIds &fids)
Sets the feature IDs that should be fetched.
 
QgsFeatureRequest & setFlags(QgsFeatureRequest::Flags flags)
Sets flags that affect how features will be fetched.
 
QgsFeatureRequest & setSubsetOfAttributes(const QgsAttributeList &attrs)
Set a subset of attributes that will be fetched.
 
QgsFeatureRequest & setDestinationCrs(const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context)
Sets the destination crs for feature's geometries.
 
@ NoGeometry
Geometry is not required. It may still be returned if e.g. required for a filter condition.
 
QgsFeatureRequest & setNoAttributes()
Set that no attributes will be fetched.
 
QgsFeatureRequest & setInvalidGeometryCheck(InvalidGeometryCheck check)
Sets invalid geometry checking behavior.
 
An interface for objects which accept features via addFeature(s) methods.
 
virtual bool addFeature(QgsFeature &feature, QgsFeatureSink::Flags flags=QgsFeatureSink::Flags())
Adds a single feature to the sink.
 
@ FastInsert
Use faster inserts, at the cost of updating the passed features to reflect changes made at the provid...
 
An interface for objects which provide features via a getFeatures method.
 
virtual QgsFields fields() const =0
Returns the fields associated with features in the source.
 
virtual QgsCoordinateReferenceSystem sourceCrs() const =0
Returns the coordinate reference system for features in the source.
 
virtual Qgis::WkbType wkbType() const =0
Returns the geometry type for features returned by this source.
 
virtual QgsFeatureIterator getFeatures(const QgsFeatureRequest &request=QgsFeatureRequest()) const =0
Returns an iterator for the features in the source.
 
virtual long long featureCount() const =0
Returns the number of features contained in the source, or -1 if the feature count is unknown.
 
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
 
void setAttributes(const QgsAttributes &attrs)
Sets the feature's attributes.
 
bool hasGeometry() const
Returns true if the feature has an associated geometry.
 
void setGeometry(const QgsGeometry &geometry)
Set the feature's geometry.
 
bool isCanceled() const SIP_HOLDGIL
Tells whether the operation has been canceled already.
 
void setProgress(double progress)
Sets the current progress for the feedback object.
 
int count() const
Returns number of items.
 
Encapsulates parameters under which a geometry operation is performed.
 
A geometry is the spatial representation of a feature.
 
const QgsAbstractGeometry * constGet() const SIP_HOLDGIL
Returns a non-modifiable (const) reference to the underlying abstract geometry primitive.
 
QgsGeometry difference(const QgsGeometry &geometry, const QgsGeometryParameters ¶meters=QgsGeometryParameters()) const
Returns a geometry representing the points making up this geometry that do not make up other.
 
Qgis::WkbType wkbType() const SIP_HOLDGIL
Returns type of the geometry as a WKB type (point / linestring / polygon etc.)
 
static QgsGeometryEngine * createGeometryEngine(const QgsAbstractGeometry *geometry)
Creates and returns a new geometry engine representing the specified geometry.
 
QString lastError() const SIP_HOLDGIL
Returns an error string referring to the last error encountered either when this geometry was created...
 
QgsGeometry intersection(const QgsGeometry &geometry, const QgsGeometryParameters ¶meters=QgsGeometryParameters()) const
Returns a geometry representing the points shared by this geometry and other.
 
bool isEmpty() const
Returns true if the geometry is empty (eg a linestring with no vertices, or a collection with no geom...
 
bool convertGeometryCollectionToSubclass(Qgis::GeometryType geomType)
Converts geometry collection to a the desired geometry type subclass (multi-point,...
 
bool convertToMultiType()
Converts single type geometry into multitype geometry e.g.
 
static QgsGeometry unaryUnion(const QVector< QgsGeometry > &geometries, const QgsGeometryParameters ¶meters=QgsGeometryParameters())
Compute the unary union on a list of geometries.
 
QgsRectangle boundingBox() const
Returns the bounding box of the geometry.
 
Contains information about the context in which a processing algorithm is executed.
 
QgsCoordinateTransformContext transformContext() const
Returns the coordinate transform context.
 
QgsFeatureRequest::InvalidGeometryCheck invalidGeometryCheck() const
Returns the behavior used for checking invalid geometries in input layers.
 
Custom exception class for processing related exceptions.
 
Base class for providing feedback from a processing algorithm.
 
virtual void setProgressText(const QString &text)
Sets a progress report text string.
 
A rectangle specified with double values.
 
A spatial index for QgsFeature objects.
 
QList< QgsFeatureId > intersects(const QgsRectangle &rectangle) const
Returns a list of features with a bounding box which intersects the specified rectangle.
 
bool addFeature(QgsFeature &feature, QgsFeatureSink::Flags flags=QgsFeatureSink::Flags()) override
Adds a feature to the index.
 
bool deleteFeature(const QgsFeature &feature)
Removes a feature from the index.
 
static Qgis::GeometryType geometryType(Qgis::WkbType type) SIP_HOLDGIL
Returns the geometry type for a WKB type, e.g., both MultiPolygon and CurvePolygon would have a Polyg...
 
static Qgis::WkbType multiType(Qgis::WkbType type) SIP_HOLDGIL
Returns the multi type for a WKB type.
 
static Qgis::WkbType flatType(Qgis::WkbType type) SIP_HOLDGIL
Returns the flat type for a WKB type.
 
QSet< QgsFeatureId > QgsFeatureIds
 
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features