• Ir a navegación principal
  • Ir al contenido principal
  • Ir a la barra lateral primaria
  • Ir al pie de página
Logo web Geoinnova

Territorio Geoinnova - SIG y Medio Ambiente

El Blog de SIG, Territorio y Medio Ambiente

  • Web Corporativa
  • Cursos SIG
  • Cursos Medio Ambiente
  • Consultoría
  • Blog
  • Contacto
  • Inicio Blog
  • SIG
  • Programación y Desarrollo SIG
  • Teledetección
  • Medio Ambiente
  • Corporativo
Programación y Desarrollo SIG

Personalización de QGIS con Python

Ene 21, 2021 · Por Patricio Soriano Dejar un comentario

Suele haber una tendencia general a vincular el uso de Python dentro de QGIS exclusivamente con el desarrollo de complementos. Sin embargo, la explotación de este popular lenguaje dentro del SIG no se limita a la programación de plugins y puede ser usado para la personalización de QGIS.

Gracias a PyQGIS , la versión ‘pythónica» de la API de QGIS, podemos realizar pequeños desarrollos, modificar la interfaz de la aplicación, crear expresiones personalizadas o crear procesos de análisis entre otras cuestiones.

En la siguiente entrada vamos a ver cómo realizar una personalización de QGIS con Python y crear una nueva herramienta que quede integrada en la barra de botones. La funcionalidad creará un grupo o conjunto de grupos de capas con el mismo nombre de las capas seleccionadas.

QGIS ya incluye por defecto la opción de añadir un grupo de capas. Nuestra nueva opción puede parecer una funcionalidad sin mucha relevancia, ya que simplemente podemos crear el grupo y luego cambiar el nombre por defecto.

Pero si este flujo se repite, y queremos asegurarnos que el nombre los grupos sea el correcto puede ser interesante automatizarla. Esto supondrá un ahorro de tiempo y mejora en nuestra productividad.

El conocimiento profesional de la API en Python de QGIS puede llevarnos al desarrollo personalizado de esta potente herramienta de análisis geográfico dentro de entornos corporativos o empresariales. Desde el Área de SIG y Desarrollo de Geoinnova podemos ayudar a profesionales y empresas en este sentido.

Usando la Consola de Python de QGIS

Al ser Python un lenguaje interpretado, podemos ejecutar las instrucciones que creemos sin necesidad de compilar usando la consola integrada de QGIS. No es la opción ideal para la personalización de QGIS con Python, pero cabe la posibilidad de manejarla para ejecutar código usando distintas clases de su API.

La consola se abre desde la barra de herramientas o bien activándose desde el menú Complementos>Consola de Python.

El código para añadir un grupo al árbol de capas del proyecto es el siguiente.

Código Python en la consola de QGIS
Código Python en la consola de QGIS
  • QgsProject.instance() accede a la instancia del proyecto actual de QGIS.
  • layerTreeRoot() Apunta al nodo del árbol de capas del proyecto.
  • addGroup(‘grupo_capas’) creó finalmente el grupo con el nombre asignado.

La línea de código corresponde con la herramienta de QGIS «Añadir grupo». Pero como hemos comentado, nuestra intención es que el nuevo grupo tenga como nombre el de la capa que tengamos seleccionada.

Para obtener el nombre de la capa seleccionada debemos usar avanzar más en nuestro script.

Creación de variable
Creación de variable
  • iface. Para acceder a los elementos gráficos que componen la interfaz de QGIS deberíamos usar la clase QgisInterface. Al abrir QGIS se crea por defecto el objeto iface que hace a la instancia de esta clase y que se encuentra disponible para ser usado de forma rápida.
  • layerTreeView() Apunta a la ventana del árbol de capa.
  • selectedLayers() Es el método para obtener una lista de las capas seleccionadas.

En esta ocasión hemos creado una variable denominada capasSeleccionadas que almacena la lista de objetos (layers). Al llamarla desde consola nos devolverá el listado de capas seleccionadas indicando su tipo y nombre.

Consulta de capas activa desde consola
Consulta de capas activa desde consola

Almacenando el código en un script

La consola Python nos sirve para lanzar fragmentos de código y que se ejecuten de forma inmediata. Pero si queremos guardar nuestra lógica, debemos crear un archivo con extensión .py.

Abriendo el editor de la consola, agregamos más opciones a nuestras líneas de código. Ahora recorreremos el listado de capas seleccionadas y crearemos un grupo para cada una de ellas. En el caso de no tener ninguna capa seleccionada, nos devuelve un aviso por consola.

layerTree = QgsProject.instance().layerTreeRoot()

selectLayers = iface.layerTreeView().selectedLayers()

if len(selectLayers) > 0:
    for layer in selectLayers:
        layerTree.addGroup(layer.name())
else:
    print('No hay capas seleccionadas')
Script desde editor que permite la  personalización de QGIS con Python
Script desde editor que permite la personalización de QGIS con Python

Añadiendo una nueva herramienta a QGIS mediante Python

Si cerramos la sesión de QGIS y queremos usar nuestra nueva herramienta, será necesario abrir el archivo Python y ejecutarla de nuevo. Sería sin duda más interesante añadir la funcionalidad a la barra de herramientas y tenerla siempre disponible.

Una de las opciones para incorporar nuevas funcionalidades es almacenarlas en un archivo denominado startup.py y situarlo en el directorio de archivos Python de la aplicación. Los datos de este fichero son leídos cada vez que se inicia QGIS, por lo tanto cargará la nueva herramienta al inicio de la sesión.

Según el sistema operativo, la carpeta donde almacenar el archivo Python es:

  • Linux: .local/share/QGIS/QGIS3
  • Windows: AppData\Roaming\QGIS\QGIS3
  • macOS: Library/Application Support/QGIS/QGIS3

