Czy można odzyskać warstwę za pomocą narzędzia GRASS bez zapisywania jej na dysku w QGIS?

Dec 18 2020

Używam niektórych narzędzi GRASS w konsoli QGIS Python. Wszystkie narzędzia używam zwrócić słownik z kluczem i wartością, która zawiera ścieżkę ciąg w następujący sposób: {"output": "file/path"}. Tutaj jest odpowiedź . Sugeruje użycie tego ciągu w QgsVectorLayer. Ale zapisywanie / odczytywanie pliku na / z dysku jest czasochłonne.

Próbowałem processing.runAndLoadResultsi processing.run. Obie dodają warstwę. Ale przed dodaniem warstwy zapisują ją na dysku, a następnie dodają.

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

Zastanawiam się, czy istnieje sposób na odzyskanie zwróconej / dodanej warstwy przez narzędzie GRASS bez zapisywania na dysku (do wykorzystania w kolejnym narzędziu do przetwarzania w skrypcie Pythona)?

Odpowiedzi

3 KadirŞahbaz Dec 18 2020 at 19:08

Myślę, że nie ma sposobu podczas korzystania z narzędzia GRASS w QGIS. Zauważyłem, że narzędzia GRASS, z których korzystałem, zawsze zwracały ścieżkę do pliku. Jedynym sposobem, w jaki mogłem uzyskać warstwę bez zapisywania jej, było użycie natywnych narzędzi przetwarzania QGIS processing.runmetodą. Ta odpowiedź wyjaśnia, jak to zrobić.

Jeśli używasz warstwy wyjściowej jako warstwy pośredniej, zalecam użycie równoważnego narzędzia natywnego (QGIS) (jeśli istnieje), przez processing.runktóre zwraca QgsVectorLayerinstancję bez zapisywania jej na dysku. W przeciwnym razie sugeruję uruchomienie narzędzia za pomocą, processing.runa następnie użycie, QgsVectorLayeraby dodać wyjście do pamięci.