Message posté par : Paiheu
----------------------------------------
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
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=338278#p338278
Pour y répondre : qgis_fr(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net