Nuestra herramienta tendrá también un icono identificativo. Para poder cargarlo, debemos almacenarlo en una ruta conocida, para el ejemplo, en una subcarpeta en la misma ubicación que startup.py.

import os
from qgis.utils import iface
from qgis.core import QgsProject
from PyQt5.QtWidgets import QAction
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QStandardPaths

def create_group_layername():
    """Añade un grupo en el árbol de capas con el nombre
    de la capa seleccionada"""
    layerTree = QgsProject.instance().layerTreeRoot()

    selectLayers = iface.layerTreeView().selectedLayers()

    if len(selectLayers) > 0:
        for layer in selectLayers:
            layerTree.addGroup(layer.name())
    else:
        iface.messageBar().pushMessage('Ups!','No hay capas seleccionadas',
        level=Qgis.Warning)

icon_name = 'group.svg'
qgis_dir = QStandardPaths.standardLocations(QStandardPaths.AppDataLocation)[0]
icon_dir = 'personaltools'
icon_path = os.path.join(qgis_dir, icon_dir, icon_name)

action = QAction(QIcon(icon_path),'Crear grupo con nombre de capa')
action.triggered.connect(create_group_layername)
iface.addToolBarIcon(action)

En esta ocasión es necesario importar determinados módulos tanto generales de Python como os que permite trabajar con archivos y carpetas, de QGIS (qgis.utils y qgis.core) y aquellos que nos dan la posibilidad de trabajar con clases de la interfaz (PyQt5).

Hemos incluido el código inicial dentro de una función llamada ‘create_group_layername’. La función se ejecutará cuando hagamos clic en el nuevo botón y queda definida usando la clase QAction.

Para terminar, creamos nuestro botón (QIcon) de herramientas con icono que se añade a la barra usando el método addToolBarIcon.

En el siguiente vídeo se puede ver el funcionamiento de la nueva herramienta.

Nueva funcionalidad en barra de herramientas de QGIS
Nueva funcionalidad en barra de herramientas de QGIS

Python y QGIS, grandes aliados

Hemos visto como con unas pocas líneas de código, cómo realizar una personalización de QGIS con Python. Las posibilidades son sin duda infinitas.

A pesar de la brevedad de código y su sencilla apariencia, debemos ser conscientes que usar Python en QGIS requiere tener ciertos conocimientos de este lenguaje. Se suma a esto la necesidad de conocer la documentación de la API de QGIS y poder con ello, sacarle el máximo provecho.

Si estáis interesados en profundizar en la aplicación de Python en QGIS podéis consultar el temario de nuestro curso de PyQGIS Programación de Scripts en Python para QGIS.

Etiquetas: pyqgis, python, qgis

Artículos relacionados

Cursos SIG y MA Asociación Geoinnova
Cursos destacados y agenda del mes de Marzo de 2021
Feb 23, 2021
Corporativo, Formación
qgis
Semivariogramas, análisis y creación de gráficos
¿Qué es un semivariogramas? Creación y análisis de gráficos
Dic 27, 2020
SIG
qgis
Semi-Automatic Classification plugin en QGIS
Usar Semi-Automatic Classification plugin en QGIS para imágenes satelitales
Dic 27, 2020
Teledetección
qgis
Patricio Soriano

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

Deja una respuesta Cancelar la respuesta

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

Barra lateral primaria

Suscríbete al boletin

    Si te apetece puedes dejarnos tu nombre para que los correos tengan un trato personalizado

    Mediante el envío de mis datos personales confirmo que he leído y acepto la política de privacidad

    RESPONSABLE: Asociación Geoinnova. FINALIDAD: envío de publicaciones, promociones e información sobre cursos y eventos. LEGITIMACIÓN: tu legítimo consentimiento. DESTINATARIOS: Active Campaign con titular Active Campaign LLC, alojada en EEUU y suscrita al EU PrivacyShield. DERECHOS: acceso, rectificación, limitación, supresión de los datos (en [email protected])y a presentar reclamación ante una autoridad de control. INFORMACIÓN ADICIONAL: Política de privacidad.

    La último

    PyGIS visualización de capas

    Añadir todos los archivos shp de una carpeta a nuestro proyecto de forma automática con PyQGIS

    Composicion_RGB_Tasselled_Cap

    Cálculo de Tasseled Cap para imágenes Sentinel-2 con R

    Cursos SIG y MA Asociación Geoinnova

    Cursos destacados y agenda del mes de Marzo de 2021

    master codigo abierto

    El 25 comienza la 1ª Edición del Máster en SIG de Código Abierto ¡Aun quedan plazas!

    potree

    Los 7 mejores visores LiDAR gratuitos

    Imagen del SIOSE de Alta Resolución. Fuente: Geoportal SIOSE.

    El nuevo SIOSE de Alta Resolución

    Atlas antiguo del mundo

    ¿Qué es un SIG, GIS o Sistema de Información Geográfica?

    Footer

    Sobre Nosotros

    Territorio Geoinnova pretende ofrecer noticias y formación sobre el medio ambiente y las tecnologías de la información geográfica con interés a dichos sectores profesionales.

    Legal

    • Nota Legal

    El blog y todo su contenido se encuentra bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported.

    Todas las categorías

    • Actualidad Ambiental (86)
    • Alimentación Saludable (17)
    • Corporativo (123)
    • Formación (81)
    • Geolibrería (40)
    • Medio Ambiente (951)
    • Patrocinado (12)
    • Programación y Desarrollo SIG (16)
    • SIG (491)
    • Tecnología (70)
    • Teledetección (24)

    © 2021 · Desarrollada por Juan María Arenas - OikosMSP