#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