• Saltar a la navegación principal
  • Saltar al contenido principal
  • Saltar al pie de página
logo web Geoinnova

Geoinnova

Consultoría y Formación en SIG y Medio Ambiente

  • Geoinnova
    • Asociación
    • Equipo
    • Visor de proyectos Geoinnova
    • Geolibrería
    • Alianzas Estratégicas
  • Consultoría
    • Consultoría y Desarrollo en Sistemas de Información Geográfica
    • Consultora Ambiental
    • Turismo sostenible
    • Planificación urbana y ordenación del territorio
    • Planes Urbanos de Actuación Municipal – PUAM
    • Geomarketing
  • Servicios
    • Planero Web
    • QElectricGIS
    • Plugins
  • Formación
    • Todos los cursos
    • Webinars
    • Máster y Diplomas
    • Cursos de ArcGIS
    • Cursos de QGIS
    • Cursos de Teledetección
    • Cursos de Medioambiente
  • Medio Ambiente
    • Consultora Ambiental
    • Estudios ambientales para proyectos de energías renovables
    • Estudios de Impacto e Integración Paisajística
    • Evaluación Ambiental Estratégica de planes y programas
    • Estudio de Impacto Ambiental para proyectos
    • Cálculo huella de carbono
    • Educación Ambiental
    • Cursos de Medioambiente
  • Coworking
  • Blog
    • SIG
    • Medio Ambiente
    • Teledetección
    • Programación y Desarrollo SIG
    • Corporativo
  • Contacto
    • Soporte de Clientes – Tickets
Programación y Desarrollo SIG

PyQGIS para la programación en QGIS con Python

12/04/2021 Deja un comentario

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.

Posición de Python dentro de los lenguajes de programación de la encuesta de Stack overflow
Posición de Python dentro de los lenguajes de programación de la encuesta de Stack Overflow 2020

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.

Ejemplo de clase de la API de QGIS
Ejemplo de clase de la API de QGIS

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.

Consola de Python de QGIS
Consola de Python de QGIS

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.

Uso de métodos de la clase QGSVectorLayer
Uso de métodos de la clase QGSVectorLayer

¿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.

Consola de Python de QGIS
Consola de Python de 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.
Editor de script de Python de QGIS
Editor de script de Python de QGIS

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…)

Listado de acciones de capa de tipo Python por defecto en QGIS
Listado de acciones de capa de tipo Python por defecto en QGIS

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.

Ejemplo de uso de PyQGIS dentro de una expresión
Ejemplo de uso de PyQGIS dentro de una expresión


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.

Portal oficial de plugins de QGIS
Portal oficial de plugins de QGIS

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.

Etiquetas: pyqgis, python, qgis

Apúntate a nuestra newsletter semanal

"*" señala los campos obligatorios

Consentimiento*
*
Este campo es un campo de validación y debe quedar sin cambios.

Información legal

Cumplimos el RGPD (Reglamenteo General de Protección de Datos) y esta en la primera información que debes saber. Responsable: Asociación Geoinnova. Finalidad: Apuntarte en nuestra base de datos para poder enviarte nuestra newsletter y cualquier otra información de interes. Legitimidad: Nos das tu consentimiento para comunicarnos contigo. Derechos: Tienes derecho a acceder, rectificar, limitar y suprimir tus datos. Para una información más ampliada entra a nuestra política de privacidad.

Artículos relacionados

Cómo documentar proyectos en QGIS con el complemento ‘Project Reports’
17/01/2023
Cómo instalar y agregar nuevas fuentes en QGIS
29/11/2022
Extraer valores ráster en QGIS
27/10/2022

Patricio Soriano

Geógrafo “Full-stack” y desarrollador web especializado en Tecnologías de Información Geográfica. Vinculado con la labor de consultoría, ha realizado diversos proyectos sobre análisis urbanístico, planes de vivienda y gestión patrimonial, así como la puesta en marcha de Sistemas de Información Geográfica corporativos para la administración pública. Dentro de los trabajos como desarrollador se encuentran el diseño de varias aplicaciones webmapping y desarrollos para QGIS (Spanish Inspire Catastral Downloader, CDAU Downloader o qgis2mapea). Autor del blog www.sigdeletras.com y organizador de Geoinquietos Córdoba. Actualmente se encuentra incorporado al equipo de desarrollo de Geoinnova en aplicaciones Open Source. Como docente lleva impartiendo cursos profesionales de SIG desde 2007 para diferentes entidades y en diferentes modalidades (tanto presencial como online). Especializándose en los últimos años en cursos de QGIS a distintos niveles.

Interacciones con los lectores

¿Quieres comentarnos algo? Adelante! Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Footer

Menú Legal

  • Aviso Legal
  • Política de privacidad
  • Política de cookies
  • Términos y condiciones

Otras páginas de interes

  • Promociones y descuentos en formación
  • Formación bonificada FUNDAE

Contacto

Calle Luis Morondo Urra nº 8 Bajo A
31006 Pamplona (Navarra)
info@geoinnova.org
+34 948 117 137

Horario de atención

Lunes a Viernes - 09:00 a 14:00 y de 16:00 a 19:00.
Fines de semana y Festivos - Exclusivamente por mail.
Horario de Verano (01 de julio al 30 de agosto): De lunes a viernes de 8 a 15h.
Entidad adherida a Confianza Online Certificado de inscripción en el Registro de huella de carbono, compensación y proyectos de absorción Logo Plazox

© 2023 · Desarrollada por Geoinnova en colaboración con OikosMSP

Gestionar el Consentimiento de las Cookies
Utilizamos tecnologías como las cookies para almacenar y/o acceder a la información del dispositivo. Lo hacemos para mejorar la experiencia de navegación y para mostrar anuncios personalizados. El consentimiento a estas tecnologías nos permitirá procesar datos como el comportamiento de navegación o las identificaciones únicas en este sitio. No consentir o retirar el consentimiento, puede afectar negativamente a ciertas características y funciones.
Funcional Siempre activo
El almacenamiento o acceso técnico es estrictamente necesario para el propósito legítimo de permitir el uso de un servicio específico explícitamente solicitado por el abonado o usuario, o con el único propósito de llevar a cabo la transmisión de una comunicación a través de una red de comunicaciones electrónicas.
Preferencias
El almacenamiento o acceso técnico es necesario para la finalidad legítima de almacenar preferencias no solicitadas por el abonado o usuario.
Estadísticas
El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos. El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos anónimos. Sin una requerimiento, el cumplimiento voluntario por parte de su proveedor de servicios de Internet, o los registros adicionales de un tercero, la información almacenada o recuperada sólo para este propósito no se puede utilizar para identificarlo.
Marketing
El almacenamiento o acceso técnico es necesario para crear perfiles de usuario para enviar publicidad, o para rastrear al usuario en un sitio web o en varios sitios web con fines de marketing similares.
Administrar opciones Gestionar los servicios Gestionar proveedores Leer más sobre estos propósitos
Preferencias
{title} {title} {title}