Skip to content

Commit 405d8f2

Browse files
committed
[processing] Skip more unnecessary geometry checks
1 parent 0a1a676 commit 405d8f2

40 files changed

+129
-32
lines changed

python/plugins/processing/algs/qgis/AddTableField.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@
3030
QgsProcessing,
3131
QgsProcessingParameterString,
3232
QgsProcessingParameterNumber,
33-
QgsProcessingParameterEnum)
33+
QgsProcessingParameterEnum,
34+
QgsProcessingFeatureSource)
3435
from processing.algs.qgis.QgisAlgorithm import QgisFeatureBasedAlgorithm
3536

3637

@@ -93,6 +94,9 @@ def outputFields(self, inputFields):
9394
inputFields.append(self.field)
9495
return inputFields
9596

97+
def sourceFlags(self):
98+
return QgsProcessingFeatureSource.FlagSkipGeometryValidityChecks
99+
96100
def processFeature(self, feature, context, feedback):
97101
attributes = feature.attributes()
98102
attributes.append(None)

python/plugins/processing/algs/qgis/BasicStatistics.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@
3838
QgsProcessingParameterFeatureSource,
3939
QgsProcessingParameterField,
4040
QgsProcessingParameterFileDestination,
41-
QgsProcessingOutputNumber)
41+
QgsProcessingOutputNumber,
42+
QgsProcessingFeatureSource)
4243

4344
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
4445

@@ -133,7 +134,7 @@ def processAlgorithm(self, parameters, context, feedback):
133134
output_file = self.parameterAsFileOutput(parameters, self.OUTPUT_HTML_FILE, context)
134135

135136
request = QgsFeatureRequest().setFlags(QgsFeatureRequest.NoGeometry).setSubsetOfAttributes([field_name], source.fields())
136-
features = source.getFeatures(request)
137+
features = source.getFeatures(request, QgsProcessingFeatureSource.FlagSkipGeometryValidityChecks)
137138
count = source.featureCount()
138139

139140
data = []

python/plugins/processing/algs/qgis/CheckValidity.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@
4343
QgsProcessingParameterFeatureSource,
4444
QgsProcessingParameterEnum,
4545
QgsProcessingParameterFeatureSink,
46-
QgsProcessingOutputNumber
47-
)
46+
QgsProcessingOutputNumber)
4847
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
4948

5049
settings_method_key = "/qgis/digitizing/validate_geometries"

python/plugins/processing/algs/qgis/DeleteColumn.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
__revision__ = '$Format:%H$'
2727

2828
from qgis.core import (QgsProcessingParameterField,
29-
QgsProcessing)
29+
QgsProcessing,
30+
QgsProcessingFeatureSource)
3031
from processing.algs.qgis.QgisAlgorithm import QgisFeatureBasedAlgorithm
3132

3233

@@ -83,6 +84,9 @@ def outputFields(self, input_fields):
8384
input_fields.remove(index)
8485
return input_fields
8586

87+
def sourceFlags(self):
88+
return QgsProcessingFeatureSource.FlagSkipGeometryValidityChecks
89+
8690
def processFeature(self, feature, context, feedback):
8791
attributes = feature.attributes()
8892
for index in self.field_indices:

python/plugins/processing/algs/qgis/ExtractSpecificVertices.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,11 @@
3232
QgsVertexId,
3333
QgsFeature,
3434
QgsFeatureSink,
35+
QgsFeatureRequest,
3536
QgsGeometry,
3637
QgsField,
3738
QgsProcessing,
39+
QgsProcessingFeatureSource,
3840
QgsProcessingParameterFeatureSource,
3941
QgsProcessingParameterString,
4042
QgsProcessingParameterFeatureSink,
@@ -103,7 +105,7 @@ def processAlgorithm(self, parameters, context, feedback):
103105
raise QgsProcessingException(
104106
self.tr('\'{}\' is not a valid vertex index').format(vertex))
105107

106-
features = source.getFeatures()
108+
features = source.getFeatures(QgsFeatureRequest(), QgsProcessingFeatureSource.FlagSkipGeometryValidityChecks)
107109
total = 100.0 / source.featureCount() if source.featureCount() else 0
108110

109111
for current, f in enumerate(features):

python/plugins/processing/algs/qgis/GeometryByExpression.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@
3131
QgsProcessingException,
3232
QgsProcessingParameterBoolean,
3333
QgsProcessingParameterEnum,
34-
QgsProcessingParameterExpression)
34+
QgsProcessingParameterExpression,
35+
QgsProcessingFeatureSource)
3536

