Muitos algoritmos de processamento têm uma opção para salvar a saída como memória. Se executado a partir da caixa de ferramentas, isso funciona bem, porque você pode marcar a caixa "Abrir arquivo de saída após executar o algoritmo".
Observando o código fonte do QGIS, o código para carregar a camada de memória parece estar definido na função Postprocessing.handleAlgorithmResults
. A função usa o acesso a uma alg.outputs
lista e faz o seguinte:
for out in alg.outputs:
progress.setPercentage(100 * i / float(len(alg.outputs)))
if out.hidden or not out.open:
continue
if isinstance(out, (OutputRaster, OutputVector, OutputTable)):
try:
if out.value.startswith('memory:'):
layer = out.memoryLayer # NOTE!!
QgsMapLayerRegistry.instance().addMapLayers([layer]) # NOTE!!
else:
# ...
Quando você executa algoritmos de processamento no console, existe uma maneira de carregar a camada sem acesso a esse objeto? eu posso correr
processing.runalg("qgis:intersection", layer1, layer2, "memory:")
ou mesmo
processing.runalg("qgis:intersection", layer1, layer2, "memory:myLayerName")
No entanto, não consigo encontrar uma maneira de obter a saída resultante.