Apakah mungkin mendapatkan lapisan tersebut dikembalikan oleh alat GRASS tanpa menyimpannya ke disk di QGIS?

Dec 18 2020

Saya menggunakan beberapa alat GRASS di QGIS Python Console. Semua tools yang saya gunakan kembali kamus dengan kunci dan nilai yang berisi string path, seperti ini: {"output": "file/path"}. Ada jawabannya disini . Ini menyarankan untuk menggunakan string itu dalam QgsVectorLayer. Tetapi menulis / membaca file ke / dari disk memakan waktu.

Saya mencoba processing.runAndLoadResultsdan processing.run. Keduanya menambahkan lapisan. Tetapi sebelum menambahkan lapisan, mereka menyimpan lapisan tersebut ke disk, lalu menambahkannya.

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

Saya bertanya-tanya, apakah ada cara untuk mendapatkan lapisan yang dikembalikan / ditambahkan dengan alat GRASS tanpa menyimpan ke disk (untuk digunakan di alat pemrosesan berikutnya dalam skrip Python)?

Jawaban

3 KadirŞahbaz Dec 18 2020 at 19:08

Saya rasa tidak ada cara untuk menggunakan alat GRASS di QGIS. Saya mencatat bahwa alat GRASS yang saya gunakan selalu mengembalikan jalur file. Satu-satunya cara yang dapat saya capai untuk mendapatkan lapisan tanpa menyimpannya adalah dengan menggunakan alat pemrosesan asli QGIS melalui processing.runmetode. Jawaban ini menjelaskan bagaimana melakukannya.

Jika Anda menggunakan lapisan keluaran sebagai lapisan perantara, saya sarankan Anda untuk menggunakan alat asli yang setara (QGIS) (jika ada) processing.runyang melaluinya mengembalikan QgsVectorLayercontoh tanpa menyimpannya ke disk. Jika tidak, saya sarankan Anda untuk menjalankan alat menggunakan processing.rundan kemudian digunakan QgsVectorLayeruntuk menambahkan output ke memori.