24 QString QgsGeometryDuplicateCheckError::duplicatesString( 
const QMap<QString, QgsFeaturePool *> &featurePools, 
const QMap<QString, QList<QgsFeatureId>> &duplicates )
    29     str.append( featurePools[it.key()]->layer()->name() + 
":" );
    31     ids.reserve( it.value().length() );
    34       ids.append( QString::number( 
id ) );
    36     str.back() += ids.join( 
',' );
    38   return str.join( QStringLiteral( 
"; " ) );
    44   QMap<QString, QgsFeatureIds> featureIds = ids.
isEmpty() ? allLayerFeatureIds( featurePools ) : ids.
toMap();
    46   QList<QString> layerIds = featureIds.keys();
    50     layerIds.removeOne( layerFeatureA.layer()->id() );
    52     QgsRectangle bboxA = layerFeatureA.geometry().boundingBox();
    54     if ( !geomEngineA->isValid() )
    56       messages.append( tr( 
"Duplicate check failed for (%1): the geometry is invalid" ).arg( layerFeatureA.id() ) );
    66       if ( layerFeatureA.layer()->id() == layerFeatureB.layer()->id() && layerFeatureB.feature().id() >= layerFeatureA.feature().id() )
    71       QgsAbstractGeometry *diffGeom = geomEngineA->symDifference( layerFeatureB.geometry().constGet(), &errMsg );
    72       if ( errMsg.isEmpty() && diffGeom && diffGeom->
isEmpty() )
    74         duplicates[layerFeatureB.layer()->id()].append( layerFeatureB.feature().id() );
    76       else if ( !errMsg.isEmpty() )
    78         messages.append( tr( 
"Duplicate check failed for (%1, %2): %3" ).arg( layerFeatureA.id(), layerFeatureB.id(), errMsg ) );
    82     if ( !duplicates.isEmpty() )
    99   if ( method == NoChange )
   103   else if ( method == RemoveDuplicates )
   109     for ( 
const QString &layerIdB : duplicateError->duplicates().keys() )
   112       for ( 
QgsFeatureId idB : duplicateError->duplicates()[layerIdB] )
   115         if ( !featurePoolB->
getFeature( idB, featureB ) )
   121         if ( diffGeom && diffGeom->
isEmpty() )
   124           changes[layerIdB][idB].append( 
Change( ChangeFeature, ChangeRemoved ) );
   140   static QStringList methods = QStringList()
   142                                << tr( 
"Remove duplicates" );
   148   return QStringLiteral( 
"QgsGeometryDuplicateCheck" );
 
void collectErrors(const QMap< QString, QgsFeaturePool *> &featurePools, QList< QgsGeometryCheckError *> &errors, QStringList &messages, QgsFeedback *feedback, const LayerFeatureIds &ids=LayerFeatureIds()) const override
The main worker method. 
 
A rectangle specified with double values. 
 
virtual bool isEmpty() const
Returns true if the geometry is empty. 
 
static QString factoryId()
 
bool getFeature(QgsFeatureId id, QgsFeature &feature, QgsFeedback *feedback=nullptr)
Retrieves the feature with the specified id into feature. 
 
QMap< QString, QgsFeatureIds > toMap() const
 
Contains a set of layers and feature ids in those layers to pass to a geometry check. 
 
CheckType
The type of a check. 
 
void setObsolete()
Set the error status to obsolete. 
 
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
 
static QgsGeometryCheck::CheckType factoryCheckType()
 
void setFixFailed(const QString &reason)
Set the error status to failed and specify the reason for failure. 
 
Base class for feedback objects to be used for cancelation of something running in a worker thread...
 
The check controls geometries as a whole. 
 
A layer feature combination to uniquely identify and access a feature in a set of layers...
 
void fixError(const QMap< QString, QgsFeaturePool *> &featurePools, QgsGeometryCheckError *error, int method, const QMap< QString, int > &mergeAttributeIndices, Changes &changes) const override
Fix the error error with the specified method. 
 
Abstract base class for all geometries. 
 
const QString & layerId() const
The id of the layer on which this error has been detected. 
 
A list of layers and feature ids for each of these layers. 
 
const QgsAbstractGeometry * constGet() const
Returns a non-modifiable (const) reference to the underlying abstract geometry primitive. 
 
GeometryType
The geometry types are used to group QgsWkbTypes::Type in a coarse way. 
 
QMap< QString, QList< QgsFeatureId > > duplicates() const
 
QMap< QString, QMap< QgsFeatureId, QList< QgsGeometryCheck::Change > > > Changes
A collection of changes. 
 
A feature pool is based on a vector layer and caches features. 
 
Descripts a change to fix a geometry. 
 
void setFixed(int method)
Set the status to fixed and specify the method that has been used to fix the error. 
 
virtual void deleteFeature(QgsFeatureId fid)=0
Removes a feature from this pool. 
 
QgsGeometryDuplicateCheckError(const QgsGeometryCheck *check, const QgsGeometryCheckerUtils::LayerFeature &layerFeature, const QgsPointXY &errorLocation, const QMap< QString, QgsFeaturePool *> &featurePools, const QMap< QString, QList< QgsFeatureId >> &duplicates)
 
QgsFeatureId featureId() const
The id of the feature on which this error has been detected. 
 
This represents an error reported by a geometry check. 
 
static std::unique_ptr< QgsGeometryEngine > createGeomEngine(const QgsAbstractGeometry *geometry, double tolerance)
 
QStringList resolutionMethods() const override
Returns a list of descriptions for available resolutions for errors. 
 
const QgsGeometry & geometry() const
Returns the geometry of this feature.