QGIS पायथन प्लगइन से PostGIS लेयर जोड़ना


9

मैं अजगर सीखने के हिस्से के रूप में एक प्लगइन से qgis में पोस्टगिस परतों को जोड़ने के लिए एक प्लगइन विकसित करने की कोशिश करता हूं।

पोस्टगिस लेयर को जोड़ने के लिए कोड को कुकबुक से लिया जाता है और यदि मैं इसे क्यूगिस के भीतर अजगर कंसोल से चलाता हूं तो ठीक काम करता है (यदि बटन ओके डायलॉग बॉक्स परिणाम == 1 में दबाया जाता है और मेरी परत को क्यूजिस में जोड़ देना चाहिए)।

लेकिन अगर मैं इसे अपने प्लगइन से चलाता हूं तो यह संदेश को फेंक देता है NameError: नाम 'QgsDataSourceURI' परिभाषित नहीं है। मुझे वह त्रुटि प्लगइन से चलाने में क्यों मिलती है?

वहाँ एक अंतर है कि कैसे मैं एक प्लगइन से एक परत जोड़ / एक समारोह बनाम अंदर अजगर सांत्वना से?

 def run(self):
        """Run method that performs all the real work"""

        # show the dialog
        self.dlg.show()
        # Run the dialog event loop
        result = self.dlg.exec_()
        # See if OK was pressed
        if result == 1:
            # Do something useful here - delete the line containing pass and
            # substitute with your code.
            uri = QgsDataSourceURI()
            uri.setConnection("localhost", "5432", "test", "postgres", "postgres")
            #set database schema, table name, geometry column and optionaly subset(WHERE clause)
            uri.setDataSource ("basic", "cities", "geom")
            # Defining the layer name and layer type for QGIS?
            vlayer=QgsVectorLayer (uri .uri() ,"cities","postgres")

मैं अपने पैटर्न का उपयोग करने की कोशिश कर रहा हूं कि अजगर कंसोल QGIS में PostGIS लेयर को जोड़ें लेकिन असफल - "NameError: नाम 'self' परिभाषित नहीं है" (क्या आप मुझे बता रहे हैं कृपया मुझे बताएं कि क्या गलत है? क्या आत्म मतलब है? मैं बहुत नहीं हूं । अजगर में अच्छा) यहाँ मेरी कोड है gis.stackexchange.com/questions/245985/...
जेन

जवाबों:


9

क्योंकि आपको उन्हें उपयोग करने से पहले पायथन कक्षाओं को आयात करने की आवश्यकता है। इसे उस फ़ाइल के शीर्षक में लिखें:

from qgis.core import QgsDataSourceURI

क्यूजीआईएस पायथन कंसोल में यह अलग है क्योंकि यह खुलने पर स्वचालित रूप से क्यूजीआईएस कक्षाओं को लोड करता है।

ध्यान दें कि यदि आपने QgsVectorLayerअभी तक कक्षा का आयात नहीं किया है, तो आपको एक समान त्रुटि मिलेगी। एक नई पंक्ति जोड़ने के बजाय, आप उन वर्गों को सूचीबद्ध कर सकते हैं जिन्हें आप qgis.coreलाइब्रेरी से आयात करना चाहते हैं , इस तरह से:

from qgis.core import QgsVectorLayer, QgsDataSourceURI

2
देर से जवाब के लिए खेद है कि मैं सिर्फ इसे बाहर की कोशिश करने का अवसर था और यह बहुत अच्छा काम किया! यह भी समझाने के लिए धन्यवाद कि एक पुस्तकालय से कक्षाएं सूचीबद्ध करना कैसे संभव है, यह मेरे लिए भी नया था। सर्वश्रेष्ठ सादर
जोग्रो

1
QGIS 3 में, इसका नाम बदल दिया गया है QgsDataSourceUri
जय कमिंस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.