2323# This will get replaced with a git SHA1 when you do a git archive
2424__revision__ = '$Format:%H$'
2525
26- from sextante .core .GeoAlgorithm import GeoAlgorithm
27- from sextante .outputs .OutputVector import OutputVector
28- from sextante .parameters .ParameterVector import ParameterVector
29- from qgis .core import *
3026from PyQt4 .QtCore import *
3127from PyQt4 .QtGui import *
32- from sextante .parameters .ParameterString import ParameterString
33- from sextante .parameters .ParameterSelection import ParameterSelection
28+
29+ from qgis .core import *
30+
31+ from sextante .core .GeoAlgorithm import GeoAlgorithm
3432from sextante .core .QGisLayers import QGisLayers
3533
34+ from sextante .parameters .ParameterVector import ParameterVector
35+ from sextante .parameters .ParameterString import ParameterString
36+ from sextante .parameters .ParameterNumber import ParameterNumber
37+ from sextante .parameters .ParameterSelection import ParameterSelection
38+ from sextante .outputs .OutputVector import OutputVector
3639
3740class AddTableField (GeoAlgorithm ):
3841
3942 OUTPUT_LAYER = "OUTPUT_LAYER"
4043 INPUT_LAYER = "INPUT_LAYER"
4144 FIELD_NAME = "FIELD_NAME"
4245 FIELD_TYPE = "FIELD_TYPE"
46+ FIELD_LENGTH = "FIELD_LENGTH"
47+ FIELD_PRECISION = "FIELD_PRECISION"
48+
4349 TYPE_NAMES = ["Integer" , "Float" , "String" ]
4450 TYPES = [QVariant .Int , QVariant .Double , QVariant .String ]
4551
@@ -51,24 +57,31 @@ class AddTableField(GeoAlgorithm):
5157 def defineCharacteristics (self ):
5258 self .name = "Add field to attributes table"
5359 self .group = "Vector table tools"
60+
5461 self .addParameter (ParameterVector (self .INPUT_LAYER , "Input layer" , ParameterVector .VECTOR_TYPE_ANY , False ))
5562 self .addParameter (ParameterString (self .FIELD_NAME , "Field name" ))
5663 self .addParameter (ParameterSelection (self .FIELD_TYPE , "Field type" , self .TYPE_NAMES ))
64+ self .addParameter (ParameterNumber (self .FIELD_LENGTH , "Field lenght" , 1 , 255 , 10 ))
65+ self .addParameter (ParameterNumber (self .FIELD_PRECISION , "Field precision" , 0 , 10 , 0 ))
5766 self .addOutput (OutputVector (self .OUTPUT_LAYER , "Output layer" ))
5867
5968 def processAlgorithm (self , progress ):
60- fieldtype = self .getParameterValue (self .FIELD_TYPE )
61- fieldname = self .getParameterValue (self .FIELD_NAME )
69+ fieldType = self .getParameterValue (self .FIELD_TYPE )
70+ fieldName = self .getParameterValue (self .FIELD_NAME )
71+ fieldLength = self .getParameterValue (self .FIELD_LENGTH )
72+ fieldPrecision = self .getParameterValue (self .FIELD_PRECISION )
6273 output = self .getOutputFromName (self .OUTPUT_LAYER )
63- vlayer = QGisLayers .getObjectFromUri (self .getParameterValue (self .INPUT_LAYER ))
64- vprovider = vlayer .dataProvider ()
65- fields = vprovider .fields ()
66- fields .append (QgsField (fieldname , self .TYPES [fieldtype ]))
67- writer = output .getVectorWriter (fields , vprovider .geometryType (), vlayer .crs () )
74+
75+ layer = QGisLayers .getObjectFromUri (self .getParameterValue (self .INPUT_LAYER ))
76+
77+ provider = layer .dataProvider ()
78+ fields = provider .fields ()
79+ fields .append (QgsField (fieldName , self .TYPES [fieldType ], "" , fieldLength , fieldPrecision ))
80+ writer = output .getVectorWriter (fields , provider .geometryType (), layer .crs ())
6881 outFeat = QgsFeature ()
6982 inGeom = QgsGeometry ()
7083 nElement = 0
71- features = QGisLayers .features (vlayer )
84+ features = QGisLayers .features (layer )
7285 nFeat = len (features )
7386 for inFeat in features :
7487 progress .setPercentage (int ((100 * nElement )/ nFeat ))
@@ -80,4 +93,3 @@ def processAlgorithm(self, progress):
8093 outFeat .setAttributes (atMap )
8194 writer .addFeature ( outFeat )
8295 del writer
83-
0 commit comments