QGIS에서 디스크에 저장하지 않고 GRASS 도구에서 반환 된 레이어를 가져올 수 있습니까?

Dec 18 2020

QGIS Python Console에서 GRASS 도구를 사용합니다. 내가 사용하는 모든 도구는 다음과 같이 문자열 경로를 포함하는 키와 값이있는 사전을 반환합니다 {"output": "file/path"}. 여기에 답이 있습니다 . 해당 문자열을 QgsVectorLayer. 그러나 디스크에서 파일을 쓰고 / 읽는 것은 시간이 많이 걸립니다.

나는 시도 processing.runAndLoadResults하고 processing.run. 둘 다 레이어를 추가합니다. 그러나 레이어를 추가하기 전에 레이어를 디스크에 저장 한 다음 추가합니다.

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

디스크에 저장하지 않고 (Python 스크립트의 다음 처리 도구에서 사용하기 위해) GRASS 도구에서 반환 / 추가 된 레이어를 가져올 수있는 방법이 있는지 궁금합니다.

답변

3 KadirŞahbaz Dec 18 2020 at 19:08

QGIS에서 GRASS 도구를 사용할 때 방법이 없다고 생각합니다. 내가 사용한 GRASS 도구는 항상 파일 경로를 반환한다는 점에 주목했습니다. 레이어를 저장하지 않고 얻을 수있는 유일한 방법은 processing.run방법을 통해 QGIS 기본 처리 도구를 사용 하는 것입니다. 이 답변 은 수행 방법을 설명합니다.

출력 레이어를 중간 레이어로 사용하는 경우 디스크에 저장하지 않고 인스턴스 processing.run를 반환 하는 동등한 기본 (QGIS) 도구 (존재하는 경우)를 사용하는 것이 좋습니다 QgsVectorLayer. 그렇지 않으면 processing.run을 사용 하여 도구를 실행 한 다음 QgsVectorLayer메모리에 출력을 추가하는 데 사용 하는 것이 좋습니다 .