banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 Thu 01 July 2021 10:58

mus_AB
Juste Inscrit !
Date d'inscription: 20 Mar 2020
Messages: 1

QGIS: Erreur script python avec qgis processing

Bonjour,
Je travaille actuellement sr une tache ou je suis appelé à automatiser un processus sur qgis. J'essaie d'exploit la boite à outils de qgis notamment la biblithèque 'processing'
- Indépendamment les scripts fonctionnent parfaitement mais dès j'introduit la boucle ' while' j'ai une erreur.
Ci-joint le script et l'erreur retournée.

Merci d'avance pour votre aide.

Voici mon code :

# -*- coding: utf-8 -*-
"""

@author: Mustapha ABROUS
musabrous@texte-a-enlever.gmail.com
"""
"""
1- boucle d'indentifier les tronçons dans un dossier(fichier shp gpkg)
    2- création des input et output
    3- soustration d'un tronçon du tracé
    4- creation d'un buffer pour le tronçon
    5- création d'un buffer pour le fichier résultant de la soustraction
    6- vérification d'intersection entre le buffer du tronçon et le bufffer du fichier issu de la soustraction
    7- ajustement de la largeur du buffer afin d'éviter l'intersection

"""

#importing library
import os
import processing
from osgeo import ogr

#setting folders

TronconInputdirectory = 'C:/local_file/RHIN_LIBRE_PROJ/py_BAS/02-resultat/tronçons/'
ProfilOutputdirectory = 'C:/local_file/RHIN_LIBRE_PROJ/py_BAS/02-resultat/profil/'
#demfile= 'C:/local_file/RHIN_LIBRE_PROJ/MNT/Affluents_Sauer_RhinNord_MNT_1m_L93_LiDAR_2018.gpkg'
trace='C:/local_file/RHIN_LIBRE_PROJ/py_BAS/01-donnée/trace/trace.gpkg'
traceWithoutTroncondirectory='C:/local_file/RHIN_LIBRE_PROJ/py_BAS/02-resultat/traceWithoutTronçon/'
BufferWithoutTronconOutputdirectory= 'C:/local_file/RHIN_LIBRE_PROJ/py_BAS/02-resultat/buffer/'
bufferTronconOutputdirectory='C:/local_file/RHIN_LIBRE_PROJ/py_BAS/02-resultat/bufferTroncon/'

## looking for gpkg et shp file

for filename in os.listdir(TronconInputdirectory):
       
    if filename.endswith(".gpkg") or filename.endswith(".shp"):
#        print(filename)

        troncon = (os.path.join(TronconInputdirectory, filename))
        #set ouput name
        name = filename
#        print("name= ",name)
        traceWithoutTroncon= traceWithoutTroncondirectory+'traceWithout'+(name)
        BufferTraceWithoutTroncon = BufferWithoutTronconOutputdirectory+'Buffer_without'+(name)
        bufferTroncon= bufferTronconOutputdirectory +'bufffer_'+ (name)

        intersection = False #init intersection
        largeur = 1 # setting fist largeur value
       
        while intersection is False :
            ########## buffering tronçon
            processing.run("native:buffer",
            {'INPUT':troncon,
            'DISTANCE': largeur,
            'SEGMENTS':5,
            'END_CAP_STYLE':0,
            'JOIN_STYLE':0,
            'MITER_LIMIT':1,
            'DISSOLVE':False,
            'OUTPUT':bufferTroncon})
           
            ##########removing tronçon from tracé
            processing.run("native:difference",
            {'INPUT':trace,
            'OVERLAY':troncon,
            'OUTPUT':traceWithoutTroncon})
           
            ##########buffering traceWithoutTroncon
            processing.run("native:buffer",
            {'INPUT':traceWithoutTroncon,
            'DISTANCE': largeur,
            'SEGMENTS':5,
            'END_CAP_STYLE':0,
            'JOIN_STYLE':0,
            'MITER_LIMIT':1,
            'DISSOLVE':False,
            'OUTPUT':BufferTraceWithoutTroncon})
           
            driver  = ogr.GetDriverByName("gpkg") #new
            srcShp1 = driver.Open(BufferTraceWithoutTroncon)#new
            srcLay1 = srcShp1.GetLayer()
    #        print(srcLay1)
            for feat1 in srcLay1:
    ##            print(feat1)
                geom1 = feat1.GetGeometryRef()
    #            print(geom1)
               
            driver  = ogr.GetDriverByName("gpkg") #new
            srcShp2 = driver.Open(bufferTroncon)#new
            srcLay2 = srcShp2.GetLayer()
    #        print(srcLay2)
            for feat2 in srcLay2:
    #            print(feat2)
                geom2 = feat2.GetGeometryRef()
    #            print(geom2)
            intersection = geom2.Intersects(geom1)
            if intersection is False:
                print("No")
                largeur= largeur+1
            else:
                print("no")

Voici l'erreur que j'obtient :

Traceback (most recent call last):
File "C:PROGRA~1QGIS3~1.8appsPython37libcode.py", line 90, in runcode
  exec(code, self.locals)
File "", line 1, in
File "", line 41, in
File "C:/PROGRA~1/QGIS3~1.8/apps/qgis/./python/pluginsprocessingtoolsgeneral.py", line 106, in run
  return Processing.runAlgorithm(algOrName, parameters, onFinish, feedback, context)
File "C:/PROGRA~1/QGIS3~1.8/apps/qgis/./python/pluginsprocessingcoreProcessing.py", line 181, in runAlgorithm
  raise QgsProcessingException(msg)

Merci encore pour votre aide !

Hors ligne

 

Pied de page des forums

Powered by FluxBB