El uso de Python en QGIS permite automatizar tareas GIS de manera eficiente. En este blog, exploraremos cómo recortar una capa de lotes utilizando una capa de búfer con la funcionalidad de procesamiento de QGIS.

Requisitos Previos

Para ejecutar este código, es necesario contar con:

  • QGIS instalado en el sistema.

  • Capas "Lotes" y "Búfer" cargadas en el proyecto de QGIS.

  • Familiaridad básica con la consola de Python en QGIS.

Código en Python para el Recorte de Lotes

El siguiente código recorta la capa de lotes utilizando la capa de búfer y guarda el resultado en un nuevo archivo shapefile.

import sys
from qgis.core import (
    QgsApplication, QgsVectorLayer, QgsProcessingFeatureSourceDefinition,
    QgsVectorFileWriter, QgsProject
)
from qgis import processing

# Verificar si se está ejecutando dentro de QGIS
try:
    from qgis.utils import iface  # Si existe, estamos dentro de QGIS
    qgs = None  # No es necesario inicializar QgsApplication
except ImportError:
    # Si no estamos en QGIS, inicializar QgsApplication
    QgsApplication.setPrefixPath("C:/Program Files/QGIS 3.28", True)  # Ajusta la ruta a tu instalación de QGIS
    qgs = QgsApplication([], False)
    qgs.initQgis()

# Definir el nombre de las capas cargadas en QGIS
lotes_layer = QgsProject.instance().mapLayersByName("Lotes")
bufer_layer = QgsProject.instance().mapLayersByName("Búfer")

if not lotes_layer or not bufer_layer:
    raise Exception("Error: Asegúrate de que las capas 'Lotes' y 'Búfer' están cargadas en QGIS.")

lotes_layer = lotes_layer[0]
bufer_layer = bufer_layer[0]

# Ejecutar el proceso de recorte y guardar como capa temporal
result = processing.run("qgis:difference", {
    'INPUT': QgsProcessingFeatureSourceDefinition(lotes_layer.id(), selectedFeaturesOnly=False),
    'OVERLAY': QgsProcessingFeatureSourceDefinition(bufer_layer.id(), selectedFeaturesOnly=False),
    'OUTPUT': 'memory:'  # Guardar en la memoria como capa temporal
})

# Agregar la capa temporal al proyecto si el resultado es válido
if "OUTPUT" in result and result["OUTPUT"]:
    temp_layer = result["OUTPUT"]
    temp_layer.setName("Lotes Recortados")
    QgsProject.instance().addMapLayer(temp_layer)
    print("Proceso finalizado. Capa temporal agregada al proyecto.")
else:
    print("Error en el procesamiento. No se generó una capa de salida.")

# Cerrar QGIS solo si fue inicializado manualmente
if qgs:
    qgs.exitQgis()

Explicación del Código

  1. Importación de Módulos: Se importan las librerías necesarias de QGIS y Python.

  2. Verificación de Entorno: Se detecta si el script se ejecuta dentro de QGIS o de forma independiente.

  3. Carga de Capas: Se buscan las capas "Lotes" y "Búfer" en el proyecto activo de QGIS.

  4. Ejecución del Recorte: Se utiliza el algoritmo qgis:difference para recortar la capa de lotes con la de búfer.

  5. Guardado del Resultado: Se almacena el resultado en un nuevo shapefile en la ruta especificada.

  6. Cierre de QGIS: Solo si fue inicializado manualmente.

Conclusión

Este método permite automatizar el proceso de recorte de capas en QGIS utilizando Python. Al integrarlo en proyectos más grandes, podemos mejorar la eficiencia en el procesamiento de datos espaciales. 🚀

¿Tienes preguntas o sugerencias? ¡Déjalas en los comentarios!