Saturday, 5 December 2015

qgis - How to connect input parameter to the field calculator algorithm within the graphical modeler?


I am building a model in the graphical modeler of QGIS 2.8.1 Wien and I would like to give the option to the user to enter a number in the model with which a selected field will be multiplied, but I cannot figure out how to connect the parameter for the user input to the field calculator algorithm.


Any ideas on this?



Answer



Instead of using the Field Calculator tool, a possible workaround is to create a custom script which allows the user to choose an attribute field and update it with a value they enter.


To do this, go to Processing Toolbox > Scripts > Tools > Create new script and copy the following:


##Update field by number=name

##Layer=vector
##Fields=Field Layer
##Number=number 0

from qgis.core import QgsExpression

layer = processing.getObject(Layer)
layer.startEditing()

idx = layer.fieldNameIndex(Fields)

n = str(Number)
i = str(Fields)
e = QgsExpression(n + '*' + i)
e.prepare(layer.pendingFields())

for f in layer.getFeatures():
f[idx] = e.evaluate(f)
layer.updateFeature(f)

layer.commitChanges()


Save the script into C:/Users/You/.qgis2/processing/scripts. You will need 3 parameters:



  • Layer - Vector layer

  • Field - Table field

  • Number - Number


Then add the script from the list of algorithms to your model. Use the Parent algorithms option if you want this script to run after a specific tool (i.e. at the end of the model).:


Model





Did a simple test where I want to update the id field by entering 5 in the Number parameter. Here is the attribute table initially:


Original attributes


Setting and running the model:


Setting model


Result:


Result


No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...