Skip to content

Commit ec7477c

Browse files
committedJun 26, 2017
Add method to retrieve all features from a QgsProcessingFeatureSource
...even when invalid geometries are present and option is set to skip invalid or break on invalid. Some algorithms (e.g. those which repair geometries) need a way to retrieve all features with invalid geometries, regardless of the user's settings.
1 parent 3fb1b48 commit ec7477c

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed
 

‎src/core/processing/qgsprocessingutils.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,22 @@ QgsProcessingFeatureSource::~QgsProcessingFeatureSource()
480480
delete mSource;
481481
}
482482

483+
QgsFeatureIterator QgsProcessingFeatureSource::getFeatures( const QgsFeatureRequest &request, Flags flags ) const
484+
{
485+
QgsFeatureRequest req( request );
486+
req.setTransformErrorCallback( mTransformErrorCallback );
487+
488+
if ( flags & FlagSkipGeometryValidityChecks )
489+
req.setInvalidGeometryCheck( QgsFeatureRequest::GeometryNoCheck );
490+
else
491+
{
492+
req.setInvalidGeometryCheck( mInvalidGeometryCheck );
493+
req.setInvalidGeometryCallback( mInvalidGeometryCallback );
494+
}
495+
496+
return mSource->getFeatures( req );
497+
}
498+
483499
QgsFeatureIterator QgsProcessingFeatureSource::getFeatures( const QgsFeatureRequest &request ) const
484500
{
485501
QgsFeatureRequest req( request );

‎src/core/processing/qgsprocessingutils.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,13 @@ class CORE_EXPORT QgsProcessingFeatureSource : public QgsFeatureSource
230230
{
231231
public:
232232

233+
//! Flags controlling how QgsProcessingFeatureSource fetches features
234+
enum Flag
235+
{
236+
FlagSkipGeometryValidityChecks = 1 << 1, //!< Invalid geometry checks should always be skipped. This flag can be useful for algorithms which always require invalid geometries, regardless of any user settings (e.g. "repair geometry" type algorithms).
237+
};
238+
Q_DECLARE_FLAGS( Flags, Flag )
239+
233240
/**
234241
* Constructor for QgsProcessingFeatureSource, accepting an original feature source \a originalSource
235242
* and processing \a context.
@@ -241,6 +248,13 @@ class CORE_EXPORT QgsProcessingFeatureSource : public QgsFeatureSource
241248

242249
~QgsProcessingFeatureSource();
243250

251+
/**
252+
* Returns an iterator for the features in the source, respecting the supplied feature \a flags.
253+
* An optional \a request can be used to optimise the returned
254+
* iterator, eg by restricting the returned attributes or geometry.
255+
*/
256+
QgsFeatureIterator getFeatures( const QgsFeatureRequest &request, Flags flags ) const;
257+
244258
QgsFeatureIterator getFeatures( const QgsFeatureRequest &request = QgsFeatureRequest() ) const override;
245259
QgsCoordinateReferenceSystem sourceCrs() const override;
246260
QgsFields fields() const override;

0 commit comments

Comments
 (0)
Please sign in to comment.