Determinación de Áreas no Superpuestas de Múltiples Capas con QGIS y PyQGIS - Tutorial

NonOverlappingAreasQGIS.PNG

Los procesos geoespaciales están presentes en la mayoría de las actividades e investigación de las personas debido a lo cual es importante optimizar el tiempo involucrado por los especialistas y mejorar la calidad de los análisis espaciales. PyQGIS es la extensión de Python en QGIS, este marco de trabajo permite el manejo de las herramientas de QGIS junto con las funciones de Python e incluso paquetes externos de Python mejorando la velocidad y la calidad de nuestro geoproceso y representación espacial.

Este tutorial muestra el procedimiento espacial para determinar las áreas no superpuestas en una región de interés con respecto a 7 capas diferentes. Este tutorial cubre los siguientes puntos como scripts en Python:

  • Añadido y representación de las capas y la región de interés
  • Corte de todas las capas a la región de interés
  • Corrección topológica con Grass GIS
  • Disolver las capas cortadas
  • Determinar las zonas no superpuestass

 

Tutorial

 

Código

El siguiente es el código usado por partes.

Parte 1

import os

mainLayerFolder = 'C:\Users\Saul\Documents\Ih_AnalisisdeAreasNoSuperpuestasporMultiplesCapasconQGISyPyQGIS\Shp'

listLayers = []
for item in os.listdir(mainLayerFolder + '/Layers/'):
    if item[-3:]=='shp':
        listLayers.append(item)

dictLayers = {}

for layer in listLayers:
    dictLayers[layer[:-4]] = iface.addVectorLayer(mainLayerFolder + '\\Layers\\' + layer , layer[:-4] , "ogr")
    
areaOfInterest = iface.addVectorLayer(mainLayerFolder + '\\AreaofInterest\\AreaOfInterest.shp' ,'AreaOfInterest',"ogr")

Parte 2

from processing.tools import *

dictLayersClip = {}

for layer in dictLayers.keys():
    general.runalg("qgis:clip",\
                        dictLayers[layer],\
                        areaOfInterest,\
                        mainLayerFolder + '\\LayersClip\\'+layer+'_Clip.shp')
    dictLayersClip[layer+'_Clip'] = iface.addVectorLayer(mainLayerFolder + '\\LayersClip\\'+layer+'_Clip.shp',layer+'_Clip',"ogr")

Parte 3

from processing.tools import *

dictLayersClipClean = {}

for layer in dictLayersClip.keys():
    
    if dictLayersClip[layer].featureCount() > 0:
        extent = dictLayersClip[layer].extent()
        xmin = extent.xMinimum()
        xmax = extent.xMaximum()
        ymin = extent.yMinimum()
        ymax = extent.yMaximum()
    
        outputLayer = mainLayerFolder + '\\LayersClipClean\\'+layer+'_Clean.shp'
        general.runalg("grass7:v.clean",\
                            dictLayersClip[layer],\
                            0,\
                            0.1,\
                            "%f , %f, %f, %f "% (xmin , xmax , ymin , ymax),\
                            -1.0,\
                            0.0001,\
                            outputLayer,\
                            None\
                            )
                            
        dictLayersClipClean[layer+'_Clean'] = iface.addVectorLayer(outputLayer , layer+'_Clean', "ogr")

Parte 4

from processing.tools import *

dictLayersClipCleanDiss = {}

for layer in dictLayersClipClean.keys():
    outputLayer = mainLayerFolder + '\\LayersClipCleanDiss\\'+layer+'_Diss.shp'
    print(outputLayer)
    general.runalg("qgis:dissolve",\
                        #areaOfInterest,\
                        dictLayersClipClean[layer],\
                        True,\
                        None,
                        outputLayer)
                        
    dictLayersClipCleanDiss[layer+'_Diss'] = iface.addVectorLayer(outputLayer , layer+'_Diss' , "ogr")

Parte 5

from processing.tools import *

dictInter = {}

layerList = dictLayersClipCleanDiss.keys()

for item in range(len(layerList)):
    outputFolder = mainLayerFolder + '\\LayersClipCleanDissInter\\'
    #outputLayer = outputFolder + 'Step' + str(item) + '_______' + layerList[item] + '_Inter.shp'
    outputLayer = outputFolder + 'Step' + str(item) + '.shp'
    print(outputLayer)
    
    if item == 0:
        general.runalg("qgis:difference",\
                        areaOfInterest,\
                        dictLayersClipCleanDiss[layerList[item]],\
                        True,\
                        outputLayer)
       
                        
    elif item > 0:
        general.runalg("qgis:difference",\
                        dictInter['Step' + str(item-1)],\
                        dictLayersClipCleanDiss[layerList[item]],\
                        True,\
                        outputLayer)
    
    dictInter['Step' + str(item)]=iface.addVectorLayer(outputLayer , 'Step' + str(item), "ogr")

 

Datos de ingreso

Puede descargar los datos de entrada para este tutorial de este enlace:

https://www.hatarilabs.com/s/Ih_AnalisisdeAreasNoSuperpuestasporMultiplesCapasconQGISyPyQGIS-7bpf.rar

Smiley face

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

Posted on January 26, 2018 and filed under TutorialQGIS, TutorialPython.