3637
from processing.algs.qgis.QgisAlgorithm import QgisFeatureBasedAlgorithm
3738

@@ -104,6 +105,9 @@ def prepareAlgorithm(self, parameters, context, feedback):
104105
def outputWkbType(self, input_wkb_type):
105106
return self.wkb_type
106107

108+
def sourceFlags(self):
109+
return QgsProcessingFeatureSource.FlagSkipGeometryValidityChecks
110+
107111
def processFeature(self, feature, context, feedback):
108112
self.expression_context.setFeature(feature)
109113
value = self.expression.evaluate(self.expression_context)

python/plugins/processing/algs/qgis/PointsLayerFromTable.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@
3434
QgsProcessingParameterFeatureSink,
3535
QgsProcessingParameterFeatureSource,
3636
QgsProcessingParameterCrs,
37-
QgsProcessingParameterField)
37+
QgsProcessingParameterField,
38+
QgsProcessingFeatureSource,
39+
QgsFeatureRequest)
3840
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
3941

4042

@@ -107,7 +109,7 @@ def processAlgorithm(self, parameters, context, feedback):
107109
fields, wkb_type, target_crs)
108110

109111
request = QgsFeatureRequest().setFlags(QgsFeatureRequest.NoGeometry)
110-
features = source.getFeatures()
112+
features = source.getFeatures(QgsFeatureRequest(), QgsProcessingFeatureSource.FlagSkipGeometryValidityChecks)
111113
total = 100.0 / source.featureCount() if source.featureCount() else 0
112114

113115
for current, feature in enumerate(features):

python/plugins/processing/algs/qgis/PointsToPaths.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
QgsProcessingParameterFeatureSource,
4242
QgsProcessingParameterField,
4343
QgsProcessingParameterString,
44+
QgsProcessingFeatureSource,
4445
QgsProcessing,
4546
QgsProcessingParameterFeatureSink,
4647
QgsProcessingParameterFolderDestination)
@@ -126,7 +127,7 @@ def processAlgorithm(self, parameters, context, feedback):
126127
fields, output_wkb, source.sourceCrs())
127128

128129
points = dict()
129-
features = source.getFeatures(QgsFeatureRequest().setSubsetOfAttributes([group_field_index, order_field_index]))
130+
features = source.getFeatures(QgsFeatureRequest().setSubsetOfAttributes([group_field_index, order_field_index]), QgsProcessingFeatureSource.FlagSkipGeometryValidityChecks)
130131
total = 100.0 / source.featureCount() if source.featureCount() else 0
131132
for current, f in enumerate(features):
132133
if feedback.isCanceled():

python/plugins/processing/algs/qgis/RandomExtract.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@
3232
QgsProcessingParameterFeatureSource,
3333
QgsProcessingParameterEnum,
3434
QgsProcessingParameterNumber,
35-
QgsProcessingParameterFeatureSink)
35+
QgsProcessingParameterFeatureSink,
36+
QgsFeatureRequest,
37+
QgsProcessingFeatureSource)
3638
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
3739

3840

@@ -78,7 +80,7 @@ def processAlgorithm(self, parameters, context, feedback):
7880
source = self.parameterAsSource(parameters, self.INPUT, context)
7981
method = self.parameterAsEnum(parameters, self.METHOD, context)
8082

81-
features = source.getFeatures()
83+
features = source.getFeatures(QgsFeatureRequest(), QgsProcessingFeatureSource.FlagSkipGeometryValidityChecks)
8284
featureCount = source.featureCount()
8385
value = self.parameterAsInt(parameters, self.NUMBER, context)
8486

python/plugins/processing/algs/qgis/RandomExtractWithinSubsets.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@
3333
QgsProcessingParameterEnum,
3434
QgsProcessingParameterField,
3535
QgsProcessingParameterNumber,
36-
QgsProcessingParameterFeatureSink)
36+
QgsProcessingParameterFeatureSink,
37+
QgsProcessingFeatureSource,
38+
QgsFeatureRequest)
3739
from collections import defaultdict
3840
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
3941

@@ -88,7 +90,7 @@ def processAlgorithm(self, parameters, context, feedback):
8890

8991
index = source.fields().lookupField(field)
9092

91-
features = source.getFeatures()
93+
features = source.getFeatures(QgsFeatureRequest(), QgsProcessingFeatureSource.FlagSkipGeometryValidityChecks)
9294
featureCount = source.featureCount()
9395
unique = source.uniqueValues(index)
9496
value = self.parameterAsInt(parameters, self.NUMBER, context)

