Mit Python auf `processing` zugreifen?


15

Ich möchte in Python außerhalb von QGIS über ein eigenständiges Skript auf die Funktion zum Auflösen von Zeilen zugreifen .

Welches Modul muss ich laden, um es nutzen zu können?

Wie kann ich zugreifen processing?

from qgis.core import *

layerInput = QgsVectorLayer('test.shp', 'test', 'ogr')

processing.runalg('qgis:explodelines', layerInput, 'temp.shp')

2
Ich denke du musst benutzen import processing.
Joseph

@Joseph Entschuldigung, dass ich nicht spezifisch bin: Ich möchte jedoch über ein eigenständiges Skript darauf zugreifen.
Uströtz

Ahh keine Sorge :). In diesem Fall entschuldige ich mich aber nicht, da ich es immer innerhalb von QGIS laufe. Hoffentlich werden andere beraten.
Joseph

Hallo @ustroetz, haben Sie es geschafft, dies von Ihrem eigenständigen Skript aus auszuführen? Ich frage, weil ich auch versuche, externe Skripte auszuführen.
Joseph

@ Joseph Nein, ich habe nicht
ustroetz

Antworten:


25

UPDATE 24.04.2018: Informationen dazu finden Sie in QGIS v3.x hier .


Für QGIS v2.x

Endlich die richtige Methode gefunden, um Verarbeitungsalgorithmen über eigenständige PyQGIS-Skripte auszuführen.

Mit dem Verarbeitungs-Plugin Version 2.2.0-2 können Sie das folgende Skript ausprobieren:

# Prepare the environment
import sys
from qgis.core import *
from PyQt4.QtGui import *
app = QApplication([])
QgsApplication.setPrefixPath("/usr", True)
QgsApplication.initQgis()

# Prepare processing framework 
sys.path.append('/home/user/.qgis2/python/plugins') # Folder where Processing is located
from processing.core.Processing import Processing
Processing.initialize()
from processing.tools import *

# Run the algorithm
layerInput = QgsVectorLayer('test.shp', 'test', 'ogr')
general.runalg('qgis:explodelines', layerInput, 'temp.shp')

# Exit applications
QgsApplication.exitQgis()
QApplication.exit()

Neuere Processing-Versionen befinden sich /usr/share/qgis/python/pluginsmöglicherweise unter, daher müssen Sie diese möglicherweise sys.path.append('/usr/share/qgis/python/plugins')entsprechend verwenden.

Ich fand das Arbeitsbeispiel in Fehler: Algorithmus nicht gefunden , was wiederum auf einer Qgis-dev-Mailinglistendiskussion basiert .


1
Das Verarbeitungs-Plugin befindet sich möglicherweise nicht auf '/home/user/.qgis2/python/plugins'. Sie können den Speicherort finden, indem Sie QGIS öffnen und plugins/Manage and install pluginszum Verarbeiten nach unten scrollen klicken. Den Installationsspeicherort finden Sie in der Beschreibung.
Mr Purple

2
Ich erhielt viele Warnungen über cannot-create-a-qpixmapmit dieser Stand - alone - Funktion , aber ich sehe, dass auch in dieser Frage gelöst gis.stackexchange.com/questions/188074/...
Herren Lila

1
Sie können das Standalone-Skript noch allgemeiner gestalten, indem Sie layerInputdie Runalg-Zeile löschen und ändern in: Ganz general.runalg(*sys.argv[1:])zu schweigen davon, dass dieses Skript die Grundlage für die parallele GIS-Verarbeitung gemäß dieser Frage sein kann: gis.stackexchange.com/questions/119961/…
Mr Lila

Ist es möglich, dasselbe Framework zu verwenden, aber PLUGINS von einem eigenständigen Python aus auszuführen (nicht in QGIS)? Ich habe die Funktion alglist () ausgeführt und kann meine in meinem QGIS installierten Plugins dort nicht sehen ...
Irene

3

Bis ich mit der generischen Arbeitsweise anfange, werde ich Ihnen eine Problemumgehung nennen.

Ich verwende das Verarbeitungs-Plugin Version 2.2.0-2 (ich empfehle Ihnen, diese Version zu verwenden), das /home/germap/.qgis2/python/plugins/auf meinem Computer installiert ist . Sie müssen diesen Ordnerpfad kennen, da Sie das Verarbeitungsmodul von dort importieren.

Da Sie den Provider ( qgis) und den Algorithmus ( explodelines) kennen, können Sie /home/germap/.qgis2/python/plugins/processing/algs/qgis/den Skriptnamen explode lines verwenden: Mit Explode.pydiesen Informationen können Sie den Algorithmus direkt in Ihr eigenständiges Python-Skript importieren.

Öffnen Sie also eine Python-Konsole und kopieren Sie das folgende Skript (ich verwende GNU / Linux, damit die Umgebungsvariablen standardmäßig festgelegt werden und ich QGIS- und PyQT4-Bibliotheken problemlos importieren kann):

# Prepare the environment
import sys
from PyQt4.QtGui import *
from qgis.core import *
app = QApplication([])
QgsApplication.setPrefixPath("/usr", True)
QgsApplication.initQgis()

# Tell Python where you will get processing from
sys.path.append('/home/germap/.qgis2/python/plugins')

# Reference the algorithm you want to run
from processing.algs.qgis.Explode import *
alg = Explode() 

# Set input and output
inLayer = QgsVectorLayer('/home/user/data/in.shp', 'input', 'ogr')
outLayer = '/home/user/data/out.shp'
alg.setParameterValue('INPUT', inLayer)
alg.setOutputValue('OUTPUT', outLayer)

# Run the algorithm
from processing.core.SilentProgress import SilentProgress
progress = SilentProgress()
alg.processAlgorithm(progress)

Wenn Sie keine Fehlermeldungen erhalten, ist das alles. Die Ausgabeebene wurde in dem von Ihnen angegebenen Ausgabepfad gespeichert ( /home/user/data/out.shp)

Hinweis: In Bezug auf eine generische Methode (z. B. das Aufrufen von Algorithmen nach Namen) habe ich einige Probleme gefunden, die ich lösen muss, bevor ich sie veröffentliche. Sobald ich es zum Laufen bekomme, werde ich es posten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.