Añadir columna de área mediante PyQGIS

El código que se encuentra a continuación, a través de algunos métodos que se encuentran en QgsDataProvider y QgsVectorLayer, permite incorporar una columna denominada ‘area’ con el respectivo valor asignado a esta geometría en un vectorial tipo polígono.

layer = iface.activeLayer()
provider = layer.dataProvider()

areas = [ feat.geometry().area() 
          for feat in layer.getFeatures() ]

field = QgsField("area", QVariant.Double)
provider.addAttributes([field])
layer.updateFields()

idx = layer.fieldNameIndex('area')

for area in areas:
    new_values = {idx : float(area)}
    provider.changeAttributeValues({areas.index(area):new_values})

En la imagen siguiente se observan los resultados de ejecución del código en la Python Console de QGIS:

area

Esta entrada fue publicada en PyQGIS, QGIS, SIG, Software Libre. Guarda el enlace permanente.

4 respuestas a Añadir columna de área mediante PyQGIS

  1. Entiendo que si se edita la geometría de la capa no se actualizará automáticamente el area. ¿Usar disparador? ¿O si se detecta edición que recalcule siempre?

  2. Creo que no me he explicado. Me refiero más a bien a no tener que volver a ejecutar el script si se edita la geometría, que se actualice el area automáticamente.

  3. Javier Diez dijo:

    Si la capa tiene dos elementos con el mismo área al segundo de ellos no le asigna superficie debido a que se asigna el valor en función del área y no del id.

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s