Skip to content

Commit 7df04ac

Browse files
committedFeb 7, 2017
[processing] Fix Geometry algorithm always produces multi-geometry
Also added code to handle GeometryCollections
1 parent 5a5c1bf commit 7df04ac

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed
 

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

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525

2626
__revision__ = '$Format:%H$'
2727

28+
from qgis.core import QgsWkbTypes
29+
2830
from processing.core.GeoAlgorithm import GeoAlgorithm
2931
from processing.core.parameters import ParameterVector
3032
from processing.core.outputs import OutputVector
@@ -42,7 +44,8 @@ def defineCharacteristics(self):
4244
self.group, self.i18n_group = self.trAlgorithm('Vector geometry tools')
4345

4446
self.addParameter(ParameterVector(self.INPUT,
45-
self.tr('Input Layer')))
47+
self.tr('Input Layer'),
48+
[dataobjects.TYPE_VECTOR_POLYGON, dataobjects.TYPE_VECTOR_LINE]))
4649
self.addOutput(OutputVector(self.OUTPUT,
4750
self.tr('Layer with fixed geometries')))
4851

@@ -53,7 +56,7 @@ def processAlgorithm(self, feedback):
5356
writer = self.getOutputFromName(
5457
self.OUTPUT).getVectorWriter(
5558
layer.fields(),
56-
layer.wkbType(),
59+
QgsWkbTypes.multiType(layer.wkbType()),
5760
layer.crs())
5861

5962
features = vector.features(layer)
@@ -68,6 +71,19 @@ def processAlgorithm(self, feedback):
6871
if not outputGeometry:
6972
ProcessingLog.addToLog(ProcessingLog.LOG_WARNING,
7073
'makeValid failed for feature {}'.format(inputFeature.id()))
74+
75+
if outputGeometry.wkbType() == QgsWkbTypes.Unknown or QgsWkbTypes.flatType(outputGeometry.geometry().wkbType()) == QgsWkbTypes.GeometryCollection:
76+
tmpGeometries = outputGeometry.asGeometryCollection()
77+
for g in tmpGeometries:
78+
if g.type() == inputFeature.geometry().type():
79+
try:
80+
outputFeature.setGeometry(QgsGeometry(g))
81+
writer.addFeature(outputFeature)
82+
except:
83+
pass
84+
feedback.setProgress(int(current * total))
85+
continue
86+
7187
outputFeature.setGeometry(outputGeometry)
7288

7389
writer.addFeature(outputFeature)

0 commit comments

Comments
 (0)
Please sign in to comment.