QGIS API Documentation 3.27.0-Master (9c08adf5ef)
qgsgeometryisvalidcheck.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgssinglegeometrycheck.cpp
3 --------------------------------------
4Date : 7.9.2018
5Copyright : (C) 2018 by Matthias Kuhn
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
17#include "qgsfeature.h"
19#include "qgsgeos.h"
21
22QgsGeometryIsValidCheck::QgsGeometryIsValidCheck( const QgsGeometryCheckContext *context, const QVariantMap &configuration )
23 : QgsSingleGeometryCheck( context, configuration )
24{}
25
26QList<QgsWkbTypes::GeometryType> QgsGeometryIsValidCheck::compatibleGeometryTypes() const
27{
28 return factoryCompatibleGeometryTypes();
29}
30
31QList<QgsSingleGeometryCheckError *> QgsGeometryIsValidCheck::processGeometry( const QgsGeometry &geometry ) const
32{
33 QVector<QgsGeometry::Error> errors;
34
35 Qgis::GeometryValidationEngine method = Qgis::GeometryValidationEngine::QgisInternal;
37 method = Qgis::GeometryValidationEngine::Geos;
38
39 QgsGeometryValidator validator( geometry, &errors, method );
40
41 QObject::connect( &validator, &QgsGeometryValidator::errorFound, &validator, [ &errors ]( const QgsGeometry::Error & error )
42 {
43 errors.append( error );
44 } );
45
46 // We are already on a thread here normally, no reason to start yet another one. Run synchronously.
47 validator.run();
48
49 QList<QgsSingleGeometryCheckError *> result;
50 for ( const auto &error : std::as_const( errors ) )
51 {
52 QgsGeometry errorGeometry;
53 if ( error.hasWhere() )
54 errorGeometry = QgsGeometry( std::make_unique<QgsPoint>( error.where() ) );
55
56 result << new QgsGeometryIsValidCheckError( this, geometry, errorGeometry, error.what() );
57 }
58 return result;
59}
60
62{
63 return QStringList();
64}
66QList<QgsWkbTypes::GeometryType> QgsGeometryIsValidCheck::factoryCompatibleGeometryTypes()
67{
69}
70
71bool QgsGeometryIsValidCheck::factoryIsCompatible( QgsVectorLayer *layer ) SIP_SKIP
72{
73 return factoryCompatibleGeometryTypes().contains( layer->geometryType() );
74}
75
76QString QgsGeometryIsValidCheck::factoryDescription()
77{
78 return tr( "Is Valid" );
79}
80
81QString QgsGeometryIsValidCheck::factoryId()
82{
83 return QStringLiteral( "QgsIsValidCheck" );
84}
85
86QgsGeometryCheck::Flags QgsGeometryIsValidCheck::factoryFlags()
87{
89}
90
91QgsGeometryCheck::CheckType QgsGeometryIsValidCheck::factoryCheckType()
92{
94}
96
97QgsGeometryIsValidCheckError::QgsGeometryIsValidCheckError( const QgsSingleGeometryCheck *check, const QgsGeometry &geometry, const QgsGeometry &errorLocation, const QString &errorDescription )
98 : QgsSingleGeometryCheckError( check, geometry, errorLocation )
99 , mDescription( errorDescription )
100{
101
102}
103
105{
106 return mDescription;
107}
GeometryValidationEngine
Available engines for validating geometries.
Definition: qgis.h:976
Base configuration for geometry checks.
@ AvailableInValidation
This geometry check should be available in layer validation on the vector layer peroperties.
CheckType
The type of a check.
@ FeatureNodeCheck
The check controls individual nodes.
An error for a QgsGeometryIsValid check.
QgsGeometryIsValidCheckError(const QgsSingleGeometryCheck *check, const QgsGeometry &geometry, const QgsGeometry &errorLocation, const QString &errorDescription)
Creates a new is valid check error.
QString description() const override
A human readable description of this error.
Q_DECL_DEPRECATED QStringList resolutionMethods() const override
Returns a list of descriptions for available resolutions for errors.
QgsGeometryIsValidCheck(const QgsGeometryCheckContext *context, const QVariantMap &configuration)
Creates a new is valid check with the provided context.
QList< QgsSingleGeometryCheckError * > processGeometry(const QgsGeometry &geometry) const override
Check the geometry for errors.
QList< QgsWkbTypes::GeometryType > compatibleGeometryTypes() const override
A list of geometry types for which this check can be performed.
void errorFound(const QgsGeometry::Error &error)
Sent when an error has been found during the validation process.
A geometry error.
Definition: qgsgeometry.h:2406
bool hasWhere() const
true if the location available from
QgsPointXY where() const
The coordinates at which the error is located and should be visualized.
QString what() const
A human readable error message containing details about the error.
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:125
static const QgsSettingsEntryInteger settingsDigitizingValidateGeometries
Settings entry digitizing validate geometries.
An error from a QgsSingleGeometryCheck.
Base class for geometry checks for a single geometry without any context of the layer or other layers...
Represents a vector layer which manages a vector based data sets.
#define SIP_SKIP
Definition: qgis_sip.h:126