QGIS Python eklentisinden PostGIS katmanı ekleme


9

Öğrenme python bir parçası olarak bir eklentiden qgis için postgis katmanları eklemek için bir eklenti geliştirmeye çalışın.

Postgis katmanı ekleme kodu yemek kitabından alınır ve qgis içindeki python konsolundan çalıştırırsam iyi çalışır (iletişim kutusunda sonuç == 1 OK düğmesine basılırsa ve katmanımı qgis'e eklemeliyim).

Ancak eklentimden çalıştırırsam, NameError: name 'QgsDataSourceURI' iletisini atar. Neden eklentiden çalıştırırken bu hatayı alıyorum?

Bir eklenti / bir işlev içindeki bir katman ile python konsolundan bir katman eklemek nasıl bir fark var mı?

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

Deseninizi python konsolu QGIS'e PostGIS katmanı eklemek için kullanmaya çalışıyorum ama başarısız oldum - "NameError: 'self' name tanımlanmadı" (. Bana neyin yanlış olduğunu söyler misiniz? İşte kodum gis.stackexchange.com/questions/245985/…
Jane

Yanıtlar:


9

Çünkü onları kullanmadan önce Python sınıflarını içe aktarmanız gerekir. Bunu şu dosyanın başlığına yazmanız yeterlidir:

from qgis.core import QgsDataSourceURI

QGIS Python Konsolunda farklıdır, çünkü açıldığında QGIS sınıflarını otomatik olarak yükler.

Eğer almadıysanız o Not QgsVectorLayerhenüz sınıf, benzer bir hata alırsınız. Yeni bir satır eklemek yerine qgis.corekütüphaneden içe aktarmak istediğiniz sınıfları şu şekilde listeleyebilirsiniz :

from qgis.core import QgsVectorLayer, QgsDataSourceURI

2
Geç cevap için üzgünüm sadece denemek için fırsat vardı ve harika çalıştı! Ayrıca, benim için de yeni olan bir kütüphaneden sınıfları listelemenin nasıl mümkün olduğunu açıkladığınız için teşekkür ederiz. Saygılarımızla
geogrow

1
QGIS 3'te yeniden adlandırılmıştır QgsDataSourceUri.
Jay Cummins
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.