Skip to content

Commit 5ba0b5c

Browse files
committed
Port merge alg to new API
1 parent ea18e8e commit 5ba0b5c

File tree

2 files changed

+27
-15
lines changed

2 files changed

+27
-15
lines changed

python/plugins/processing/algs/qgis/Merge.py

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,12 @@
3030
from qgis.PyQt.QtGui import QIcon
3131
from qgis.PyQt.QtCore import QVariant
3232
from qgis.core import (QgsFields,
33-
QgsProcessingUtils)
33+
QgsProcessingUtils,
34+
QgsProcessingParameterMultipleLayers,
35+
QgsProcessingParameterDefinition,
36+
QgsProcessingParameterFeatureSink,
37+
QgsProcessingOutputVectorLayer,
38+
QgsMapLayer)
3439

3540
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
3641
from processing.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
@@ -53,11 +58,12 @@ def group(self):
5358

5459
def __init__(self):
5560
super().__init__()
56-
self.addParameter(ParameterMultipleInput(self.LAYERS,
57-
self.tr('Layers to merge'),
58-
datatype=dataobjects.TYPE_VECTOR_ANY))
61+
self.addParameter(QgsProcessingParameterMultipleLayers(self.LAYERS,
62+
self.tr('Layers to merge'),
63+
QgsProcessingParameterDefinition.TypeVectorAny))
5964

60-
self.addOutput(OutputVector(self.OUTPUT, self.tr('Merged')))
65+
self.addParameter(QgsProcessingParameterFeatureSink(self.OUTPUT, self.tr('Merged')))
66+
self.addOutput(QgsProcessingOutputVectorLayer(self.OUTPUT, self.tr('Merged')))
6167

6268
def name(self):
6369
return 'mergevectorlayers'
@@ -66,13 +72,15 @@ def displayName(self):
6672
return self.tr('Merge vector layers')
6773

6874
def processAlgorithm(self, parameters, context, feedback):
69-
inLayers = self.getParameterValue(self.LAYERS)
75+
input_layers = self.parameterAsLayerList(parameters, self.LAYERS, context)
7076

7177
layers = []
7278
fields = QgsFields()
7379
totalFeatureCount = 0
74-
for layerSource in inLayers.split(';'):
75-
layer = QgsProcessingUtils.mapLayerFromString(layerSource, context)
80+
for layer in input_layers:
81+
if layer.type() != QgsMapLayer.VectorLayer:
82+
raise GeoAlgorithmExecutionException(
83+
self.tr('All layers must be vector layers!'))
7684

7785
if (len(layers) > 0):
7886
if (layer.wkbType() != layers[0].wkbType()):
@@ -96,12 +104,15 @@ def processAlgorithm(self, parameters, context, feedback):
96104
fields.append(sfield)
97105

98106
total = 100.0 / totalFeatureCount
99-
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fields, layers[0].wkbType(),
100-
layers[0].crs(), context)
107+
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
108+
fields, layers[0].wkbType(), layers[0].crs())
101109

102110
featureCount = 0
103111
for layer in layers:
104112
for feature in layer.getFeatures():
113+
if feedback.isCanceled():
114+
break
115+
105116
sattributes = feature.attributes()
106117
dattributes = []
107118
for dindex, dfield in enumerate(fields):
@@ -123,8 +134,8 @@ def processAlgorithm(self, parameters, context, feedback):
123134
dattributes.append(dattribute)
124135

125136
feature.setAttributes(dattributes)
126-
writer.addFeature(feature)
137+
sink.addFeature(feature)
127138
featureCount += 1
128139
feedback.setProgress(int(featureCount * total))
129140

130-
del writer
141+
return {self.OUTPUT: dest_id}

python/plugins/processing/algs/qgis/QGISAlgorithmProvider.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@
9898
# from .HubDistancePoints import HubDistancePoints
9999
# from .HubDistanceLines import HubDistanceLines
100100
# from .HubLines import HubLines
101-
# from .Merge import Merge
101+
from .Merge import Merge
102102
# from .GeometryConvert import GeometryConvert
103103
# from .ConcaveHull import ConcaveHull
104104
# from .RasterLayerStatistics import RasterLayerStatistics
@@ -219,7 +219,7 @@ def getAlgs(self):
219219
# DeleteDuplicateGeometries(), TextToFloat(),
220220
# ExtractByAttribute(), SelectByAttribute(),
221221
# GridLine(), Gridify(), HubDistancePoints(),
222-
# HubDistanceLines(), HubLines(), Merge(),
222+
# HubDistanceLines(), HubLines(),
223223
# GeometryConvert(), FieldsCalculator(),
224224
# SaveSelectedFeatures(), JoinAttributes(),
225225
# Explode(), FieldsPyculator(),
@@ -270,7 +270,8 @@ def getAlgs(self):
270270
DeleteColumn(),
271271
ExtentFromLayer(),
272272
ExtractByExpression(),
273-
GridPolygon()
273+
GridPolygon(),
274+
Merge()
274275
]
275276

276277
if hasPlotly:

0 commit comments

Comments
 (0)