QGIS Python 플러그인에서 PostGIS 레이어 추가


9

파이썬 학습의 일환으로 플러그인에서 qgis에 postgis 레이어를 추가하는 플러그인을 개발하려고합니다.

postgis 레이어를 추가하는 코드는 쿡북에서 가져오고 qgis 내의 파이썬 콘솔에서 실행하면 정상적으로 작동합니다 (대화 상자 결과 == 1에서 확인 버튼을 누르면 qgis에 레이어를 추가해야합니다).

그러나 플러그인에서 실행하면 NameError : name '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 : name 'self'is not defined"(. 무엇이 잘못되었는지 알려주시겠습니까? python에서 좋습니다) 여기 내 코드 gis.stackexchange.com/questions/245985/…
Jane Jane

답변:


9

사용하기 전에 파이썬 클래스를 가져와야하기 때문입니다. 해당 파일의 제목에 이것을 작성하십시오.

from qgis.core import QgsDataSourceURI

QGIS Python 콘솔은 QGIS 클래스가 열릴 때 자동으로로드되기 때문에 다릅니다.

QgsVectorLayer클래스를 아직 가져 오지 않은 경우 비슷한 오류가 발생합니다. 새 줄을 추가하는 대신 qgis.core라이브러리에서 가져올 클래스를 다음과 같이 나열 할 수 있습니다 .

from qgis.core import QgsVectorLayer, QgsDataSourceURI

2
답장을 늦어서 죄송합니다. 시험해 볼 수있는 기회가있었습니다. 또한 하나의 라이브러리에서 수업을 나열하는 방법을 설명해 주셔서 감사합니다. 안부
인사

1
QGIS 3에서는 이름이로 변경되었습니다 QgsDataSourceUri.
Jay Cummins
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.