Est-il possible d'obtenir la couche retournée par un outil GRASS sans la sauvegarder sur le disque dans QGIS?
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.runAndLoadResults
et 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
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.run
mé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.run
lequel retourne l' QgsVectorLayer
instance sans l'enregistrer sur le disque. Sinon, je vous suggère d'exécuter un outil en utilisant processing.run
, puis de l'utiliser QgsVectorLayer
pour ajouter la sortie à la mémoire.