viernes, 29 de septiembre de 2017

Campos múltiples con qgis:fieldcalculator de PyQGIS Proccessing

La generación múltiple de campos es posible a través de qgis:fieldcalculator de PyQGIS Processing; donde las opciones de los parámetros pueden incluirse como una plantilla en un diccionario. A continuación, se presentan cuáles son las referidas opciones en la imagen siguiente:




El código a utilizar se tiene a continuación:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import processing

layer = iface.activeLayer()

if layer.type() == QgsMapLayer.VectorLayer and layer.geometryType() == QGis.Polygon:

    param_dict = {'dict1':
                     {"INPUT_LAYER": layer,
                      "FIELD_NAME": "area_km2",
                      "FIELD_TYPE": 0,
                      "FIELD_LENGTH":20,
                      "FIELD_PRECISION":0,
                      "NEW_FIELD": True,
                      "FORMULA": '$area/1000000',
                      "OUTPUT_LAYER": None},
                  'dict2': 
                      {"INPUT_LAYER": new_layer,
                      "FIELD_NAME": "area_ha",
                      "FIELD_TYPE": 0,
                      "FIELD_LENGTH":20,
                      "FIELD_PRECISION":2,
                      "NEW_FIELD": True,
                      "FORMULA": '$area/10000',
                      "OUTPUT_LAYER": None}
                   }

    path = processing.runalg('qgis:fieldcalculator',
                             param_dict['dict1']
                            )

    new_layer = QgsVectorLayer(path['OUTPUT_LAYER'],
                               'new_layer',
                               'ogr')

    path = processing.runandload('qgis:fieldcalculator',
                                 param_dict['dict2']
                                )
    
else:
    print "layer is not polygon type"

y se va a probar con el vectorial de la imagen siguiente, donde la tabla de atributos contiene un sólo campo, para crear dos campos con el área en metros cuadrados y en hectáreas; respectivamente.


Después de ejecutado en la Python Console de QGIS se obtiene el resultado siguiente:


La nueva capa creada 'Calculated' contiene, tal como se esperaba, los campos respectivos.

No hay comentarios: