क्या QGIS में डिस्क को सहेजे बिना GRASS टूल द्वारा परत को वापस लाना संभव है?
मैं 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 टूल द्वारा लौटी / गयी परत प्राप्त करने का एक तरीका है?
जवाब
मुझे नहीं लगता कि QGIS में GRASS टूल का उपयोग करने का कोई तरीका है। मैंने नोट किया कि मैंने जिस GRASS टूल्स का इस्तेमाल किया, वह हमेशा फाइल पाथ को लौटाता है। एकमात्र तरीका जिसे मैं बिना सहेजे लेयर प्राप्त कर सकता था वह था processing.run
विधि के माध्यम से QGIS देशी प्रोसेसिंग टूल्स का उपयोग करना। यह उत्तर बताता है कि कैसे करना है।
यदि आप आउटपुट लेयर का उपयोग मध्यवर्ती परत के रूप में करते हैं, तो मैं आपको मूल देशी (QGIS) टूल (यदि मौजूद है) का उपयोग करने की सलाह देता हूं, processing.run
जिसके माध्यम QgsVectorLayer
से डिस्क को सहेजे बिना रिटर्न देता है । अन्यथा, मैं आपको एक उपकरण चलाने का सुझाव देता हूं processing.run
और फिर QgsVectorLayer
आउटपुट को मेमोरी में जोड़ने के लिए उपयोग करता हूं ।