Usando il livello di memoria come input e / o output con runalg?


9

È possibile utilizzare un livello di memoria come input e / o output con runalg ?

Con runandload ottengo che funzioni:

 processing.runandload("qgis:mergevectorlayers","memory:bufferOne", "memory:bufferTwo", r"memory:merged")
 processing.runandload("qgis:dissolve", r"memory:merged", True, '', r"D:\PythonTesting\dissolved.shp")

I parametri 2 e 3 sono i livelli di input, che sono già in memoria, e il parametro 3 è il livello di output, che viene scritto in memoria e utilizzato nel seguente strumento (Dissolve). Funziona bene, ma quando provo ad usare la stessa logica con runalg , il mio livello unito in memoria non sembra essere stato creato, poiché lo strumento Dissolve non viene mai eseguito. Quanto segue, ad esempio, non funzionerebbe:

 processing.runalg("qgis:mergevectorlayers","memory:bufferOne", "memory:bufferTwo", r"memory:merged")
 processing.runandload("qgis:dissolve", r"memory:merged", True, '', r"D:\PythonTesting\datenschrott\dissolved.shp")

Posso supporre che runalg non accetti layer che sono in memoria o che non riesca ad emetterne ?


Risposte:


4

Non sono completamente sicuro del motivo per cui il tuo metodo non funziona, ma un altro metodo è invece quello di utilizzare Nonequando si utilizza in runalgquanto ciò creerà anche un output in memoria. Di seguito ho definito il primo processo come output_0e chiamato il risultato di questo come input per il secondo processo:

output_0 = processing.runalg("qgis:mergevectorlayers",["memory:bufferOne", "memory:bufferTwo"], None)
processing.runandload("qgis:dissolve", output_0['OUTPUT'], True, '', r"D:\PythonTesting\dissolved.shp")

Risultato:

Risultato


Testato su QGIS 2.16.0-Nødebo con plug-in di elaborazione v2.12.2.

Si noti che qgis:mergevectorlayers ora richiede un elenco di livelli di input.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.