Skip to content

Commit ee77744

Browse files
committedApr 25, 2017
[processing] Remove special handling for invalid geometries
Instead rely on QgsFeatureRequest method. There's a temporary loss of the feedback on encountering an invalid geometry when abort on invalid is set, but that will be resurrected when all of vector.features is moved to c++
1 parent 5d377be commit ee77744

File tree

1 file changed

+7
-21
lines changed

1 file changed

+7
-21
lines changed
 

‎python/plugins/processing/tools/vector.py

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -99,34 +99,20 @@ class Features(object):
9999
def __init__(self, layer, request):
100100
self.layer = layer
101101
self.selection = False
102+
103+
invalidFeaturesMethod = ProcessingConfig.getSetting(ProcessingConfig.FILTER_INVALID_GEOMETRIES)
104+
if invalidFeaturesMethod == self.IGNORE:
105+
request.setInvalidGeometryCheck(QgsFeatureRequest.GeometrySkipInvalid)
106+
elif invalidFeaturesMethod == self.RAISE_EXCEPTION:
107+
request.setInvalidGeometryCheck(QgsFeatureRequest.GeometryAbortOnInvalid)
108+
102109
if ProcessingConfig.getSetting(ProcessingConfig.USE_SELECTED)\
103110
and layer.selectedFeatureCount() > 0:
104111
self.iter = layer.selectedFeaturesIterator(request)
105112
self.selection = True
106113
else:
107114
self.iter = layer.getFeatures(request)
108115

109-
invalidFeaturesMethod = ProcessingConfig.getSetting(ProcessingConfig.FILTER_INVALID_GEOMETRIES)
110-
111-
def filterFeature(f, ignoreInvalid):
112-
geom = f.geometry()
113-
if geom is None:
114-
ProcessingLog.addToLog(ProcessingLog.LOG_INFO,
115-
self.tr('Feature with NULL geometry found.'))
116-
elif not geom.isGeosValid():
117-
ProcessingLog.addToLog(ProcessingLog.LOG_ERROR,
118-
self.tr('GEOS geoprocessing error: One or more input features have invalid geometry.'))
119-
if ignoreInvalid:
120-
return False
121-
else:
122-
raise GeoAlgorithmExecutionException(self.tr('Features with invalid geometries found. Please fix these geometries or specify the "Ignore invalid input features" flag'))
123-
return True
124-
125-
if invalidFeaturesMethod == self.IGNORE:
126-
self.iter = filter(lambda x: filterFeature(x, True), self.iter)
127-
elif invalidFeaturesMethod == self.RAISE_EXCEPTION:
128-
self.iter = filter(lambda x: filterFeature(x, False), self.iter)
129-
130116
def __iter__(self):
131117
return self.iter
132118

0 commit comments

Comments
 (0)
Please sign in to comment.