En este momento estás viendo Cómo crear un campo de un shapefile en QGis con PyQGis

Cómo crear un campo de un shapefile en QGis con PyQGis

  • Categoría de la entrada:Qgis
  • Tiempo de lectura:4 minutos de lectura

¿Qué es PyQGIS?

Es la API de QGIS en Python, que nos permite automatizar tareas dentro de QGIS: desde cargar capas, realizar análisis espacial, editar atributos y geometrías, hasta crear interfaces personalizadas.


Primeros pasos:

  1. Abrir QGIS (versión 3.x).
  2. Tener un shapefile cargado o conocer la ruta del archivo .shp.
  3. Abrir la Consola de Python en QGIS:
    • Menú Complementos > Consola de Python o usar el botón de la consola {>.

Código para crear un campo con PyQGIS:

1️⃣ Cargar la capa shapefile

from PyQt5.QtCore import QVariant #para definir tipo de campo
from qgis.core import *

shp = r"C:\xxxx\xxxxx\Water.shp" # Colocar la ruta local donde se encuentre el shp
layer = QgsVectorLayer(shp,'water','ogr')

2️⃣ Crear campo

campos = layer.dataProvider()
campos.addAttributes([QgsField('AreaHa',QVariant.Double)])

print("Campos creados correctamente!!")

3️⃣ Hacer cálculos e imprimir resultado

expression = QgsExpression('$area/10000')
context = QgsExpressionContext()
context.appendScopes(QgsExpressionContextUtils.globalProjectLayerScopes(layer))

with edit(layer):
    for i in layer.getFeatures():
        context.setFeature(i)
        i['AreaHa'] = expression.evaluate(context)
        layer.updateFeature(i)

print("Area calculada correctamente!!")

total_area = 0

for water in layer.getFeatures():
    area = water['AreaHa']
    total_area += area

print("El area total de los cuerpos de agua es: ", str(total_area), " hectareas")

Código completo:

# Creacion de campo y calculo de sus valores
# Field creation and calculation of their values

from PyQt5.QtCore import QVariant #para definir tipo de campo
from qgis.core import  *

shp = r"C:\xxxx\xxxxx\Water.shp" # Colocar la ruta local donde se encuentre el shp
layer = QgsVectorLayer(shp,'water','ogr')

campos = layer.dataProvider()
campos.addAttributes([QgsField('AreaHa',QVariant.Double)])

print("Campos creados correctamente!!")

expression = QgsExpression('$area/10000')
context = QgsExpressionContext()
context.appendScopes(QgsExpressionContextUtils.globalProjectLayerScopes(layer))

with edit(layer):
    for i in layer.getFeatures():
        context.setFeature(i)
        i['AreaHa'] = expression.evaluate(context)
        layer.updateFeature(i)

print("Area calculada correctamente!!")

total_area = 0

for water in layer.getFeatures():
    area = water['AreaHa']
    total_area += area

print("El area total de los cuerpos de agua es: ", str(total_area), " hectareas")

Paso a paso para ejecutarlo: