Многие алгоритмы обработки имеют возможность сохранить вывод в виде памяти. Если запустить из панели инструментов, это работает нормально, потому что вы можете поставить галочку «Открыть выходной файл после запуска алгоритма».
Глядя на исходный код QGIS, кажется, что код для загрузки слоя памяти определен в функции Postprocessing.handleAlgorithmResults
. Функция использует доступ к alg.outputs
списку и выполняет следующие действия:
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:
# ...
Когда вы запускаете алгоритмы обработки из консоли, есть ли способ загрузить слой без доступа к этому объекту? Я могу бегать
processing.runalg("qgis:intersection", layer1, layer2, "memory:")
или даже
processing.runalg("qgis:intersection", layer1, layer2, "memory:myLayerName")
Однако я не могу найти способ получить результат.