QGIS PythonプラグインからPostGISレイヤーを追加する


9

Pythonの学習の一環として、プラグインからpostgisレイヤーをqgisに追加するプラグインを開発しようとしています。

postgisレイヤーを追加するためのコードはクックブックから取得され、qgis内のpythonコンソールから実行すると正常に動作します(ダイアログボックスで[OK]ボタンが押された場合、結果== 1であり、レイヤーをqgisに追加する必要があります)。

しかし、プラグインから実行すると、メッセージNameError:name 'QgsDataSourceURI' is not definedがスローされます。プラグインから実行するとエラーが発生するのはなぜですか?

プラグインから/関数内からレイヤーを追加する方法と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")

PythonコンソールQGISでパターンを使用してPostGISレイヤーを追加しようとしていますが、失敗しました-「NameError:name 'self' is not defined」()何が悪いのか教えていただけませんか? pythonで良い)。これは私のコードgis.stackexchange.com/questions/245985/…です
Jane

回答:


9

使用する前にPythonクラスをインポートする必要があるからです。これをそのファイルの見出しに書くだけです:

from qgis.core import QgsDataSourceURI

QGIS Pythonコンソールでは、開いたときに自動的にQGISクラスをロードするため、これは異なります。

QgsVectorLayerクラスをまだインポートしていない場合は、同様のエラーが発生することに注意してください。新しい行を追加する代わりに、次のようにして、qgis.coreライブラリからインポートするクラスをリストできます。

from qgis.core import QgsVectorLayer, QgsDataSourceURI

2
返信が遅くなってすみません、試してみる機会がありました。また、1つのライブラリからクラスをリストする方法を説明していただき、ありがとうございます。これも私にとっては初めてのことでした。よろしくお願いします
geogrow

1
QGIS 3では、名前がに変更されましたQgsDataSourceUri
ジェイカミンズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.