QGIS API Documentation  3.6.0-Noosa (5873452)
qgsgeometryisvalidcheck.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgssinglegeometrycheck.cpp
3  --------------------------------------
4 Date : 7.9.2018
5 Copyright : (C) 2018 by Matthias Kuhn
6 email : [email protected]
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"
18 #include "qgssettings.h"
19 #include "qgsgeos.h"
20 #include "qgsgeometryvalidator.h"
21 
22 QgsGeometryIsValidCheck::QgsGeometryIsValidCheck( const QgsGeometryCheckContext *context, const QVariantMap &configuration )
23  : QgsSingleGeometryCheck( context, configuration )
24 {}
25 
26 QList<QgsWkbTypes::GeometryType> QgsGeometryIsValidCheck::compatibleGeometryTypes() const
27 {
28  return factoryCompatibleGeometryTypes();
29 }
30 
31 QList<QgsSingleGeometryCheckError *> QgsGeometryIsValidCheck::processGeometry( const QgsGeometry &geometry ) const
32 {
33  QVector<QgsGeometry::Error> errors;
34 
36  if ( QgsSettings().value( QStringLiteral( "qgis/digitizing/validate_geometries" ), 1 ).toInt() == 2 )
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 : qgis::as_const( errors ) )
51  {
52  QgsGeometry errorGeometry;
53  if ( error.hasWhere() )
54  errorGeometry = QgsGeometry( qgis::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 }
66 QList<QgsWkbTypes::GeometryType> QgsGeometryIsValidCheck::factoryCompatibleGeometryTypes()
67 {
69 }
70 
71 bool QgsGeometryIsValidCheck::factoryIsCompatible( QgsVectorLayer *layer ) SIP_SKIP
72 {
73  return factoryCompatibleGeometryTypes().contains( layer->geometryType() );
74 }
75 
76 QString QgsGeometryIsValidCheck::factoryDescription()
77 {
78  return tr( "Is Valid" );
79 }
80 
81 QString QgsGeometryIsValidCheck::factoryId()
82 {
83  return QStringLiteral( "QgsIsValidCheck" );
84 }
85 
86 QgsGeometryCheck::Flags QgsGeometryIsValidCheck::factoryFlags()
87 {
88  return AvailableInValidation;
89 }
90 
91 QgsGeometryCheck::CheckType QgsGeometryIsValidCheck::factoryCheckType()
92 {
94 }
96 
97 QgsGeometryIsValidCheckError::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 }
This class is a composition of two QSettings instances:
Definition: qgssettings.h:58
Use GEOS validation methods.
Definition: qgsgeometry.h:1857
CheckType
The type of a check.
QgsWkbTypes::GeometryType geometryType() const
Returns point, line or polygon.
An error for a QgsGeometryIsValid check.
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:106
Base class for geometry checks for a single geometry without any context of the layer or other layers...
Base configuration for geometry checks.
bool hasWhere() const
True if the location available from.
#define SIP_SKIP
Definition: qgis_sip.h:119
QgsGeometryIsValidCheck(const QgsGeometryCheckContext *context, const QVariantMap &configuration)
Creates a new is valid check with the provided context.
QString what() const
A human readable error message containing details about the error.
QgsGeometryIsValidCheckError(const QgsSingleGeometryCheck *check, const QgsGeometry &geometry, const QgsGeometry &errorLocation, const QString &errorDescription)
Creates a new is valid check error.
Use internal QgsGeometryValidator method.
Definition: qgsgeometry.h:1856
QList< QgsWkbTypes::GeometryType > compatibleGeometryTypes() const override
A list of geometry types for which this check can be performed.
QList< QgsSingleGeometryCheckError * > processGeometry(const QgsGeometry &geometry) const override
Check the geometry for errors.
QString description() const override
A human readable description of this error.
QgsPointXY where() const
The coordinates at which the error is located and should be visualized.
An error from a QgsSingleGeometryCheck.
ValidationMethod
Available methods for validating geometries.
Definition: qgsgeometry.h:1854
QStringList resolutionMethods() const override
Returns a list of descriptions for available resolutions for errors.
Represents a vector layer which manages a vector based data sets.
void errorFound(const QgsGeometry::Error &error)
Sent when an error has been found during the validation process.
This geometry check should be available in layer validation on the vector layer peroperties.
The check controls individual nodes.