Czy można odzyskać warstwę za pomocą narzędzia GRASS bez zapisywania jej na dysku w QGIS?
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.runAndLoadResults
i 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
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.run
metodą. 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.run
które zwraca QgsVectorLayer
instancję bez zapisywania jej na dysku. W przeciwnym razie sugeruję uruchomienie narzędzia za pomocą, processing.run
a następnie użycie, QgsVectorLayer
aby dodać wyjście do pamięci.