Pages: 1
- Sujet précédent - QGIS/Python: utiliser une fonction simple (buffer) via processing - Sujet suivant
#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 ![]()
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
Pages: 1
- Sujet précédent - QGIS/Python: utiliser une fonction simple (buffer) via processing - Sujet suivant


