Est-il possible d'obtenir la couche retournée par un outil GRASS sans la sauvegarder sur le disque dans QGIS?

Dec 18 2020

J'utilise certains outils GRASS dans la console QGIS Python. Tous les outils que j'utilise un dictionnaire de retour avec une clé et une valeur qui contient chemin de chaîne, comme ceci: {"output": "file/path"}. Il y a une réponse ici . Il suggère d'utiliser cette chaîne dans QgsVectorLayer. Mais l'écriture / la lecture d'un fichier sur / depuis le disque prend du temps.

J'ai essayé processing.runAndLoadResultset processing.run. Les deux ajoutent une couche. Mais avant d'ajouter la couche, ils enregistrent la couche sur le disque, puis l'ajoutent.

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

Je me demande, existe-t-il un moyen d'obtenir la couche retournée / ajoutée par l'outil GRASS sans enregistrer sur le disque (à utiliser dans l'outil de traitement suivant dans un script Python)?

Réponses

3 KadirŞahbaz Dec 18 2020 at 19:08

Je ne pense pas qu'il existe un moyen d'utiliser un outil GRASS dans QGIS. J'ai noté que les outils GRASS que j'utilisais renvoyaient toujours le chemin du fichier. La seule façon d'obtenir une couche sans l'enregistrer était d'utiliser les outils de traitement natifs de QGIS via la processing.runméthode. Cette réponse explique comment faire.

Si vous utilisez la couche de sortie comme couche intermédiaire, je vous recommande d'utiliser un outil natif équivalent (QGIS) (s'il existe) via processing.runlequel retourne l' QgsVectorLayerinstance sans l'enregistrer sur le disque. Sinon, je vous suggère d'exécuter un outil en utilisant processing.run, puis de l'utiliser QgsVectorLayerpour ajouter la sortie à la mémoire.