Hoy en día QGIS, se encuentra entre los Sistemas de Información Geográfica de código abierto más completo qué existe. No obstante, puede ocurrir que durante el uso diario de este SIG nos surja la necesidad crear una nueva funcionalidad, optimizar un trabajo repetitivo e incorporar una nueva función que usamos con frecuencia. Para poder solucionar este tipo de cuestiones, QGIS dispone de su propia API de programación en Python conocida como PyQGIS.
Con PyQGIS, podremos crear desde pequeños fragmentos de código de Python hasta desarrollar complementos (plugins) avanzados y compartirlos con el resto de los usuarios de QGIS.
PyQGIS y Python
QGIS está desarrollado en C++, pero desde la versión 0.9 incorpora soporte para Python. Este hecho fue sin duda todo un acierto y trajo consigo un aumento de contribuciones al código proyecto.
Python es uno de los lenguajes de programación más accesibles para aquellas personas que comienzan en el ámbito de la programación. A nivel profesional es muy popular. Reflejo de este «éxito» puede apreciarse en la posición que ocupa en la encuesta anual del foro de desarrolladores Stack Overflow.

Aunque la curva de aprendizaje de Python es muy rápida, hay que tener en cuenta que para poder desarrollar con QGIS es necesario saber manejar su API que es la que nos dará acceso a todas las funcionalidades del programa.
Info
Si estás interesado profundizar más en este tema puede consultar el temario del Curso PyQGIS: Programación de Scripts en Python para QGIS o nuestros másteres GIS, en especial el Máster SIG de Código Abierto.
Cuando comenzamos a buscar información sobre las clases de QGIS podemos encontrar duplicidad en los recursos de la API. Esto se debe a que contamos con una página para la API de QGIS de C++ y otra para su versión «pythónica». Ambas pueden sernos de utilidad igualmente.
Nos será de gran ayuda saber que Python es un lenguaje orientado a objetos. En este paradigma de programación trabajamos con clases que corresponden con modelos que definen un conjunto de atributos y métodos apropiados para operar con objetos.
Si nos centramos en la API de QGIS, tenemos por ejemplo una clase denominada QgsVectorLayer que nos va a permitir crear, o mejor dicho instanciar, un objeto de tipo vector y trabajar con él.
En la documentación de la clase se describen los atributos que va a tener el objeto y sus métodos, que corresponden con las funciones o capacidades del objeto.

Usando la consola de Python integrada de QGIS, podemos instanciar un objeto de tipo QgsVectorLayer en una variable indicando sus parámetros y posteriormente añadirlo a nuestro proyecto.
layerGranada = QgsVectorLayer(r"C:\pyqgis\barrios_granada_dera.shp", "granada", "ogr")
QgsProject.instance().addMapLayer(layerGranada)
En la documentación de la API podemos ver los parámetros necesarios para crear el objeto:
- path: Ruta o URL del archivo.
- baseName: Nombre de la capa en la leyenda.
- providerLib: Tipo de proveedor de datos ej. «ogc», «memory», «postgres»…
- options: Opciones de capa.
Es importante fijarse en el tipo de valor admite cada parámetro. Para el objeto QgsVectorLayer, los tres primeros requieren una cadena de texto, mientras que para option se espera un objeto.

Todos los métodos de la clase están listados en la documentación de referencia y pueden ser llamados desde la consola de Python. Si queremos obtener la extensión del objeto QGSVectorLayer que acabamos de crear usaríamos el método extend(). Con el método sourceCrs() sabemos el sistema coordenadas de referencia de la capa y con featureCount() recibimos el número de entidades geométricas.

¿Dónde podemos usar Python en QGIS?
En el Libro de Recetas para Desarrolladores de de PyQGIS se encuentra un listado de dónde podemos usar Python dentro de QGIS.
- Ejecución de comandos en la consola de Python
- Eventos cuando se inicie QGIS
- Macros y acciones
- Algoritmos de procesamiento
- Funciones para expresiones
- Crear aplicaciones personalizadas basadas en la API de QGIS
- Plugins
Ejecución de comandos en la consola de Python y creación de scripts
QGIS incorpora una consola Python pensada para ejecutar código línea a línea de forma interactiva. La consola es usada también como inspector de objetos o para presentar mensajes cuando usamos la función print.
La consola tiene varias herramientas (limpiar, ayuda, abrir editor…) y cuenta la función de autocompletado y resaltado de sintaxis para las APIs usadas en QGIS.

