• Saltar a la navegación principal
  • Saltar al contenido principal
Geoinnova

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

  • Geoinnova
    • Quiénes somos
    • Coworking
    • Alianzas Estratégicas
    • Visor de proyectos Geoinnova
  • SIG y Desarrollo
    • Plugins QGIS
    • GeoNode
    • QElectricGIS
    • Planero Web
  • Consultoría Territorial
    • Planes de Emergencia Municipales de Protección Civil
    • Planes Urbanos de Actuación Municipal – PUAM
    • Evaluación Ambiental Estratégica de planes y programas
    • Minimización de Impacto Territorial y Declaración de Situación Individualizada en suelo no urbanizable
    • Turismo sostenible
  • Consultoría Ambiental
    • Trámites de Economía Circular
    • Prevención y gestión ambiental
    • Responsabilidad social corporativa
    • Estrategia de sostenibilidad
  • Formación
    • Todos los cursos
    • Formación para empresas
    • Máster y Diplomas
    • Cursos de QGIS Online Certificados
    • Cursos de programación, desarrollo SIG y geoservicios
    • Cursos de Teledetección
    • Cursos de Giswater
    • Cursos de SIG con ArcGIS
    • Cursos de Medio Ambiente
    • Campus
  • Divulgación
    • Blog
    • Tertulia Territorio Geoinnova
    • TFMs y otro trabajos de alumnos
    • Noticias
    • Webinars
    • Geolibrería
  • Contacto
    • Soporte – Tickets
Programación y Desarrollo SIG APÚNTATE
SIG

Agrupando capas de la BTN25 con PyQGIS

18/05/2018 2 comentarios

La Base Topográfica Nacional 1:25000, más conocida como BTN25, es algo así como nuestro mapa de mapas, es la fuente principal de la cartografía MTN25 que forma el mejor y más completo conjunto de datos geográficos vectoriales de España. No voy a entrar en detalle sobre la información pero si tienes curiosidad puedes echarle un vistazo a esta entrada de nuestro blog: La nueva Base Topográfica Nacional BTN25.

BTN25El caso es que el ser un conjunto de datos tan completo hace que su distribución y manipulación pueda ser tediosa debido a la ingente cantidad de información que contiene. En este sentido hay que tener en cuenta que:

  1. La unidad de descarga es un archivo ZIP por cada hoja MTN25
  2. Contiene hasta 88 capas de información geográfica

En resumen, que el acceso a la BTN25 se hace por hoja MTN25 y que dentro de cada hoja encontraremos muchas capas vectoriales. Si vamos a trabajar dentro de una de esas hojas no hay problemas. Lo complicado viene cuando necesitamos más de una. Por ejemplo, si necesitamos información sobre la CCAA de Aragón nos enfrentamos a 431 de esas hojas.

La descarga de información no es un problema, podemos usar al aplicación java que el IGN facilita y descargar masivamente toda la información que necesitemos. Eso sí, una vez descargada nos enfrentamos a múltiples carpetas, cada una albergando información sobre una hoja.

Esto me ha ocurrido recientemente. ¿Qué hice? Crear un script en PyQGIS para:

  1. Recorrer la estructura de carpetas
  2. Filtrar ficheros por nombre y extensión
  3. Aplicar una función de geoproceso para agrupar la información que me interesaba

#Importación de módulos

import os, fnmatch, processing

path = ‘RutaCarpetaDatos’

#Extensión de los ficheros shapefile

pattern = ‘.shp’

#Patrón para identificar capas. Esto responde al nombre de la capa que queremos agrupar para todas las hojas

info = [‘*CARRETERA*’,‘*AUTO*’]

#Lista de capas que quiero combinar

listShapes = «»

#Variable para controlar si estamos accediendo a la primera hoja

first = 1

#Bucle para recorrer carpetas y listar ficheros

for root, dirs, files in os.walk(path):

for filename in files:

if filename.endswith(pattern):

for i in info:

if fnmatch.fnmatch(filename, i):

if first ==1:

listShapes = str(root+‘\\’+filename)

first += 1

else:

