mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-14 00:07:35 -04:00
[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++
This commit is contained in:
parent
5d377beec0
commit
ee777447a9
@ -99,6 +99,13 @@ def features(layer, request=QgsFeatureRequest()):
|
||||
def __init__(self, layer, request):
|
||||
self.layer = layer
|
||||
self.selection = False
|
||||
|
||||
invalidFeaturesMethod = ProcessingConfig.getSetting(ProcessingConfig.FILTER_INVALID_GEOMETRIES)
|
||||
if invalidFeaturesMethod == self.IGNORE:
|
||||
request.setInvalidGeometryCheck(QgsFeatureRequest.GeometrySkipInvalid)
|
||||
elif invalidFeaturesMethod == self.RAISE_EXCEPTION:
|
||||
request.setInvalidGeometryCheck(QgsFeatureRequest.GeometryAbortOnInvalid)
|
||||
|
||||
if ProcessingConfig.getSetting(ProcessingConfig.USE_SELECTED)\
|
||||
and layer.selectedFeatureCount() > 0:
|
||||
self.iter = layer.selectedFeaturesIterator(request)
|
||||
@ -106,27 +113,6 @@ def features(layer, request=QgsFeatureRequest()):
|
||||
else:
|
||||
self.iter = layer.getFeatures(request)
|
||||
|
||||
invalidFeaturesMethod = ProcessingConfig.getSetting(ProcessingConfig.FILTER_INVALID_GEOMETRIES)
|
||||
|
||||
def filterFeature(f, ignoreInvalid):
|
||||
geom = f.geometry()
|
||||
if geom is None:
|
||||
ProcessingLog.addToLog(ProcessingLog.LOG_INFO,
|
||||
self.tr('Feature with NULL geometry found.'))
|
||||
elif not geom.isGeosValid():
|
||||
ProcessingLog.addToLog(ProcessingLog.LOG_ERROR,
|
||||
self.tr('GEOS geoprocessing error: One or more input features have invalid geometry.'))
|
||||
if ignoreInvalid:
|
||||
return False
|
||||
else:
|
||||
raise GeoAlgorithmExecutionException(self.tr('Features with invalid geometries found. Please fix these geometries or specify the "Ignore invalid input features" flag'))
|
||||
return True
|
||||
|
||||
if invalidFeaturesMethod == self.IGNORE:
|
||||
self.iter = filter(lambda x: filterFeature(x, True), self.iter)
|
||||
elif invalidFeaturesMethod == self.RAISE_EXCEPTION:
|
||||
self.iter = filter(lambda x: filterFeature(x, False), self.iter)
|
||||
|
||||
def __iter__(self):
|
||||
return self.iter
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user