• 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

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

28/02/2021 3 comentarios

Hace unas semanas os enseñábamos cómo crear expresiones personalizadas con el editor de funciones de QGIS. Pues bien, hoy vamos a ver cómo automatizar procesos muy sencillos que a la larga nos permitirán ahorrar muchísimo tiempo. Vamos a añadir los archivos shp de una carpeta a nuestro proyecto de forma automática usando PyQGIS, Phyton en QGIS.

Al trabajar con Sistemas de Información Geográfica (SIG), todos nos hemos encontrado con la necesidad de aplicar un mismo proceso a múltiples capas de información. Nos encontramos ante un proceso repetitivo que puede hacernos perder bastante tiempo.

Pues bien, a través de PyQGIS, tenemos la posibilidad de conseguir que ese procedimiento repetitivo y tedioso, pueda ser programado en unas pocas líneas de código y que dediquemos nuestro preciado tiempo a otras labores más importantes.

Abrir la consola de Python en QGIS

Para acceder a la consola de Python en QGIS, simplemente debemos buscar el icono de Python (figura Python), que aparece en nuestra barra de herramientas. O bien navegar hasta la pestaña superior de “Complementos” y buscar “Consola de Python”, que aparece junto al mismo icono.

Consola de Python en QGIS
Consola de Python en QGIS

Desde la consola de Python podremos acceder al editor a través del icono

Y se nos abrirá en la parte derecha la ventana sobre la que vamos a escribir nuestras instrucciones.

Editor de Python
Editor de Python

Listar capas shp de una carpeta

Para empezar, debemos identificar la ruta de nuestra carpeta.

En este caso, vamos a crear una variable llamada p_folder y que hará referencia a la ruta completa o absoluta a nuestra carpeta.

p_folder = "E:/SHP/QGIS/"

Con la ayuda del módulo os, vamos a utilizar la función listdir() para obtener el nombre de todos los archivos de nuestra carpeta. Para ello utilizaremos la siguiente instrucción:

list_files = os.listdir(p_folder)

Guardaremos esos archivos en un objeto llamado list_files y podremos aplicar la función print() para comprobar que efectivamente nos devuelve todos los archivos.

 print(list_files)
  ['Aragon.cpg', 'Aragon.dbf', 'Aragon.prj', 'Aragon.qpj', 'Aragon.shp', 'Aragon.shx', 'ENP.cpg', 'ENP.dbf', 'ENP.prj', 'ENP.qpj', 'ENP.shp', 'ENP.shx', 'Municipios.dbf', 'Municipios.prj', 'Municipios.sbn', 'Municipios.sbx', 'Municipios.shp', 'Municipios.shx', 'Red_fluvial.cpg', 'Red_fluvial.dbf', 'Red_fluvial.prj', 'Red_fluvial.qpj', 'Red_fluvial.shp', 'Red_fluvial.shx'] 

Podemos ver como a través de la función os.listdir(), nos ha devuelto un objeto de tipo lista con todos los archivos que tenemos en nuestra carpeta. Aunque todos ellos forman parte de la estructura Shapefile, será el archivo “.shp” sobre el que tengamos que trabajar. Para ello, vamos a utilizar una serie de instrucciones muy básicas para verificar que el fichero seleccionado es de ese tipo.

Primero, vamos a definir la extensión de nuestro fichero y vamos a guardarla en un objeto llamado extensión (sin acento).

extension = ".shp"

Ahora vamos a listar todos los objetos de nuestra lista y con la ayuda de la función splitext() del módulo os. Este devuelve un objeto dónde el primer elemento corresponde al nombre base del archivo [0] y el segundo corresponde a la extensión [1]. Seleccionamos el segundo y comprobamos que efectivamente es igual a la extensión definida.

 for f in list_files:
     if os.path.splitext(f)[1] == extension:
         print(f) 

Ahora ya sabemos que nuestro archivo tiene por extensión “shp” y ya podemos crear la ruta completa al mismo. Para ello, simplemente vamos a crear una nueva variable llamada abs_path concatenando la ruta a la carpeta y el nombre base completo de nuestro archivo. Además, vamos a devolver por pantalla la ruta.

 abs_path = p_folder+f
         print(abs_path) 

¿Cómo añadir un SHP a la interfaz de PyQGIS?

