¿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:
- Abrir QGIS (versión 3.x).
- Tener un shapefile cargado o conocer la ruta del archivo
.shp
. - Abrir la Consola de Python en QGIS:
- Menú Complementos > Consola de Python o usar el botón de la consola
{>
.
- 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: