1 votos

Habilitación de la edición de alternancia cuando se cargan las capas de postgis en QGIS

Estoy tratando de cargar capas desde PostGIS usando el código de abajo:

uri = QgsDataSourceUri()
uri.setConnection(server, PORT, base, user, mdp)
root = QgsProject.instance().layerTreeRoot()
group = root.addGroup(groupname)
for element in table_list:
if element == "bpe":
    asql = """SELECT id,
                 geom, 
                 nom,   # primary Key
                 code, 
                 adresse, 
                 cp, 
                 ville, 
                 type_fonc,
                 etat, 
                 modele, 
                 reference, 
                 Proprietai,
                 gestionnai, 
                 date_de_cr, 
                 emprise 
           FROM  public.bpe 
           INNER JOIN public.bpe_projet AS bp ON bpe.nom = bp.nom_bpe 
           WHERE bp.nom_projet = '%s'""" % project
    uri.setDataSource('', '(' + asql + ')', 'geom','','nom')
    layer = QgsVectorLayer(uri.uri(), element, "postgres")
    QgsProject.instance().addMapLayer(layer, False)

Cuando las capas se cargan en QGIS, la edición de la palanca está desactivada.

Mientras estoy usando el código de abajo, la edición de alternancia está habilitada.

elif element == "support":
    asql = "nom_projet= '%s' " % project
    uri.setDataSource('public', element, GEOM, asql)
    layer = QgsVectorLayer(uri.uri(), element, "postgres")
    QgsProject.instance().addMapLayer(layer, False)

¿Qué modificación debo hacer en el primer código para habilitar la edición de la palanca?

0voto

tedder42 Puntos 168

La solución a mi pregunta está abajo, espero que ayude

uri = QgsDataSourceUri()
uri.setConnection(server, PORT, base, user, mdp)
root = QgsProject.instance().layerTreeRoot()
group = root.addGroup(groupname)
for element in table_list:
if element == "bpe":
    asql = "nom IN (SELECT nom_bpe FROM bpe_projet WHERE bpe_projet.nom_projet ='%s')" % project
    uri.setDataSource('public', element, 'geom', asql)
layer = QgsVectorLayer(uri.uri(), element, "postgres")
QgsProject.instance().addMapLayer(layer, False

Así tienes un filtro y puedes editar tu capa.

Gracias a @Zoltan

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