QGIS API Documentation 3.99.0-Master (26c88405ac0)
Loading...
Searching...
No Matches
qgsgeometrygapcheck.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsgeometrygapcheck.h
3 ---------------------
4 begin : September 2015
5 copyright : (C) 2014 by Sandro Mani / Sourcepole AG
6 email : smani at sourcepole dot ch
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#define SIP_NO_FILE
17
18#ifndef QGS_GEOMETRY_GAP_CHECK_H
19#define QGS_GEOMETRY_GAP_CHECK_H
20
21#include "qgsfeatureid.h"
22#include "qgsgeometrycheck.h"
24
31class ANALYSIS_EXPORT QgsGeometryGapCheckError : public QgsGeometryCheckError
32{
33 public:
34
41 QgsGeometryGapCheckError( const QgsGeometryCheck *check, const QString &layerId, const QgsGeometry &geometry, const QMap<QString, QgsFeatureIds> &neighbors, double area, const QgsRectangle &gapAreaBBox, const QgsRectangle &contextArea )
42 : QgsGeometryCheckError( check, layerId, FID_NULL, geometry, geometry.constGet()->centroid(), QgsVertexId(), area, ValueArea )
43 , mNeighbors( neighbors )
44 , mGapAreaBBox( gapAreaBBox )
45 , mContextBoundingBox( contextArea )
46 {
47 }
48
49 QgsRectangle contextBoundingBox() const override;
50
54 const QMap<QString, QgsFeatureIds> &neighbors() const { return mNeighbors; }
55
56 bool isEqual( QgsGeometryCheckError *other ) const override;
57
58 bool closeMatch( QgsGeometryCheckError *other ) const override;
59
60 void update( const QgsGeometryCheckError *other ) override;
61
62 bool handleChanges( const QgsGeometryCheck::Changes & /*changes*/ ) override;
63
64 QgsRectangle affectedAreaBBox() const override;
65
66 QMap<QString, QgsFeatureIds> involvedFeatures() const override;
67
68 QIcon icon() const override;
69
70 private:
71 QMap<QString, QgsFeatureIds> mNeighbors;
72 QgsRectangle mGapAreaBBox;
73 QgsRectangle mContextBoundingBox;
74};
75
76
83class ANALYSIS_EXPORT QgsGeometryGapCheck : public QgsGeometryCheck
84{
85 Q_GADGET
86 Q_DECLARE_TR_FUNCTIONS( QgsGeometryGapCheck )
87
88 public:
98 Q_ENUM( ResolutionMethod )
99
100
106 explicit QgsGeometryGapCheck( const QgsGeometryCheckContext *context, const QVariantMap &configuration );
107
108 void prepare( const QgsGeometryCheckContext *context, const QVariantMap &configuration ) override;
109
110 QList<Qgis::GeometryType> compatibleGeometryTypes() const override { return factoryCompatibleGeometryTypes(); }
111 QgsGeometryCheck::Result collectErrors( const QMap<QString, QgsFeaturePool *> &featurePools, QList<QgsGeometryCheckError *> &errors, QStringList &messages, QgsFeedback *feedback, const LayerFeatureIds &ids = LayerFeatureIds() ) const override;
112 void fixError( const QMap<QString, QgsFeaturePool *> &featurePools, QgsGeometryCheckError *error, int method, const QMap<QString, int> &mergeAttributeIndices, Changes &changes ) const override;
113 Q_DECL_DEPRECATED QStringList resolutionMethods() const override;
114
115 QList<QgsGeometryCheckResolutionMethod> availableResolutionMethods() const override;
116
117 QString description() const override;
118 QString id() const override;
119 QgsGeometryCheck::Flags flags() const override;
120 QgsGeometryCheck::CheckType checkType() const override { return factoryCheckType(); }
121
123 static QString factoryDescription() SIP_SKIP;
124 static QString factoryId() SIP_SKIP;
125 static QgsGeometryCheck::Flags factoryFlags() SIP_SKIP;
126 static QList<Qgis::GeometryType> factoryCompatibleGeometryTypes() SIP_SKIP;
127 static bool factoryIsCompatible( QgsVectorLayer *layer ) SIP_SKIP;
128 static QgsGeometryCheck::CheckType factoryCheckType() SIP_SKIP;
130
131 private:
132 enum Condition
133 {
134 LongestSharedEdge,
135 LargestArea
136 };
137
138 bool mergeWithNeighbor( const QMap<QString, QgsFeaturePool *> &featurePools, QgsGeometryGapCheckError *err, Changes &changes, QString &errMsg, Condition condition ) const;
139
140 const double mGapThresholdMapUnits;
141 QgsWeakMapLayerPointer mAllowedGapsLayer;
142 std::unique_ptr<QgsVectorLayerFeatureSource> mAllowedGapsSource;
143 double mAllowedGapsBuffer = 0;
144};
145
146#endif // QGS_GEOMETRY_GAP_CHECK_H
Provides global constants and enumerations for use throughout the application.
Definition qgis.h:56
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Definition qgsfeedback.h:44
Base configuration for geometry checks.
This represents an error reported by a geometry check.
@ ValueArea
The value is an area.
virtual QMap< QString, QgsFeatureIds > involvedFeatures() const
Returns a list of involved features.
virtual void update(const QgsGeometryCheckError *other)
Update this error with the information from other.
virtual QString description() const
The error description.
QgsGeometryCheckError(const QgsGeometryCheck *check, const QgsGeometryCheckerUtils::LayerFeature &layerFeature, const QgsPointXY &errorLocation, QgsVertexId vidx=QgsVertexId(), const QVariant &value=QVariant(), ValueType valueType=ValueOther)
Create a new geometry check error with the parent check and for the layerFeature pair at the errorLoc...
QgsGeometry geometry() const
The geometry of the error in map units.
const QgsGeometryCheck * check() const
The geometry check that created this error.
virtual bool isEqual(QgsGeometryCheckError *other) const
Check if this error is equal to other.
const QString & layerId() const
The id of the layer on which this error has been detected.
virtual bool closeMatch(QgsGeometryCheckError *) const
Check if this error is almost equal to other.
virtual QgsRectangle affectedAreaBBox() const
The bounding box of the affected area of the error.
virtual QIcon icon() const
Returns an icon that should be shown for this kind of error.
virtual bool handleChanges(const QgsGeometryCheck::Changes &changes)
Apply a list of changes.
virtual QgsRectangle contextBoundingBox() const
The context of the error.
Base class for geometry checks.
QMap< QString, QMap< QgsFeatureId, QList< QgsGeometryCheck::Change > > > Changes
A collection of changes.
QFlags< Flag > Flags
CheckType
The type of a check.
Result
Result of the geometry checker operation.
QgsGeometryCheck(const QgsGeometryCheckContext *context, const QVariantMap &configuration)
Create a new geometry check.
QgsGeometryGapCheckError(const QgsGeometryCheck *check, const QString &layerId, const QgsGeometry &geometry, const QMap< QString, QgsFeatureIds > &neighbors, double area, const QgsRectangle &gapAreaBBox, const QgsRectangle &contextArea)
Create a new gap check error produced by check on the layer layerId.
const QMap< QString, QgsFeatureIds > & neighbors() const
A map of layers and feature ids of the neighbors of the gap.
Checks for gaps between neighbouring polygons.
QgsGeometryGapCheck(const QgsGeometryCheckContext *context, const QVariantMap &configuration)
The configuration accepts a "gapThreshold" key which specifies the maximum gap size in squared map un...
QgsGeometryCheck::CheckType checkType() const override
Returns the check type.
ResolutionMethod
Resolution methods for geometry gap checks.
@ CreateNewFeature
Create a new feature with the gap geometry.
@ AddToAllowedGaps
Add gap geometry to allowed gaps layer.
@ MergeLongestEdge
Merge the gap with the polygon with the longest shared edge.
@ NoChange
Do not handle the error.
@ MergeLargestArea
Merge with neighbouring polygon with largest area.
QList< Qgis::GeometryType > compatibleGeometryTypes() const override
A list of geometry types for which this check can be performed.
A geometry is the spatial representation of a feature.
A rectangle specified with double values.
Represents a vector layer which manages a vector based dataset.
#define SIP_SKIP
Definition qgis_sip.h:134
void CPL_STDCALL collectErrors(CPLErr, int, const char *msg)
#define FID_NULL
QPointer< QgsMapLayer > QgsWeakMapLayerPointer
Weak pointer for QgsMapLayer.
Utility class for identifying a unique vertex within a geometry.
Definition qgsvertexid.h:30