10 votos

Añadir capa de PostGIS de QGIS Python plugin

Trato de desarrollar un plugin para añadir postgis capas a qgis de un plugin como parte del aprendizaje de python.

El código para añadir una capa postgis es tomado de el libro de cocina y funcionan bien si lo ejecuto desde la consola de python dentro de qgis (Si el botón se pulsa ACEPTAR en el cuadro de diálogo resultado == 1 y debe agregar mi capa para qgis).

Pero si lo ejecuto desde mi plugin se lanza el mensaje de NameError: name 'QgsDataSourceURI' no está definido. ¿Por qué me sale ese error ejecutando desde el plugin?

Hay una diferencia cómo puedo añadir una capa a partir de un plugin/dentro de una función vs desde la consola de 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")

10voto

Elliott Maynard Puntos 11

Debido a que usted necesita para importar las clases de Python antes de usarlos. Acabo de escribir esto en el título de ese archivo:

from qgis.core import QgsDataSourceURI

Es diferente en el QGIS Consola de Python porque automáticamente las cargas de QGIS clases cuando se abre.

Tenga en cuenta que si no has importado la QgsVectorLayer clase sin embargo, usted obtendrá un mensaje de error similar. En lugar de agregar una nueva línea, usted puede hacer una lista de las clases que desea importar desde qgis.core biblioteca, de esta manera:

from qgis.core import QgsVectorLayer, QgsDataSourceURI

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X