Skip to content

Commit 7b68c77

Browse files
volayaalexbruy
authored andcommitted
[processing] removed unnecessary code to check validity of geometries
1 parent e8c149e commit 7b68c77

6 files changed

Lines changed: 32 additions & 93 deletions

File tree

‎python/plugins/processing/algs/qgis/Buffer.py‎

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ def buffering(progress, writer, distance, field, useField, layer, dissolve,
4545

4646
# With dissolve
4747
if dissolve:
48-
first = True
4948
buffered_geometries = []
5049
for inFeat in features:
5150
attrs = inFeat.attributes()
@@ -55,12 +54,7 @@ def buffering(progress, writer, distance, field, useField, layer, dissolve,
5554
value = distance
5655

5756
inGeom = inFeat.geometry()
58-
if not inGeom:
59-
ProcessingLog.addToLog(ProcessingLog.LOG_WARNING, 'Feature {} has empty geometry. Skipping...'.format(inFeat.id()))
60-
continue
61-
if not inGeom.isGeosValid():
62-
ProcessingLog.addToLog(ProcessingLog.LOG_WARNING, 'Feature {} has invalid geometry. Skipping...'.format(inFeat.id()))
63-
continue
57+
6458
buffered_geometries.append(inGeom.buffer(float(value), segments, endCapStyle, joinStyle, mitreLimit))
6559

6660
current += 1
@@ -80,14 +74,8 @@ def buffering(progress, writer, distance, field, useField, layer, dissolve,
8074
value = distance
8175
inGeom = inFeat.geometry()
8276
outFeat = QgsFeature()
83-
if inGeom.isEmpty() or inGeom.isGeosEmpty():
84-
pass
85-
elif not inGeom.isGeosValid():
86-
ProcessingLog.addToLog(ProcessingLog.LOG_WARNING, 'Feature {} has invalid geometry. Skipping...'.format(inFeat.id()))
87-
continue
88-
else:
89-
outGeom = inGeom.buffer(float(value), segments, endCapStyle, joinStyle, mitreLimit)
90-
outFeat.setGeometry(outGeom)
77+
outGeom = inGeom.buffer(float(value), segments, endCapStyle, joinStyle, mitreLimit)
78+
outFeat.setGeometry(outGeom)
9179
outFeat.setAttributes(attrs)
9280
writer.addFeature(outFeat)
9381
current += 1

‎python/plugins/processing/algs/qgis/Clip.py‎

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -119,16 +119,7 @@ def processAlgorithm(self, progress):
119119
if new_geom.wkbType() == QgsWkbTypes.Unknown or QgsWkbTypes.flatType(new_geom.geometry().wkbType()) == QgsWkbTypes.GeometryCollection:
120120
int_com = in_feat.geometry().combine(new_geom)
121121
int_sym = in_feat.geometry().symDifference(new_geom)
122-
if not int_com or not int_sym:
123-
ProcessingLog.addToLog(ProcessingLog.LOG_ERROR,
124-
self.tr('GEOS geoprocessing error: One or more '
125-
'input features have invalid geometry.'))
126-
else:
127-
new_geom = int_com.difference(int_sym)
128-
if new_geom.isGeosEmpty() or not new_geom.isGeosValid():
129-
ProcessingLog.addToLog(ProcessingLog.LOG_ERROR,
130-
self.tr('GEOS geoprocessing error: One or more '
131-
'input features have invalid geometry.'))
122+
new_geom = int_com.difference(int_sym)
132123
else:
133124
# clip geometry totally contains feature geometry, so no need to perform intersection
134125
new_geom = in_feat.geometry()

‎python/plugins/processing/algs/qgis/Difference.py‎

Lines changed: 9 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -58,16 +58,13 @@ def defineCharacteristics(self):
5858
self.tr('Input layer')))
5959
self.addParameter(ParameterVector(Difference.OVERLAY,
6060
self.tr('Difference layer')))
61-
self.addParameter(ParameterBoolean(Difference.IGNORE_INVALID,
62-
self.tr('Ignore invalid input features'), False, True))
6361
self.addOutput(OutputVector(Difference.OUTPUT, self.tr('Difference')))
6462

6563
def processAlgorithm(self, progress):
6664
layerA = dataobjects.getObjectFromUri(
6765
self.getParameterValue(Difference.INPUT))
6866
layerB = dataobjects.getObjectFromUri(
6967
self.getParameterValue(Difference.OVERLAY))
70-
ignoreInvalid = self.getParameterValue(Difference.IGNORE_INVALID)
7168

7269
geomType = QgsWkbTypes.multiType(layerA.wkbType())
7370
writer = self.getOutputFromName(
@@ -80,7 +77,6 @@ def processAlgorithm(self, progress):
8077
selectionA = vector.features(layerA)
8178
total = 100.0 / len(selectionA)
8279
for current, inFeatA in enumerate(selectionA):
83-
add = True
8480
geom = inFeatA.geometry()
8581
diff_geom = QgsGeometry(geom)
8682
attrs = inFeatA.attributes()
@@ -91,27 +87,15 @@ def processAlgorithm(self, progress):
9187
tmpGeom = inFeatB.geometry()
9288
if diff_geom.intersects(tmpGeom):
9389
diff_geom = QgsGeometry(diff_geom.difference(tmpGeom))
94-
if diff_geom.isGeosEmpty():
95-
ProcessingLog.addToLog(ProcessingLog.LOG_INFO,
96-
self.tr('Feature with NULL geometry found.'))
97-
if not diff_geom.isGeosValid():
98-
if ignoreInvalid:
99-
ProcessingLog.addToLog(ProcessingLog.LOG_ERROR,
100-
self.tr('GEOS geoprocessing error: One or more input features have invalid geometry.'))
101-
add = False
102-
else:
103-
raise GeoAlgorithmExecutionException(self.tr('Features with invalid geometries found. Please fix these errors or specify the "Ignore invalid input features" flag'))
104-
break
105-
106-
if add:
107-
try:
108-
outFeat.setGeometry(diff_geom)
109-
outFeat.setAttributes(attrs)
110-
writer.addFeature(outFeat)
111-
except:
112-
ProcessingLog.addToLog(ProcessingLog.LOG_WARNING,
113-
self.tr('Feature geometry error: One or more output features ignored due to invalid geometry.'))
114-
continue
90+
91+
try:
92+
outFeat.setGeometry(diff_geom)
93+
outFeat.setAttributes(attrs)
94+
writer.addFeature(outFeat)
95+
except:
96+
ProcessingLog.addToLog(ProcessingLog.LOG_WARNING,
97+
self.tr('Feature geometry error: One or more output features ignored due to invalid geometry.'))
98+
continue
11599

116100
progress.setPercentage(int(current * total))
117101

‎python/plugins/processing/algs/qgis/SymmetricalDifference.py‎

Lines changed: 18 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ def processAlgorithm(self, progress):
8383
count = 0
8484

8585
for featA in featuresA:
86-
add = True
8786
geom = featA.geometry()
8887
diffGeom = QgsGeometry(geom)
8988
attrs = featA.attributes()
@@ -93,31 +92,22 @@ def processAlgorithm(self, progress):
9392
tmpGeom = featB.geometry()
9493
if diffGeom.intersects(tmpGeom):
9594
diffGeom = QgsGeometry(diffGeom.difference(tmpGeom))
96-
if not diffGeom.isGeosValid():
97-
ProcessingLog.addToLog(ProcessingLog.LOG_ERROR,
98-
self.tr('GEOS geoprocessing error: One or '
99-
'more input features have invalid '
100-
'geometry.'))
101-
add = False
102-
break
103-
104-
if add:
105-
try:
106-
outFeat.setGeometry(diffGeom)
107-
outFeat.setAttributes(attrs)
108-
writer.addFeature(outFeat)
109-
except:
110-
ProcessingLog.addToLog(ProcessingLog.LOG_WARNING,
111-
self.tr('Feature geometry error: One or more output features ignored due to invalid geometry.'))
112-
continue
95+
96+
try:
97+
outFeat.setGeometry(diffGeom)
98+
outFeat.setAttributes(attrs)
99+
writer.addFeature(outFeat)
100+
except:
101+
ProcessingLog.addToLog(ProcessingLog.LOG_WARNING,
102+
self.tr('Feature geometry error: One or more output features ignored due to invalid geometry.'))
103+
continue
113104

114105
count += 1
115106
progress.setPercentage(int(count * total))
116107

117108
length = len(layerA.fields())
118109

119110
for featA in featuresB:
120-
add = True
121111
geom = featA.geometry()
122112
diffGeom = QgsGeometry(geom)
123113
attrs = featA.attributes()
@@ -128,23 +118,15 @@ def processAlgorithm(self, progress):
128118
tmpGeom = featB.geometry()
129119
if diffGeom.intersects(tmpGeom):
130120
diffGeom = QgsGeometry(diffGeom.difference(tmpGeom))
131-
if not diffGeom.isGeosValid():
132-
ProcessingLog.addToLog(ProcessingLog.LOG_ERROR,
133-
self.tr('GEOS geoprocessing error: One or '
134-
'more input features have invalid '
135-
'geometry.'))
136-
add = False
137-
break
138-
139-
if add:
140-
try:
141-
outFeat.setGeometry(diffGeom)
142-
outFeat.setAttributes(attrs)
143-
writer.addFeature(outFeat)
144-
except:
145-
ProcessingLog.addToLog(ProcessingLog.LOG_WARNING,
146-
self.tr('Feature geometry error: One or more output features ignored due to invalid geometry.'))
147-
continue
121+
122+
try:
123+
outFeat.setGeometry(diffGeom)
124+
outFeat.setAttributes(attrs)
125+
writer.addFeature(outFeat)
126+
except:
127+
ProcessingLog.addToLog(ProcessingLog.LOG_WARNING,
128+
self.tr('Feature geometry error: One or more output features ignored due to invalid geometry.'))
129+
continue
148130

149131
count += 1
150132
progress.setPercentage(int(count * total))

‎python/plugins/processing/algs/qgis/Union.py‎

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -161,9 +161,6 @@ def processAlgorithm(self, progress):
161161
if len(lstIntersectingB) != 0:
162162
intB = QgsGeometry.unaryUnion(lstIntersectingB)
163163
diff_geom = diff_geom.difference(intB)
164-
if diff_geom.isGeosEmpty() or not diff_geom.isGeosValid():
165-
ProcessingLog.addToLog(ProcessingLog.LOG_ERROR,
166-
self.tr('GEOS geoprocessing error: One or more input features have invalid geometry.'))
167164

168165
if diff_geom.wkbType() == 0 or QgsWkbTypes.flatType(diff_geom.geometry().wkbType()) == QgsWkbTypes.GeometryCollection:
169166
temp_list = diff_geom.asGeometryCollection()
@@ -214,9 +211,6 @@ def processAlgorithm(self, progress):
214211
if engine.intersects(tmpGeom.geometry()):
215212
add = True
216213
diff_geom = QgsGeometry(diff_geom.difference(tmpGeom))
217-
if diff_geom.isGeosEmpty() or not diff_geom.isGeosValid():
218-
ProcessingLog.addToLog(ProcessingLog.LOG_ERROR,
219-
self.tr('GEOS geoprocessing error: One or more input features have invalid geometry.'))
220214
else:
221215
try:
222216
# Ihis only happends if the bounding box

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ def filterFeature(f, ignoreInvalid):
122122
if ignoreInvalid:
123123
return False
124124
else:
125-
raise GeoAlgorithmExecutionException(self.tr('Features with invalid geometries found. Please fix these errors or specify the "Ignore invalid input features" flag'))
125+
raise GeoAlgorithmExecutionException(self.tr('Features with invalid geometries found. Please fix these geometries or specify the "Ignore invalid input features" flag'))
126126
return True
127127

128128
if invalidFeaturesMethod == self.IGNORE:

0 commit comments

Comments
 (0)