python/plugins/processing/algs/qgis/SetMValue.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@
3131
QgsWkbTypes,
3232
QgsPropertyDefinition,
3333
QgsProcessingParameters,
34-
QgsProcessingParameterNumber)
34+
QgsProcessingParameterNumber,
35+
QgsProcessingFeatureSource)
3536

3637

3738
from processing.algs.qgis.QgisAlgorithm import QgisFeatureBasedAlgorithm
@@ -85,6 +86,9 @@ def prepareAlgorithm(self, parameters, context, feedback):
8586
self.m_property = parameters[self.M_VALUE]
8687
return True
8788

89+
def sourceFlags(self):
90+
return QgsProcessingFeatureSource.FlagSkipGeometryValidityChecks
91+
8892
def processFeature(self, feature, context, feedback):
8993
input_geometry = feature.geometry()
9094
if input_geometry:

python/plugins/processing/algs/qgis/SetZValue.py

+3
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ def initParameters(self, config=None):
7979
def outputWkbType(self, inputWkb):
8080
return QgsWkbTypes.addZ(inputWkb)
8181

82+
def sourceFlags(self):
83+
return QgsProcessingFeatureSource.FlagSkipGeometryValidityChecks
84+
8285
def prepareAlgorithm(self, parameters, context, feedback):
8386
self.z_value = self.parameterAsDouble(parameters, self.Z_VALUE, context)
8487
self.dynamic_z = QgsProcessingParameters.isDynamic(parameters, self.Z_VALUE)

python/plugins/processing/algs/qgis/StatisticsByCategories.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
QgsFeature,
4040
QgsFeatureSink,
4141
QgsProcessing,
42+
QgsProcessingFeatureSource,
4243
NULL)
4344
from qgis.PyQt.QtCore import QVariant
4445
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
@@ -158,7 +159,7 @@ def addField(name):
158159
attrs = []
159160
attrs.extend(category_field_indexes)
160161
request.setSubsetOfAttributes(attrs)
161-
features = source.getFeatures(request)
162+
features = source.getFeatures(request, QgsProcessingFeatureSource.FlagSkipGeometryValidityChecks)
162163
total = 50.0 / source.featureCount() if source.featureCount() else 0
163164
if field_type == 'none':
164165
values = defaultdict(lambda: 0)

python/plugins/processing/algs/qgis/TextToFloat.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
from qgis.PyQt.QtCore import QVariant
2929
from qgis.core import (QgsField,
3030
QgsProcessing,
31-
QgsProcessingParameterField)
31+
QgsProcessingParameterField,
32+
QgsProcessingFeatureSource)
3233
from processing.algs.qgis.QgisAlgorithm import QgisFeatureBasedAlgorithm
3334

3435

@@ -76,6 +77,9 @@ def prepareAlgorithm(self, parameters, context, feedback):
7677
self.field_name = self.parameterAsString(parameters, self.FIELD, context)
7778
return True
7879

80+
def sourceFlags(self):
81+
return QgsProcessingFeatureSource.FlagSkipGeometryValidityChecks
82+
7983
def processFeature(self, feature, context, feedback):
8084
value = feature[self.field_idx]
8185
try:

python/plugins/processing/algs/qgis/UniqueValues.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
QgsProcessingParameterFeatureSink,
4343
QgsProcessingOutputNumber,
4444
QgsProcessingOutputString,
45+
QgsProcessingFeatureSource,
4546
QgsProcessingParameterFileDestination)
4647

4748
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
@@ -118,7 +119,7 @@ def processAlgorithm(self, parameters, context, feedback):
118119
request = QgsFeatureRequest().setFlags(QgsFeatureRequest.NoGeometry)
119120
request.setSubsetOfAttributes(field_indices)
120121
total = 100.0 / source.featureCount() if source.featureCount() else 0
121-
for current, f in enumerate(source.getFeatures(request)):
122+
for current, f in enumerate(source.getFeatures(request, QgsProcessingFeatureSource.FlagSkipGeometryValidityChecks)):
122123
if feedback.isCanceled():
123124
break
124125

src/analysis/processing/qgsalgorithmaddincrementalfield.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,11 @@ QgsAddIncrementalFieldAlgorithm *QgsAddIncrementalFieldAlgorithm::createInstance
6969
return new QgsAddIncrementalFieldAlgorithm();
7070
}
7171

