Ist es möglich, die Ebene von einem GRASS-Tool zurückzugeben, ohne sie in QGIS auf der Festplatte zu speichern?
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.runAndLoadResults
und 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
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.run
Methode 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.run
das die QgsVectorLayer
Instanz zurückgegeben wird, ohne sie auf der Festplatte zu speichern. Andernfalls empfehle ich Ihnen, ein Tool mit auszuführen processing.run
und dann QgsVectorLayer
die Ausgabe zum Speicher hinzuzufügen.