listShapes = listShapes+‘;’+root+‘\\’+filename

#Geoproceso para unir capas

processing.runalg(«qgis:mergevectorlayers»,listShapes,path+‘/roads.shp’)

Espero que este script os sirva para realizar este proceso con mayor facilidad, nos vemos en el siguiente post!

Autor: Marcos Rodrigues.

Etiquetas: qgis

Apúntate a nuestra newsletter semanal

"*" señala los campos obligatorios

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

Artículos relacionados

cómo-digitalizar-en-Qgis-geoinnova-sig
Cómo digitalizar en QGIS: Guía completa paso a paso
01/09/2026
Qfield-nueva-actualización-trabajo-de-campo-geoinnova
QField 4.2: precisión subcentimétrica y nuevas herramientas para el trabajo de campo
22/07/2026
plugins-qgis-org-nueva-web-qt6-geoinnova
La web oficial de plugins de QGIS prepara su versión 4.0.0 ¿qué cambia para desarrolladores y usuarios?
08/07/2026

Marcos Rodrigues

Interacciones con los lectores

Comentarios

  1. Alfonso dice

    19/05/2018 a las 18:12

    En primer lugar, felicidades por la herramienta, porque puede ser muy útil para gestionar información de varias hojas cartográficas, no sólo en España si no en diversidad de países.

    Tengo un caso parecido con la información del IGN de Colombia, pero no me funciona el script y no sé que estoy haciendo mal.
    Quiero obtener y mergear todas las capas de ríos de varias hojas cartográficas. Las hojas se ordenan en carpetas y dentro de cada una hay una carpeta de Hidrografía, que es la que tiene los .shp de los ríos.

    El script utilizado queda del siguiente modo:
    import os, fnmatch, processing
    path = ‘D:DATOS_PARTIDAigntopo’
    pattern=’.shp’
    info=[‘*hidr_queb_l*’]
    listShapes=»»
    first=1
    for root, dirs, files in os.walk(path):
    for filename in files:
    if filename.endswith(pattern):
    for i in info:
    if fnmatch.fnmatch(filename,i):
    if first==1:
    listShapes=str(root+’\’+filename)
    first+=1
    else:
    listShapes=listShapes+’;’+root+’\’+filename
    #Geoproceso para unir capas
    processing.runalg(«qgis:mergevectorlayers»,listShapes,path+»roads.shp»)

    ¿Observas algún error?

    Responder
    • Asociación Geoinnova dice

      21/05/2018 a las 09:10

      Hola Alfonso, gracias por el comentario,

      He revisado el código y creo que para que funcione en tu caso habría que hacer una ligera adaptación.

      El código tal cual está funciona solo si hay un solo nivel de carpetas en las que buscar la información. En tu caso esto no es así, sino que hay una carpeta intermedia llamada «Hidrografia». Existen dos soluciones, una más elegante y funcional que la otra.
      Podemos reciclar una de las funcionalidades de os.walk que permite recorrer de forma recursiva directorios (está es la ideal)
      Podemos modificar listShapes=str(root+’\’+filename) por listShapes=str(root+’\Hidrogradia\’+filename)

      Esto debería funcionar.

      Ya nos cuentas que tal te ha ido.

      Un saludo

      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 *

Geoinnova
c/ 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.

Otras páginas de interes

  • Promociones y descuentos en formación
  • Formación bonificada FUNDAE
  • Verificador y descarga de Certificados de aprovechamiento
  • Cursos certificable por QGIS.org

Legal

  • Aviso Legal
  • Política de privacidad
  • Política de seguridad
  • Política de cookies
  • Términos y condiciones
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 Certificado de conformidad con el ENS

Todo el contenido publicado desde 2009 hasta 2026 en el Blog de Geoinnova por Geoinnova y colaboradores está licenciado bajo CC BY-NC-ND 4.0
Para usos específicos, contactar con Geoinnova.

© 2026 · Desarrollada por Geoinnova

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 {vendor_count} proveedores
  • Leer más sobre estos propósitos
Personalizar
  • {title}
  • {title}
  • {title}