QGISのディスクに保存せずにGRASSツールによって返されるレイヤーを取得することは可能ですか?

Dec 18 2020

QGISPythonコンソールでいくつかのGRASSツールを使用しています。私が使用するすべてのツールは、次のように、文字列パスを含むキーと値を持つ辞書を返します{"output": "file/path"}。ここに答えがあります。その文字列をで使用することをお勧めしQgsVectorLayerます。ただし、ディスクへのファイルの書き込み/ディスクからのファイルの読み取りには時間がかかります。

私が試したprocessing.runAndLoadResultsprocessing.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してツールを実行してから、を使用して出力をメモリに追加することをお勧めします。