Menambahkan lapisan PostGIS dari plugin QGIS Python

9

Saya mencoba mengembangkan plugin untuk menambahkan layer postgis ke qgis dari sebuah plugin sebagai bagian dari pembelajaran python.

Kode untuk menambahkan layer postgis diambil dari buku masak dan berfungsi dengan baik jika saya menjalankannya dari konsol python di dalam qgis (Jika tombol OK ditekan dalam hasil kotak dialog == 1 dan harus menambahkan layer saya ke qgis).

Tetapi jika saya menjalankannya dari plugin saya itu melempar pesan NameError: name 'QgsDataSourceURI' tidak didefinisikan. Mengapa saya mendapatkan kesalahan saat menjalankannya dari plugin?

Apakah ada perbedaan bagaimana saya menambahkan layer dari plugin / di dalam fungsi vs dari konsol python?

 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")
geogrow
sumber
Saya mencoba menggunakan pola Anda untuk menambahkan lapisan PostGIS di konsol python QGIS tetapi tidak berhasil - "NameError: name 'self' tidak didefinisikan" (. Apakah Anda keberatan memberi tahu saya tolong apa yang salah? Apa artinya diri sendiri (saya tidak terlalu bagus dalam python). Berikut adalah kode saya gis.stackexchange.com/questions/245985/…
Jane

Jawaban:

9

Karena Anda perlu mengimpor kelas Python sebelum menggunakannya. Cukup tulis ini di tajuk file itu:

from qgis.core import QgsDataSourceURI

Ini berbeda di Konsol Python QGIS karena secara otomatis memuat kelas QGIS ketika dibuka.

Perhatikan bahwa jika Anda belum mengimpor QgsVectorLayerkelas, Anda akan mendapatkan kesalahan serupa. Alih-alih menambahkan baris baru, Anda bisa mendaftar kelas yang ingin Anda impor dari qgis.coreperpustakaan, dengan cara ini:

from qgis.core import QgsVectorLayer, QgsDataSourceURI
Germán Carrillo
sumber
2
Maaf atas jawaban yang terlambat, saya baru saja berkesempatan untuk mencobanya dan itu berhasil! Juga terima kasih telah menjelaskan bagaimana mungkin mendaftar kelas dari satu perpustakaan, yang juga baru bagi saya. Salam Hormat
geogrow
1
Di QGIS 3, namanya diubah menjadi QgsDataSourceUri.
Jay Cummins