Tras haber identificado los archivos que queremos añadir a nuestra interfaz, ya tenemos todo listo para poder incorporar esos archivos a la vista de QGIS. Para ello, debemos utilizar el método addVectorLayer de la clase QgisInterface. Esta requiere tres parámetros:

  1. Ruta al archivo que queremos añadir
  2. Nombre del archivo (nombre con el que vamos a ver la capa en la interfaz)
  3. Proveedor de datos (para archivos con extensión “shp”, utilizaremos siempre “ogr”)

Cada uno de estos tres parámetros tiene que ser definido para añadir las distintas capas. Vamos a automatizar este proceso utilizando las variables ya tratadas hasta el momento. Para ello, vamos a utilizar la siguiente instrucción:

layer = iface.addVectorLayer(abs_path, os.path.splitext(f)[0], 'ogr')
Consola PyQGIS
Consola de Phyton de QGIS

Ya tenemos listo nuestro código. Ahora, podemos lanzar el procedimiento pulsando sobre el siguiente icono del editor.

Tras lanzar el procedimiento, podremos ver como se comprueban todos los archivos de la carpeta y, en el caso de que la extensión sea la definida, estos serán añadidos a la interfaz gráfica de QGIS de forma automática.

PyQGIS visualización de capas
Comprobación de los archivos y visualización de las capas en la interfaz.

A continuación os dejamos el código completo:

 p_folder = "E:/SHP/QGIS/"
 list_files = os.listdir(p_folder)
 print(list_files)
 extension = ".shp"
 for f in list_files:
     if os.path.splitext(f)[1] == extension:
         print(f)
         abs_path = p_folder+f
         print(abs_path)
         layer = iface.addVectorLayer(abs_path, os.path.splitext(f)[0], 'ogr') 

Aunque este procedimiento es muy simple, se plantea como base sobre la que empezar a construir desarrollos más complejos. Con unas pocas líneas más, podremos desarrollar tareas mucho más complejas que nos faciliten el día a día en el mundo gis.

Si te ha gustado este post y quieres saber más sobre funcionalidades Python en QGIS, no te pierdas nuestros cursos de: Curso PyQGIS : Programación de Scripts en Python para QGIS y Curso Python para ArcGIS y QGIS: Geoprocesos con ArcPy y PyQGIS

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

MapLibre GL JS: Crear mapa y añadir datos desde un GeoJSON
22/11/2022
Cómo trabajar con nuestra base de datos PostgreSQL usando psql
08/11/2022
DBeaver: software para la gestión de bases de datos
20/10/2022

RemOT Technologies

RemOT Technologies es una empresa colaboradora de Geoinnova, especialista en desarrollo de aplicaciones GIS para la web, cartografía y análisis espaciales automatizados. Desarrolla visores web cartográficos, aplicaciones basadas en geolocalización y plugins y personalizaciones de QGIS para resolver problemas de distintos ámbitos, como por ejemplo la gestión de parcelas o la gestión de redes. RemOT ya ha trabajado en varios proyectos de desarrollo de la mano de Geoinnova y, además, también ha participado, entre otros proyectos como en el desarrollo del Atlas Nacional de España. Ha sido reconocida como una de las 100 mejores empresas geoespaciales del mundo en el año 2019 por Geoawesomeness, una de las 50 Startup españolas de futuro por la revista Emprendedores y posee el sello Pyme Innovadora del Ministerio de Ciencia Innovación y Universidades. En la parte dedicada a formación, Lucía Martínez, Marcos Gimeno y Miquel Febrer, imparten diversos cursos en la plataforma de Geoinnova.

Interacciones con los lectores

Comentarios

  1. Esteban dice

    24/02/2022 a las 02:45

    Hola!

    Muchas gracias por el artículo. En la línea 8 del código, la variable abs_path debiera definirse como

    abs_path = p_folder+»/»+f

    De otra forma, no abrirá el archivo.

    Responder
    • jimena dice

      10/03/2022 a las 14:54

      Hola Esteban, me podrías decir cómo escribir la barra? justo estoy tratando de abrir unos archivos con este script, sin éxito,,, gracias!

      Responder
      • Carlos dice

        31/10/2022 a las 17:55

        Buenos días,

        Si utilizas Windows, en la línea 8, los usuarios de Windows deben definir la variable como:

        abs_path = p_folder + ‘\\’ + f

        Sino le faltará una barra diagonal a la dirección del archivo.

        Responder

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