29
29
from qgis .core import (QgsField ,
30
30
QgsFeature ,
31
31
QgsApplication ,
32
- QgsProcessingUtils )
32
+ QgsProcessingUtils ,
33
+ QgsProcessingParameterFeatureSource ,
34
+ QgsProcessingParameterFeatureSink ,
35
+ QgsProcessingOutputVectorLayer )
33
36
from processing .algs .qgis .QgisAlgorithm import QgisAlgorithm
34
- from processing .core .parameters import ParameterVector
35
- from processing .core .outputs import OutputVector
36
37
37
38
38
39
class AutoincrementalField (QgisAlgorithm ):
39
40
40
41
INPUT = 'INPUT'
41
42
OUTPUT = 'OUTPUT'
42
43
44
+ def __init__ (self ):
45
+ super ().__init__ ()
46
+
47
+ self .addParameter (QgsProcessingParameterFeatureSource (self .INPUT ,
48
+ self .tr ('Input layer' )))
49
+
50
+ self .addParameter (QgsProcessingParameterFeatureSink (self .OUTPUT , self .tr ('Incremented' )))
51
+ self .addOutput (QgsProcessingOutputVectorLayer (self .OUTPUT , self .tr ('Incremented' )))
52
+
43
53
def icon (self ):
44
54
return QgsApplication .getThemeIcon ("/providerQgis.svg" )
45
55
@@ -49,34 +59,32 @@ def svgIconPath(self):
49
59
def group (self ):
50
60
return self .tr ('Vector table tools' )
51
61
52
- def __init__ (self ):
53
- super ().__init__ ()
54
- self .addParameter (ParameterVector (self .INPUT ,
55
- self .tr ('Input layer' )))
56
- self .addOutput (OutputVector (self .OUTPUT , self .tr ('Incremented' )))
57
-
58
62
def name (self ):
59
63
return 'addautoincrementalfield'
60
64
61
65
def displayName (self ):
62
66
return self .tr ('Add autoincremental field' )
63
67
64
68
def processAlgorithm (self , parameters , context , feedback ):
65
- output = self .getOutputFromName (self .OUTPUT )
66
- vlayer = \
67
- QgsProcessingUtils .mapLayerFromString (self .getParameterValue (self .INPUT ), context )
68
- fields = vlayer .fields ()
69
+ source = self .parameterAsSource (parameters , self .INPUT , context )
70
+ fields = source .fields ()
69
71
fields .append (QgsField ('AUTO' , QVariant .Int ))
70
- writer = output .getVectorWriter (fields , vlayer .wkbType (), vlayer .crs (), context )
71
- outFeat = QgsFeature ()
72
- features = QgsProcessingUtils .getFeatures (vlayer , context )
73
- total = 100.0 / QgsProcessingUtils .featureCount (vlayer , context )
74
- for current , feat in enumerate (features ):
72
+
73
+ (sink , dest_id ) = self .parameterAsSink (parameters , self .OUTPUT , context ,
74
+ fields , source .wkbType (), source .sourceCrs ())
75
+
76
+ features = source .getFeatures ()
77
+ total = 100.0 / source .featureCount ()
78
+ for current , input_feature in enumerate (features ):
79
+ if feedback .isCanceled ():
80
+ break
81
+
82
+ output_feature = input_feature
83
+ attributes = input_feature .attributes ()
84
+ attributes .append (current )
85
+ output_feature .setAttributes (attributes )
86
+
87
+ sink .addFeature (output_feature )
75
88
feedback .setProgress (int (current * total ))
76
- geom = feat .geometry ()
77
- outFeat .setGeometry (geom )
78
- attrs = feat .attributes ()
79
- attrs .append (current )
80
- outFeat .setAttributes (attrs )
81
- writer .addFeature (outFeat )
82
- del writer
89
+
90
+ return {self .OUTPUT : dest_id }
0 commit comments