• 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

Personalización de QGIS con Python

21/01/2021 Deja 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

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}