Skip to content

Commit d247b21

Browse files
committed
[sextante] allow set field length and precision in Add field algorithm
1 parent dbbc988 commit d247b21

1 file changed

Lines changed: 27 additions & 15 deletions

File tree

python/plugins/sextante/algs/AddTableField.py

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,29 @@
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 *
3026
from PyQt4.QtCore import *
3127
from 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
3432
from 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

3740
class 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

Comments
 (0)