Aufruf der Clip-Funktion in pyQGIS über die Python-Konsole?

10

Gibt es eine Möglichkeit, die Clip-Funktion in QQGIS über die Python-Konsole aufzurufen? Es befindet sich unter Geoverarbeitungswerkzeuge im Vektormenü.

Toke
quelle
Ok, ich habe es behoben, indem ich zuerst die Funktion Multiparts to Singleparts verwendet habe. Dann funktioniert es.
Toke

Antworten:

10

Sicher, Sie können die Funktion aus der Verarbeitungs-Toolbox herunterladen. So verwenden Sie es: Gemäß http://docs.qgis.org/2.8/en/docs/user_manual/processing/console.html

Über die Konsole können Sie eine Liste aller verfügbaren Algorithmen abrufen, die das Wort "Clip" enthalten, indem Sie Folgendes eingeben:

import processing
processing.alglist("clip")

Dann könnten Sie herausfinden, wie Sie die am besten geeignete Funktion verwenden können mit:

processing.alghelp("qgis:clip")

Verwenden Sie dann einfach den Algorithmus in Ihrem Skript wie folgt:

processing.runalg("qgis:clip",inputlayer,overlaylayer,"output_file.shp")

Hinweis: Der Algorithmus funktioniert nur bei ausgewählten Funktionen. "

Hinweis: Der obige Code ist für 3.0+ ungültig für das Alglist-Beispiel, das Sie ausführen können:

print([a.id() for a in gsApplication.processingRegistry().algorithms() if "clip" in a.id()])

Für das Alghelp-Beispiel können Sie Folgendes tun:

processing.algorithmHelp("qgis:clip")

Für QGIS3 siehe diese Frage:

Was ist die neue Algliste und Alghelp in der QGIS 3.0-Verarbeitung?

Herr Lila
quelle
Es tut mir leid, dass ich dieses Thema wieder zum Leben erweckt habe, aber ich habe es nie zum Laufen gebracht, und jetzt brauche ich es wieder. In der Pyhton-Konsole bekomme ich die beiden Ebenen von Layer = qgis.utils.iface.activeLayer()und InputLayer = qgis.utils.iface.activeLayer(). Dann benutze ich processing.runandload("qgis:clip",InputLayer,Layer,"output_file.shp")und die neue Ebene wird dem Menü Ebenen mit dem Namen Clipped hinzugefügt . Aber die Ebene ist leer. Wenn ich diese beiden Ebenen mit der Clip-Funktion in Qgis verwende, enthält die Ausgabeebene die Zeilen aus dem Ausschnitt. Wer wer was kann falsch sein? Ich bekomme keine Fehler.
Toke
Es funktioniert, wenn ich zwei Polygone verwende, aber eine meiner Ebenen eine Linie und kein Polygon ist. Es enthält mehrere Zeilen, und ich kann diese Ebene zum Ausschneiden verwenden, wenn ich es in Qgis mache.
Toke
2
Sie müssen die Funktionen auswählen, die Sie ausschneiden möchten. Ich habe die Antwort bearbeitet, um dies widerzuspiegeln.
Herr Purple
Wie würde man das tun, ohne tatsächlich Shapefiles zu erstellen? Ich habe eine Ebene mit Hunderten von scheibenförmigen Polygonen, die ich durchlaufen möchte, wobei jede als Überlagerung für eine einzelne Ebene von Punktdaten verwendet wird. Kann ich stattdessen irgendwie nur eine Liste von QgsFeature-Objekten erhalten?
J. Taylor
Sie sollten das als separate Frage stellen
Herr Purple
5

Angenommen, Sie haben eine Ebene mit dem Namen "Overlay" und eine andere mit dem Namen "layer_to_clip" geladen.

# get the overlay layer in the console
overlay_layer = [x for x in iface.legendInterface().layers() if x.name() == 'overlay'][0]

# get the layer to clip in the console
layer_to_clip = [x for x in iface.legendInterface().layers() if x.name() == 'layer_to_clip'][0]

# run the algorithm and output the results in /tmp/output.shp

processing.runalg("qgis:clip", overlay_layer, layer_to_clip, "/tmp/output.shp")
Francisco Puga
quelle