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é ?

Annonce

GeoDataDays 2025

#1 Sat 13 November 2021 11:42

moinards
Juste Inscrit !
Date d'inscription: 23 Mar 2021
Messages: 6

QGIS/Python: utiliser une fonction simple (buffer) via processing

Bonjour à tous,
j'ai créé une série de fonctions avec le modeleur graphique de QGIS, et je souhaite maintenant faire tourner cet algo uniquement à partir d'un script python. Je recommence donc un script simple pour voir si une simple fonction (type buffer) peut fonctionner.

Après pas mal de recherche sur les forums, j'arrive a utiliser pyQGIS en version Standalone (exactement en suivi ceci : https://digital-geography.com/how-to-us … on-ubuntu/, et sans oublier de taper dans bash au préalable

Code:

 export PYTHONPATH=/usr/lib/python3/dist-packages/

J'ai lu que dans la majorité des forums, je peux utiliser les fonctions de QGIS via processing de cette façon

Code:

>>> processing.run(name_of_the_algorithm, parameters)

(cf ce tutoriel : https://docs.qgis.org/3.4/en/docs/user_ … nsole.html

Sauf que j'ai un message d'erreur quand je l'execute.:

Code:

AttributeError: module 'qgis.processing' has no attribute 'run'

Je ne suis donc pas sûr d'utiliser le bon processing... Une erreur de path ?

Merci de vos infos smile

Je joins mon script ci-dessous, je précise que j'ai installé qgis 3.22 et python 3.8 sur une des dernières distributions linux

Code:

import sys,os
from qgis.core import *

QgsApplication.setPrefixPath("/usr/bin/qgis", True)

qgs = QgsApplication([], False)
qgs.initQgis()

print("init done")
from qgis import processing

##MANIPULATE SHP

processing.run("native:buffer", {'INPUT': '/home/moinards/Documents/bbox.shp',
              'DISTANCE': 100.0,
              'SEGMENTS': 10,
              'DISSOLVE': True,
              'END_CAP_STYLE': 0,
              'JOIN_STYLE': 0,
              'MITER_LIMIT': 10,
              'OUTPUT': '/home/moinards/Documents/buffers.shp'})

qgs.exitQgis()

Dernière modification par moinards (Sat 13 November 2021 11:55)

Hors ligne

 

#2 Sat 13 November 2021 17:04

moinards
Juste Inscrit !
Date d'inscription: 23 Mar 2021
Messages: 6

Re: QGIS/Python: utiliser une fonction simple (buffer) via processing

Anyway, I've found a solution. I think the problem was the path of the plugins. I changed it using sys.path.append. Here is an example of my working code :

Code:

import sys
from qgis.core import *

# See https://gis.stackexchange.com/a/155852/4972 for details about the prefix 
QgsApplication.setPrefixPath('/usr', True)
qgs = QgsApplication([], False)
qgs.initQgis()

# Append the path where processing plugin can be found
sys.path.append('/usr/share/qgis/python/plugins/')

from qgis import processing
from processing.core.Processing import Processing
Processing.initialize()

layer1 = QgsVectorLayer('/home/moinards/Documents/bbox.shp', 'layer 1', 'ogr')
layer2 = QgsVectorLayer('/home/moinards/Documents/foussais_polygones.shp', 'layer 2', 'ogr')

results = {}
outputs = {}
feedback = QgsProcessingFeedback()

params = { 
    'INPUT' : layer1,
    'OVERLAY' : layer2, 
    'OUTPUT': QgsProcessing.TEMPORARY_OUTPUT
}

# See https://gis.stackexchange.com/a/276979/4972 for a list of algorithms
outputs['Tampon'] = processing.run('qgis:union', params, feedback=feedback)

params = {
            'DISSOLVE': False,
            'DISTANCE': 10,
            'END_CAP_STYLE': 0,  # Rond
            'INPUT': outputs['Tampon']['OUTPUT'],
            'JOIN_STYLE': 0,  # Rond
            'MITER_LIMIT': 2,
            'OUTPUT': '/home/moinards/Documents/tampon3.shp',
            'SEGMENTS': 5,
        }
outputs['Tampon_2'] = processing.run('native:buffer', params, feedback=feedback)

Hors ligne

 

Pied de page des forums

Copyright Association GeoRezo