क्या QGIS में डिस्क को सहेजे बिना GRASS टूल द्वारा परत को वापस लाना संभव है?

Dec 18 2020

मैं QGIS पायथन कंसोल में कुछ GRASS टूल्स का उपयोग करता हूं। मेरे द्वारा उपयोग किए जाने वाले सभी टूल एक कुंजी और मान के साथ एक शब्दकोश लौटाते हैं जिसमें स्ट्रिंग पथ होता है, जैसे {"output": "file/path"}:। यहाँ एक उत्तर है । यह उस स्ट्रिंग का उपयोग करने का सुझाव देता है QgsVectorLayer। लेकिन डिस्क से / के लिए एक फ़ाइल लिखना / पढ़ना समय लेने वाली है।

मैंने कोशिश की processing.runAndLoadResultsऔर processing.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

मुझे आश्चर्य है, क्या डिस्क पर सहेजे बिना (पायथन स्क्रिप्ट में अगले प्रसंस्करण उपकरण में उपयोग करने के लिए) GRASS टूल द्वारा लौटी / गयी परत प्राप्त करने का एक तरीका है?

जवाब

3 KadirŞahbaz Dec 18 2020 at 19:08

मुझे नहीं लगता कि QGIS में GRASS टूल का उपयोग करने का कोई तरीका है। मैंने नोट किया कि मैंने जिस GRASS टूल्स का इस्तेमाल किया, वह हमेशा फाइल पाथ को लौटाता है। एकमात्र तरीका जिसे मैं बिना सहेजे लेयर प्राप्त कर सकता था वह था processing.runविधि के माध्यम से QGIS देशी प्रोसेसिंग टूल्स का उपयोग करना। यह उत्तर बताता है कि कैसे करना है।

यदि आप आउटपुट लेयर का उपयोग मध्यवर्ती परत के रूप में करते हैं, तो मैं आपको मूल देशी (QGIS) टूल (यदि मौजूद है) का उपयोग करने की सलाह देता हूं, processing.runजिसके माध्यम QgsVectorLayerसे डिस्क को सहेजे बिना रिटर्न देता है । अन्यथा, मैं आपको एक उपकरण चलाने का सुझाव देता हूं processing.runऔर फिर QgsVectorLayerआउटपुट को मेमोरी में जोड़ने के लिए उपयोग करता हूं ।