É possível obter a camada retornada por uma ferramenta GRASS sem salvá-la no disco no QGIS?

Dec 18 2020

Eu uso algumas ferramentas GRASS no console QGIS Python. Todas as ferramentas que eu uso retornar um dicionário com uma chave e um valor que contém string path, como este: {"output": "file/path"}. Existe uma resposta aqui . Sugere usar essa corda em QgsVectorLayer. Mas escrever / ler um arquivo de / para o disco consome muito tempo.

Eu tentei processing.runAndLoadResultse processing.run. Ambos adicionam uma camada. Mas antes de adicionar a camada, eles salvam a camada no disco e a adicionam.

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

Eu me pergunto, há uma maneira de obter a camada retornada / adicionada pela ferramenta GRASS sem salvar no disco (para usar na próxima ferramenta de processamento em um script Python)?

Respostas

3 KadirŞahbaz Dec 18 2020 at 19:08

Não acho que haja uma maneira de usar uma ferramenta GRASS no QGIS. Observei que as ferramentas GRASS que eu usava sempre retornavam o caminho do arquivo. A única maneira que consegui obter para obter a camada sem salvá-la foi usando as ferramentas de processamento nativas do QGIS via processing.runmétodo. Esta resposta explica como fazer.

Se você usar a camada de saída como camada intermediária, recomendo usar a ferramenta nativa equivalente (QGIS) (se existir) por meio da processing.runqual retorna a QgsVectorLayerinstância sem salvá-la no disco. Caso contrário, sugiro que você execute uma ferramenta usando processing.rune, em seguida, use QgsVectorLayerpara adicionar a saída à memória.