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