¿Es posible obtener la capa devuelta por una herramienta GRASS sin guardarla en el disco en QGIS?

Dec 18 2020

Utilizo algunas herramientas de GRASS en QGIS Python Console. Todas las herramientas que uso devuelven un diccionario con una clave y un valor que contiene el camino de cuerda, como esto: {"output": "file/path"}. Aquí hay una respuesta . Sugiere usar esa cadena en QgsVectorLayer. Pero escribir / leer un archivo en / desde el disco requiere mucho tiempo.

Lo intenté processing.runAndLoadResultsy processing.run. Ambos agregan una capa. Pero antes de agregar la capa, guardan la capa en el disco y luego la agregan.

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

Me pregunto, ¿hay alguna manera de obtener la capa devuelta / agregada por la herramienta GRASS sin guardarla en el disco (para usar en la siguiente herramienta de procesamiento en un script de Python)?

Respuestas

3 KadirŞahbaz Dec 18 2020 at 19:08

No creo que haya una forma de usar una herramienta GRASS en QGIS. Noté que las herramientas de GRASS que usé siempre devolvían la ruta del archivo. La única forma en que pude lograr obtener la capa sin guardarla fue usar las herramientas de procesamiento nativas de QGIS a través del processing.runmétodo. Esta respuesta explica cómo hacerlo.

Si usa la capa de salida como capa intermedia, le recomiendo que use la herramienta nativa equivalente (QGIS) (si existe) a través de la processing.runcual devuelve la QgsVectorLayerinstancia sin guardarla en el disco. De lo contrario, le sugiero que ejecute una herramienta processing.runy luego la use QgsVectorLayerpara agregar la salida a la memoria.