Ist es möglich, die Ebene von einem GRASS-Tool zurückzugeben, ohne sie in QGIS auf der Festplatte zu speichern?

Dec 18 2020

Ich verwende einige GRASS-Tools in der QGIS Python Console. Alle von mir verwendeten Tools geben ein Wörterbuch mit einem Schlüssel und einem Wert zurück, der einen Zeichenfolgenpfad enthält, wie folgt : {"output": "file/path"}. Hier gibt es eine Antwort . Es wird empfohlen, diese Zeichenfolge in zu verwenden QgsVectorLayer. Das Schreiben / Lesen einer Datei auf / von der Festplatte ist jedoch zeitaufwändig.

Ich habe es versucht processing.runAndLoadResultsund processing.run. Beide fügen eine Ebene hinzu. Bevor sie die Ebene hinzufügen, speichern sie die Ebene auf der Festplatte und fügen sie dann hinzu.

processing.run("grass7:v.buffer", {..., 'output':'TEMPORARY_OUTPUT', ...})
# returns {'output': '/tmp/.../output.gpkg'} -> file path

processing.runAndLoadResults("grass7:v.buffer", , {..., 'output':'TEMPORARY_OUTPUT', ...})
# returns {'output': '/tmp/.../output.gpkg'} -> file path

Ich frage mich, gibt es eine Möglichkeit, die zurückgegebene / hinzugefügte Ebene vom GRASS-Tool abzurufen, ohne sie auf der Festplatte zu speichern (zur Verwendung im nächsten Verarbeitungswerkzeug in einem Python-Skript)?

Antworten

3 KadirŞahbaz Dec 18 2020 at 19:08

Ich glaube nicht, dass es einen Weg gibt, ein GRASS-Tool in QGIS zu verwenden. Ich habe festgestellt, dass die von mir verwendeten GRASS-Tools immer den Dateipfad zurückgegeben haben. Die einzige Möglichkeit, eine Ebene zu erhalten, ohne sie zu speichern, bestand darin, native QGIS-Verarbeitungstools über eine processing.runMethode zu verwenden. Diese Antwort erklärt, wie es geht.

Wenn Sie die Ausgabeebene als Zwischenebene verwenden, empfehle ich Ihnen, ein gleichwertiges natives (QGIS) Tool (falls vorhanden) zu verwenden, über processing.rundas die QgsVectorLayerInstanz zurückgegeben wird, ohne sie auf der Festplatte zu speichern. Andernfalls empfehle ich Ihnen, ein Tool mit auszuführen processing.runund dann QgsVectorLayerdie Ausgabe zum Speicher hinzuzufügen.