Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Thu 17 December 2020 14:19

Paiheu
Juste Inscrit !
Date d'inscription: 27 Nov 2020
Messages: 2

QGIS: Probl lors du chargement d'une couche par Python

Bonjour, je rencontre un problème qui me tient complètement en échec : J'ai une base de donnée spatialite avec plusieurs tables geometriques que je peux toute afficher via QGIS (3.16) (via le gestionnaire de BDD par exemple, aucun soucis). Ensuite, je veux afficher une des tables avec un style via un code python, j'utilise pour ce faire le script suivant

Code:

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from qgis.core import *
from qgis.gui import *
from random import randrange
from os import path
from qgis.utils import iface
def run_script(iface):

    #con base de donnée

    uri = QgsDataSourceUri()
    uri.setDatabase('C:\\bckup\\dev\\admin\\QGIS_PE\\Sortie\\BDClient.sqlite')
    schema = ''
    geom_column = 'geom'#definit le nom de la colonne geometrique

    #choix de la table
    uri.setDataSource(schema, 'Part_de_Marche', geom_column) 

    #creation couche en definissant quel nom on lui donne
    layer = QgsVectorLayer(uri.uri(), 'Part de Marche', 'spatialite')
    
    #------affiche la couche avec une categorisation ----#
    fni =  layer.fields().indexFromName('Part_Marche') #renseigner le nom de la colonne a catégoriser
    unique_vals = layer.dataProvider().uniqueValues(fni)
    categories = []

    for val in unique_vals:
    # initialise the default symbol for this geometry type
        symbol = QgsSymbol.defaultSymbol(layer.geometryType())
        
    # configure a symbol layer
        layer_style = {}
        layer_style['color'] = '%d, %d, %d' % (randrange(0,256),randrange(0,256),randrange(0,256))
        layer_style['outline'] = '#000000'
        symbol_layer = QgsSimpleFillSymbolLayer.create(layer_style)

    # replace default symbol layer with the configured one

        if symbol_layer is not None:
            symbol.changeSymbolLayer(0, symbol_layer)
        else:
            print ("success")
    # create renderer object
        category = QgsRendererCategory(val, symbol, str(val))

    # entry for the list of category items
        categories.append(category)

 # create renderer object
    renderer = QgsCategorizedSymbolRenderer('Part_Marche', categories)#renseigner le nom de la colonne a catégoriser

# assign the created renderer to the layer
    if renderer is not None:
        layer.setRenderer(renderer)
    layer.triggerRepaint()



    #afficher carte 
    root = QgsProject.instance().layerTreeRoot()
    myGroup = root.addGroup('Carte Bonus')
    root = QgsProject.instance().layerTreeRoot()
    mygroup = root.findGroup('Carte Bonus')
    QgsProject.instance().addMapLayer(layer, False)
    mygroup.addLayer(layer)

En gros, ça me permet de definir des couleurs identiques à l'affichage pour chaque valeur identique de "Part_marche"
Tout s'affiche parfaitement après compilation

Je veux ensuite exécuter exactement le même script pour une autre table de ma base de donnée (je ne modifie que le nom de la table et le nom de la colonne sur lequel la catégorisation doit s'effectuer), et là, aucun retour d'erreur lors de la compilation (via l'extension scriptrunner), mais rien ne s'affiche sous QGIS ! pourtant je peux bien voir que la légende de la couche est presente, et mieux, lorsque je clic droit sur celle-ci, que je fait "changer la source des donneés" (déjà, à ce moment la, je m'appercois que les chemins sont bons) et que je clique manuellement sur ma dites table, tout s'affiche (avec les bonnes couleurs pas catégories) parfaitement.

Avez-vous déjà rencontré un problème similaire ? Merci d'avance pour votre aide

Hors ligne

 

#2 Tue 22 December 2020 09:30

Olivier Pompier
Participant occasionnel
Date d'inscription: 8 Sep 2013
Messages: 49

Re: QGIS: Probl lors du chargement d'une couche par Python

Bonjour,

En lançant ton script chez moi depuis la console Python cela semble fonctionner avec une base sqlite test sauf la catégorisation bien sûr mais il retrouve bien la source de données. J'ai seulement modifié

Code:

uri.setDatabase(r'C:\Users\xxxx\Desktop\test.sqlite')

et le nom de la colonne geom -> geometry
Tu as aussi ce résultat en passant directement par la Console Python de Qgis ?

Hors ligne

 

Pied de page des forums

Powered by FluxBB