A pesar de la utilidad de la consola de Python, es más interesante guardar el código en un archivo con extensión *.py y poder modificarlo o ejecutarlo cuando sea necesario. Es por esto por lo que la consola se completa con un editor de archivos que incorpora funcionalidades de inspección, comentado, autocompletado o verificación de sintaxis.
Con el editor podemos crear scripts que nos permitirían entre otras muchas cosas:
- Modificar la interfaz, añadir o eliminar menús, crear nuevos botones en la barra de herramientas…
- Trabajar con proyectos.
- Crear, cargar y manejar capas, manejar simbología, consultar atributos.
- Cargar bibliotecas externas de Python.

Eventos cuando se inicie QGIS
Si queremos que parte de nuestro código se ejecute al iniciar QGIS podemos guardarlo con el nombre startup.py. El archivo debe ser ubicado en el directorio de inicio de Python del usuario según el sistema operativo. Puede consultarse la ruta en la documentación.
Esta opción puede barajarse para cargar personalizaciones de la interfaz, o si queremos tener disponibles funcionalidades propias en la barra de herramientas. Puedes encontrar más información sobre este tema en la entrada Personalización de QGIS con Python
Acciones y macros
Con Python es posible definir procesos relacionados con los flujos de trabajo de los proyectos o de las capas. En el caso de los proyectos, estos procesos se denominan macros y podemos configurarlos desde el menú Proyecto > Propiedades.
Las funciones para proyectos se ejecutan cuando el proyecto se abre, se guarda o es cerrado. Un ejercicio sencillo obtenido del repositorio de Víctor Olaya para trabajar las macros puede ser añadir un mensaje de aviso tanto al abrir como al cerrar nuestro proyecto.
from qgis.utils import iface
from qgis.core import (QgsExpressionContextUtils,Qgis)
def openProject():
user = QgsExpressionContextUtils.globalScope().variable('user_full_name')
iface.messageBar().pushMessage("Hola!!!","Bienvenido {}".format(user),Qgis.Info,10)
def saveProject():
pass
def closeProject():
pass
Las acciones en QGIS brindan una manera rápida y fácil de activar un comportamiento personalizado en respuesta a la acción de un usuario sobre capas. Una vez definidas son activadas desde la herramienta Acciones, desde el formulario de identificación o desde la barra de atributos.
QGIS incorpora un conjunto de acciones que podemos añadir de forma rápida. Entre estas se encuentran varias acciones de tipo Python (obtener ID, ver coordenadas, duplicar selección…)

Algoritmos de procesamiento
Todos los algoritmos de procesamientos integrados en QGIS pueden ser llamados mediante PyQGIS. Estos desarrollos más o menos complejos se incorporan a la Caja de Procesos y tienen los beneficios de poder usar la interfaz estandarizadas de procesos para definir las entidades de entradas y salidas de datos.
Si lo necesitamos, estos desarrollos se pueden integrar en el modelador gráfico de QGIS o ejecutarse como un trabajo por lotes con múltiples entradas.
Funciones para expresiones en QGIS con Phyton usando PyQGIS
Las expresiones en QGIS tienen mucho poder y se utilizan en muchas funciones básicas como selección, cálculo de valores de campo, estilo, etiquetado, etc. QGIS también tiene soporte para expresiones definidas por el usuario usando PyQGIS. Con un poco de programación en Python, puede definir sus propias funciones y usarlas cuando sean necesarias.

En la captura superior puede apreciarse el uso de una función Python mediante expresión que obtiene todos los puntos de un tramo de de tendido eléctrico incorporado en in informe de auditoría de una empresa de distribución de energía.
Crear Plugins de QGIS con PyQGIS y Python
Gracias a Python, la API de QGIS y la librería gráfica PyQt podemos desarrollar nuestros propios complementos y aumentar más si cabe las posibilidades que nos ofrece QGIS. Para revisar el listado de complementos del proyecto solo tenemos que acceder al portal oficial de plugins.

Gracias al tipo de licencia con el que se distribuyen estos desarrollos tendremos la oportunidad de descargarlos, revisar su código y usarlo para nuevos desarrollos.
Si estás interesado profundizar más en este tema puede consultar el temario del Curso PyQGIS: Programación de Scripts en Python para QGIS o nuestro programa de Master SIG de Código abierto o nuestro Diploma en Programación y Tecnologías Geoespaciales de Código Abierto.
Antes de irte, puedes acceder a revisar el código del complemento que permite descargar desde QGIS la cartografía catastral de la Comunidad Foral de Navarra o bien el complemento GeoEASIN . Estos son ejemplos de desarrollo que desde el Área de SIG y Desarrollo podemos ofrecer a todos nuestros clientes y que puedes aprender en nuestros cursos y programas de Máster y diplomas.
¿Quieres comentarnos algo? Adelante!