Skip to content

Commit e6081fa

Browse files
committed
[processing] skip invalid geometries when performing intersection (fix #9410)
1 parent 6f3046c commit e6081fa

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

python/plugins/processing/algs/ftools/Intersection.py

+23-14
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
from PyQt4.QtGui import *
3030
from qgis.core import *
3131
from processing.core.GeoAlgorithm import GeoAlgorithm
32+
from processing.core.ProcessingLog import ProcessingLog
3233
from processing.parameters.ParameterVector import ParameterVector
3334
from processing.outputs.OutputVector import OutputVector
3435
from processing.tools import dataobjects, vector
@@ -75,20 +76,28 @@ def processAlgorithm(self, progress):
7576
request = QgsFeatureRequest().setFilterFid(i)
7677
inFeatB = vlayerB.getFeatures(request).next()
7778
tmpGeom = QgsGeometry(inFeatB.geometry())
78-
if geom.intersects(tmpGeom):
79-
atMapB = inFeatB.attributes()
80-
int_geom = QgsGeometry(geom.intersection(tmpGeom))
81-
if int_geom.wkbType() == QGis.WKBUnknown:
82-
int_com = geom.combine(tmpGeom)
83-
int_sym = geom.symDifference(tmpGeom)
84-
int_geom = QgsGeometry(int_com.difference(int_sym))
85-
if int_geom.wkbType() in wkbTypeGroups[wkbTypeGroups[int_geom.wkbType()]]:
86-
outFeat.setGeometry(int_geom)
87-
attrs = []
88-
attrs.extend(atMapA)
89-
attrs.extend(atMapB)
90-
outFeat.setAttributes(attrs)
91-
writer.addFeature(outFeat)
79+
try:
80+
if geom.intersects(tmpGeom):
81+
atMapB = inFeatB.attributes()
82+
int_geom = QgsGeometry(geom.intersection(tmpGeom))
83+
if int_geom.wkbType() == QGis.WKBUnknown:
84+
int_com = geom.combine(tmpGeom)
85+
int_sym = geom.symDifference(tmpGeom)
86+
int_geom = QgsGeometry(int_com.difference(int_sym))
87+
try:
88+
if int_geom.wkbType() in wkbTypeGroups[wkbTypeGroups[int_geom.wkbType()]]:
89+
outFeat.setGeometry(int_geom)
90+
attrs = []
91+
attrs.extend(atMapA)
92+
attrs.extend(atMapB)
93+
outFeat.setAttributes(attrs)
94+
writer.addFeature(outFeat)
95+
except:
96+
ProcessingLog.addToLog(ProcessingLog.LOG_INFO, 'Feature geometry error: One or more output features ignored due to invalid geometry.')
97+
continue
98+
except:
99+
break
100+
92101

93102
del writer
94103

0 commit comments

Comments
 (0)