কিউজিআইএস পাইথন প্লাগইন থেকে পোস্টজিআইএস স্তর যুক্ত করা হচ্ছে


9

আমি পাইথন শেখার অংশ হিসাবে একটি প্লাগইন থেকে পোস্টগিস স্তরগুলি কুইগিসে যুক্ত করার জন্য একটি প্লাগইন বিকাশের চেষ্টা করি।

পোস্টগিস লেয়ার যুক্ত করার কোডটি কুকবুক থেকে নেওয়া হয়েছে এবং আমি কিগিসের মধ্যে পাইথন কনসোল থেকে চালিয়ে নিলে ঠিকঠাক কাজ করি (যদি বাটন ওকে ডায়ালগ বাক্সে চাপ দেওয়া হয় == 1 এবং আমার স্তরটি কিউগিসে যুক্ত করা উচিত)।

তবে আমি যদি এটি আমার প্লাগইন থেকে চালনা করি তবে এটি নামের বার্তাটি ছুঁড়ে ফেলেছে: নাম 'কিংসডাটাসোর্সুরি' সংজ্ঞায়িত করা হয়নি। প্লাগইন থেকে এটি চালাতে আমি কেন ত্রুটি পাই?

পাইথন কনসোল থেকে বনাম কোনও ফাংশনের ভিতরে / প্লাগইন থেকে কীভাবে একটি স্তর যুক্ত করব তাতে কী পার্থক্য রয়েছে?

 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")

পাইথন কনসোল কিউজিআইএস-এ পোস্টজিআইএস স্তর যুক্ত করার জন্য আমি আপনার নিদর্শনটি ব্যবহার করার চেষ্টা করছি তবে ব্যর্থ - "নামেরর: নাম 'স্ব' সংজ্ঞায়িত করা হয়নি" (। আপনি কি দয়া করে ভুল বলবেন মনে হয়? স্ব স্ব মানে কি (আমি খুব বেশি নই পাইথনে ভাল)) আমার কোডটি এখানে রয়েছে gis.stackexchange.com/questions/245985/…
জেন

উত্তর:


9

কারণ পাইথন ক্লাসগুলি ব্যবহারের আগে তাদের আমদানি করা দরকার। কেবল এই ফাইলটির শিরোনামে এটি লিখুন:

from qgis.core import QgsDataSourceURI

এটি কিউজিআইএস পাইথন কনসোলে আলাদা কারণ এটি QGIS ক্লাসগুলি খোলার পরে স্বয়ংক্রিয়ভাবে লোড হয়।

মনে রাখবেন যে আপনি যদি QgsVectorLayerএখনও ক্লাসটি আমদানি না করে থাকেন তবে একই ধরণের ত্রুটি পাবেন। একটি নতুন লাইন যুক্ত করার পরিবর্তে, আপনি qgis.coreলাইব্রেরি থেকে আমদানি করতে চান এমন ক্লাসগুলি তালিকাভুক্ত করতে পারেন :

from qgis.core import QgsVectorLayer, QgsDataSourceURI

2
দেরী জবাবের জন্য দুঃখিত আমি এখনই এটি চেষ্টা করার সুযোগ পেয়েছি এবং এটি দুর্দান্ত কাজ করেছে! এছাড়াও একটি লাইব্রেরি থেকে ক্লাস তালিকা তৈরি করা কীভাবে সম্ভব তা ব্যাখ্যা করার জন্য আপনাকে ধন্যবাদ, এটি আমার কাছেও নতুন ছিল। শুভেচ্ছা
জিওগ্রো

1
কিউজিআইএস 3 এ এটির নামকরণ করা হয়েছে QgsDataSourceUri
জে কামিন্স 15
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.