PyQGIS para novatos: primeros pasos con python en QGIS

En esta entrada para novatos te enseñamos a trabajar con PyQGIS desde cero.

¿Qué es PyQGIS?

PyQGIS es la librería de QGIS para ejecutar código Python. A partir de la versión 0.9 en septiembre de 2007, QGIS tiene soporte para ejecutar scripts utilizando el lenguaje Python.

QGIS elige Python por ser uno de los lenguajes favoritos para scripting. Python es un lenguaje de programación para GIS orientado a objetos con el que es fácil aprender PyQGIS.

¿Qué podemos hacer con PyQGIS?

  • Podemos automatizar tareas GIS. Listar el numero de registros de las capas, realizar geoprocesamiento, añadir y borrar elementos de una capa o tabla, crear geometrías nuevas o exportar un mapa a PDF.
  • Crear complementos de QGIS (plugins) utilizando Python como lenguaje de programación. La principal ventaja de utilizar Python es la simplicidad en la distribución y un desarrollo sencillo.
  • Ejecutar aplicaciones personalizadas. Con PyQGIS podemos crear aplicaciones interactivas con funcionalidades GIS. El módulo qgis.gui trae diversos componentes visuales GUI. El widget map canvas puede ser fácilmente incorporado en la aplicación con soporte para zoom, pan y otras herramientas.

¿Qué ventajas me aporta PyQGIS?

  • Podrás generar tus propios scripts para almacenar en ellos los procesos GIS que antes hacías a mano: ahorras tiempo y ganaras precisión.
  • Generarás con facilidad inventarios,  informes y consultas sobre los contenidos GIS que manejas: tendrás registradas y actualizadas tus capas, tablas, datos, etc.
  • Pasarás de realizar pequeñas operaciones GIS a gestionar grandes volúmenes de información.

¿Cómo ejecutar el código?

Tenemos dos opciones para ejecutar código Python en QGIS:

  1. Desde el propio QGIS podemos utilizar la consola de Python que está integrada. Para ello debemos ir a complementos > Consola de python > mostrar el editor, escribir el código y ejecutar el script.
  2. Utilizar un IDE (un interprete de) como puede ser PyCharm, PyDev o Eclipse. En este caso en primer lugar debemos  importar el módulo qgis, estableciendo la ruta en la que se encuentra QGIS e iniciar la aplicación.

Añadiendo una capa vectorial mediante PyQGIS

El ejemplo más sencillo es el de añadir una capa vectorial a QGIS desde la consola de Python. Desde la propia ventana basta con escribir:

layer = QgsVectorLayer(r"C:/Temp/cities.shp","cities")
list (layer.getFeatures())

Con la primera sentencia estamos instanciando la clase QgsVectorLayer, que requiere los siguientes argumentos: path, basename y providerLib.

De este modo hemos pasado a la variable layer los datos de la capa que queremos utilizar: su nombre completo y ruta, el nombre con el que aparecerá en la TOC, y el proveedor, que para capas de tipo .shp es ogr  (por defecto).

Una vez que el programa sabe cuál es la capa, la añadimos a QGIS para visualizarla:

QgsProject.instance().addMapLayer(layer)

Con el método addMapLayer() de la clase QgsProject añadimos nuestra capa en el proyecto.

De una manera muy sencilla hemos añadido un SHP a QGIS. También podemos añadir archivos GeoPackage, CSV, GPX, conectar a WFS, bases de datos SpatiaLite, MySQL y PostGIS o rasters.

Añadir un GeoPackage en QGIS mediante PyQGIS

Paa añadir un GeoPackage a QGIS, el proceso es similar al anterior, utilizamos la clase QgsVectorLayer, pero en este caso es necesario añadir la sentencia |layername para especificar el nombre de la capa dentro del GeoPackage. Aquí mostramos un ejemplo:

gpkg_layer = QgsVectorLayer(r"C:/Temp/cities.gpkg|layername=cities", "cities", "ogr")
QgsProject.instance().addMapLayer(gpkg_layer)

Añadir todas las capas de un GeoPackage:

fileName = "sample.gpkg"
layer = QgsVectorLayer(fileName,"test","ogr")
subLayers =layer.dataProvider().subLayers()

for subLayer in subLayers:
	name = subLayer.split('!!::!!')[1]
	uri = "%s|layername=%s" % (fileName, name,)
	#Create layer
	sub_vlayer = QgsVectorLayer(uri, name, 'ogr')
	#Add layer to map
	QgsProject.instance().addMapLayer(sub_vlayer)

Añadir una capa PostGIS en QGIS a través de PyQGIS

Veamos cómo añadir un objeto geográfico o feature  (concretamente el polígono correspondiente a España) de una capa que se encuentra en PostGIS:

# - *- coding: utf-8 - *-
from qgis.core import *

#Añadiendo capas PostGIS
uri = QgsDataSourceUri()

# introducimos nombre del servidor, puerto, nombre de la base de datos, usuario y contraseña
uri.setConnection("localhost", "5432", "world", "postgres", "postgres")

# introducimos el nombre del esquema, nombre de la tabla, columna de geometría y opcionalmente un filtro con una clausula WHERE
uri.setDataSource("public", "countries", "geom", "name = 'Spain'")
layer = QgsVectorLayer(uri.uri(), "countries", "postgres")
QgsProject.instance().addMapLayer(layer)

Este es el resultado:

Recursos:

Hemos partido de los dos recursos anteriores y hemos creado un completo curso online de programación en QGIS con python. Apúntate ya!

2 comentarios en «PyQGIS para novatos: primeros pasos con python en QGIS»

  1. El recurso imprescindible es el libro de Gary Sherman «The PyQGIS Programmer’s Guide Extending QGIS 2.x with Python». El PyQGIS Developer Cookbook es muy complejo por lo general y resumido que resulta al abarcar tantos tópicos. El primero es el que te señala todos los inconvenientes y la manera de resolverlos para las diferentes plataformas donde se puede programar con PyQGIS.

Los comentarios están cerrados.