Skip to content

Commit

Permalink
[processing] Fix Geometry algorithm always produces multi-geometry
Browse files Browse the repository at this point in the history
Also added code to handle GeometryCollections
  • Loading branch information
alexbruy committed Feb 7, 2017
1 parent 5a5c1bf commit 7df04ac
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions python/plugins/processing/algs/qgis/FixGeometry.py
Expand Up @@ -25,6 +25,8 @@

__revision__ = '$Format:%H$'

from qgis.core import QgsWkbTypes

from processing.core.GeoAlgorithm import GeoAlgorithm
from processing.core.parameters import ParameterVector
from processing.core.outputs import OutputVector
Expand All @@ -42,7 +44,8 @@ def defineCharacteristics(self):
self.group, self.i18n_group = self.trAlgorithm('Vector geometry tools')

self.addParameter(ParameterVector(self.INPUT,
self.tr('Input Layer')))
self.tr('Input Layer'),
[dataobjects.TYPE_VECTOR_POLYGON, dataobjects.TYPE_VECTOR_LINE]))
self.addOutput(OutputVector(self.OUTPUT,
self.tr('Layer with fixed geometries')))

Expand All @@ -53,7 +56,7 @@ def processAlgorithm(self, feedback):
writer = self.getOutputFromName(
self.OUTPUT).getVectorWriter(
layer.fields(),
layer.wkbType(),
QgsWkbTypes.multiType(layer.wkbType()),
layer.crs())

features = vector.features(layer)
Expand All @@ -68,6 +71,19 @@ def processAlgorithm(self, feedback):
if not outputGeometry:
ProcessingLog.addToLog(ProcessingLog.LOG_WARNING,
'makeValid failed for feature {}'.format(inputFeature.id()))

if outputGeometry.wkbType() == QgsWkbTypes.Unknown or QgsWkbTypes.flatType(outputGeometry.geometry().wkbType()) == QgsWkbTypes.GeometryCollection:
tmpGeometries = outputGeometry.asGeometryCollection()
for g in tmpGeometries:
if g.type() == inputFeature.geometry().type():
try:
outputFeature.setGeometry(QgsGeometry(g))
writer.addFeature(outputFeature)
except:
pass
feedback.setProgress(int(current * total))
continue

outputFeature.setGeometry(outputGeometry)

writer.addFeature(outputFeature)
Expand Down

0 comments on commit 7df04ac

Please sign in to comment.