72+
QgsProcessingFeatureSource::Flag QgsAddIncrementalFieldAlgorithm::sourceFlags() const
73+
{
74+
return QgsProcessingFeatureSource::FlagSkipGeometryValidityChecks;
75+
}
76+
7277
void QgsAddIncrementalFieldAlgorithm::initParameters( const QVariantMap & )
7378
{
7479
addParameter( new QgsProcessingParameterString( QStringLiteral( "FIELD_NAME" ), QObject::tr( "Field name" ), QStringLiteral( "AUTO" ) ) );

src/analysis/processing/qgsalgorithmaddincrementalfield.h

+1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class QgsAddIncrementalFieldAlgorithm : public QgsProcessingFeatureBasedAlgorith
4848
void initParameters( const QVariantMap &configuration = QVariantMap() ) override;
4949
QString outputName() const override;
5050
QgsFields outputFields( const QgsFields &inputFields ) const override;
51+
QgsProcessingFeatureSource::Flag sourceFlags() const override;
5152

5253
bool prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
5354
QgsFeatureList processFeature( const QgsFeature &feature, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;

src/analysis/processing/qgsalgorithmassignprojection.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,11 @@ void QgsAssignProjectionAlgorithm::initParameters( const QVariantMap & )
6767
addParameter( new QgsProcessingParameterCrs( QStringLiteral( "CRS" ), QObject::tr( "Assigned CRS" ), QStringLiteral( "EPSG:4326" ) ) );
6868
}
6969

70+
QgsProcessingFeatureSource::Flag QgsAssignProjectionAlgorithm::sourceFlags() const
71+
{
72+
return QgsProcessingFeatureSource::FlagSkipGeometryValidityChecks;
73+
}
74+
7075
bool QgsAssignProjectionAlgorithm::prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback * )
7176
{
7277
mDestCrs = parameterAsCrs( parameters, QStringLiteral( "CRS" ), context );

src/analysis/processing/qgsalgorithmassignprojection.h

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ class QgsAssignProjectionAlgorithm : public QgsProcessingFeatureBasedAlgorithm
4747
void initParameters( const QVariantMap &configuration = QVariantMap() ) override;
4848
QgsCoordinateReferenceSystem outputCrs( const QgsCoordinateReferenceSystem & ) const override { return mDestCrs; }
4949
QString outputName() const override;
50+
QgsProcessingFeatureSource::Flag sourceFlags() const override;
5051

5152
bool prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
5253
QgsFeatureList processFeature( const QgsFeature &feature, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;

src/analysis/processing/qgsalgorithmdropgeometry.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,11 @@ QgsWkbTypes::Type QgsDropGeometryAlgorithm::outputWkbType( QgsWkbTypes::Type ) c
6969
return QgsWkbTypes::NoGeometry;
7070
}
7171

72+
QgsProcessingFeatureSource::Flag QgsDropGeometryAlgorithm::sourceFlags() const
73+
{
74+
return QgsProcessingFeatureSource::FlagSkipGeometryValidityChecks;
75+
}
76+
7277
QgsFeatureRequest QgsDropGeometryAlgorithm::request() const
7378
{
7479
return QgsFeatureRequest().setFlags( QgsFeatureRequest::NoGeometry );

src/analysis/processing/qgsalgorithmdropgeometry.h

+1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class QgsDropGeometryAlgorithm : public QgsProcessingFeatureBasedAlgorithm
4848
QString outputName() const override;
4949
QgsWkbTypes::Type outputWkbType( QgsWkbTypes::Type inputWkbType ) const override;
5050
QgsFeatureRequest request() const override;
51+
QgsProcessingFeatureSource::Flag sourceFlags() const override;
5152
QgsFeatureList processFeature( const QgsFeature &feature, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
5253
};
5354

src/analysis/processing/qgsalgorithmdropmzvalues.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,11 @@ QgsWkbTypes::Type QgsDropMZValuesAlgorithm::outputWkbType( QgsWkbTypes::Type inp
7575
return wkb;
7676
}
7777

78+
QgsProcessingFeatureSource::Flag QgsDropMZValuesAlgorithm::sourceFlags() const
79+
{
80+
return QgsProcessingFeatureSource::FlagSkipGeometryValidityChecks;
81+
}
82+
7883
bool QgsDropMZValuesAlgorithm::prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback * )
7984
{
8085
mDropM = parameterAsBool( parameters, QStringLiteral( "DROP_M_VALUES" ), context );

src/analysis/processing/qgsalgorithmdropmzvalues.h

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ class QgsDropMZValuesAlgorithm : public QgsProcessingFeatureBasedAlgorithm
4747
void initParameters( const QVariantMap &configuration = QVariantMap() ) override;
4848
QString outputName() const override;
4949
QgsWkbTypes::Type outputWkbType( QgsWkbTypes::Type inputWkbType ) const override;
50+
QgsProcessingFeatureSource::Flag sourceFlags() const override;
5051
bool prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
5152
QgsFeatureList processFeature( const QgsFeature &feature, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
5253

src/analysis/processing/qgsalgorithmextractvertices.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ void QgsExtractVerticesAlgorithm::initAlgorithm( const QVariantMap & )
6868

6969
QVariantMap QgsExtractVerticesAlgorithm::processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
7070
{
71-
std::unique_ptr< QgsFeatureSource > featureSource( parameterAsSource( parameters, QStringLiteral( "INPUT" ), context ) );
71+
std::unique_ptr< QgsProcessingFeatureSource > featureSource( parameterAsSource( parameters, QStringLiteral( "INPUT" ), context ) );
7272
if ( !featureSource )
7373
throw QgsProcessingException( QObject::tr( "Could not load source layer for INPUT" ) );
7474

@@ -99,7 +99,7 @@ QVariantMap QgsExtractVerticesAlgorithm::processAlgorithm( const QVariantMap &pa
9999
throw QgsProcessingException( QObject::tr( "Could not create destination layer for OUTPUT" ) );;
100100

101101
double step = featureSource->featureCount() > 0 ? 100.0 / featureSource->featureCount() : 1;
102-
QgsFeatureIterator fi = featureSource->getFeatures( QgsFeatureRequest() );
102+
QgsFeatureIterator fi = featureSource->getFeatures( QgsFeatureRequest(), QgsProcessingFeatureSource::FlagSkipGeometryValidityChecks );
103103
QgsFeature f;
104104
int i = -1;
105105
while ( fi.nextFeature( f ) )

src/analysis/processing/qgsalgorithmjoinwithlines.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ QVariantMap QgsJoinWithLinesAlgorithm::processAlgorithm( const QVariantMap &para
8787
if ( parameters.value( QStringLiteral( "SPOKES" ) ) == parameters.value( QStringLiteral( "HUBS" ) ) )
8888
throw QgsProcessingException( QObject::tr( "Same layer given for both hubs and spokes" ) );
8989

90-
std::unique_ptr< QgsFeatureSource > hubSource( parameterAsSource( parameters, QStringLiteral( "HUBS" ), context ) );
91-
std::unique_ptr< QgsFeatureSource > spokeSource( parameterAsSource( parameters, QStringLiteral( "SPOKES" ), context ) );
90+
std::unique_ptr< QgsProcessingFeatureSource > hubSource( parameterAsSource( parameters, QStringLiteral( "HUBS" ), context ) );
91+
std::unique_ptr< QgsProcessingFeatureSource > spokeSource( parameterAsSource( parameters, QStringLiteral( "SPOKES" ), context ) );
9292
if ( !hubSource || !spokeSource )
9393
throw QgsProcessingException( QObject::tr( "Could not load source layers" ) );
9494

@@ -192,7 +192,7 @@ QVariantMap QgsJoinWithLinesAlgorithm::processAlgorithm( const QVariantMap &para
192192
return p;
193193
};
194194

195-
QgsFeatureIterator hubFeatures = hubSource->getFeatures( QgsFeatureRequest().setSubsetOfAttributes( hubFields2Fetch ) );
195+
QgsFeatureIterator hubFeatures = hubSource->getFeatures( QgsFeatureRequest().setSubsetOfAttributes( hubFields2Fetch ), QgsProcessingFeatureSource::FlagSkipGeometryValidityChecks );
196196
double step = hubSource->featureCount() > 0 ? 100.0 / hubSource->featureCount() : 1;
197197
int i = 0;
198198
QgsFeature hubFeature;
@@ -224,7 +224,7 @@ QVariantMap QgsJoinWithLinesAlgorithm::processAlgorithm( const QVariantMap &para
224224
spokeRequest.setSubsetOfAttributes( spokeFields2Fetch );
225225
spokeRequest.setFilterExpression( QgsExpression::createFieldEqualityExpression( fieldSpokeName, hubFeature.attribute( fieldHubIndex ) ) );
226226

227-
QgsFeatureIterator spokeFeatures = spokeSource->getFeatures( spokeRequest );
227+
QgsFeatureIterator spokeFeatures = spokeSource->getFeatures( spokeRequest, QgsProcessingFeatureSource::FlagSkipGeometryValidityChecks );
228228
QgsFeature spokeFeature;
229229
while ( spokeFeatures.nextFeature( spokeFeature ) )
230230
{

0 commit comments

Comments
 (0)