Message posté par : zutix
----------------------------------------
Bonjour,
Il semble que ce qui suit réponde au besoin exprimé.
En espérant que cela aide certains à ne pas galérer comme je l’ai fait.
Bonnes fêtes de changement d'année !
Cordialement
### definition de fonctions
# trouver et trier les valeurs distinctes du champ nomme zFieldName de la couche objet
zlayer
# appel, exemple : trouverValDistChp(layer,"_NB")
# retour, exemple : [0, 1, 2, 3, 4, 5, 8, 25]
def trouverValDistChp(zlayer,zFieldName):
vals=[]
for feature in zlayer.getFeatures():
val=feature[zFieldName]
if not val in vals:
vals.append(val)
vals.sort()
return(vals)
# definir les categories qui s'afficheront : case cochee, carre, valeur, legende
# appel, exemple : categories=definirCategies(catNb,catVals,ramp)
# retour, exemple : [<qgis._core.QgsRendererCategoryV2 object at
0x0000000024FFEC80>, <qgis._core.QgsRendererCategoryV2 object at
0x0000000024FFEEA0>,
# <qgis._core.QgsRendererCategoryV2 object at 0x0000000024FFE048>,
<qgis._core.QgsRendererCategoryV2 object at 0x0000000024FFED90>,
# <qgis._core.QgsRendererCategoryV2 object at 0x000000002514D840>,
<qgis._core.QgsRendererCategoryV2 object at 0x000000002514D950>,
# <qgis._core.QgsRendererCategoryV2 object at 0x000000002514DA60>,
<qgis._core.QgsRendererCategoryV2 object at 0x000000002514DB70>]
def definirCategies(catNb,catVals,catRamp):
categories=[]
for i in range(catNb):
n=i*100/catNb
if n<100:
if n<10:
step=float('0.0' +str(n))
else:
step=float('0.' +str(n))
# state=True
# valeur 100% non utilisee
#else:
# step=1
# state=False
state=True # case cochee (False sinon)
value=catVals # valeur
# symbole generique qui reste constant et correspond a Modification
symbol=QgsFillSymbolV2.defaultSymbol(layer.geometryType()) # symbole plein
symbol.symbolLayer(0).setOutlineColor(QColor(169,169,169,100)) # symbole bord
gris
# symbole de categorie qui correspond a 1 ligne category
symbol.setColor(ramp.color(step)) # couleur a la
position du pas dans la palette
category=QgsRendererCategoryV2(value,symbol,str(value),state) # elements de la
categorisation
categories.append(category)
return(categories)
# trouver l'objet palette de nom fourni
# appel, exemple : trouverPalette("Oranges")
# retour, exemple : <qgis._core.QgsVectorGradientColorRampV2 object at
0x0000000024935F28>
def trouverPalette(zRampName):
style=QgsStyleV2().defaultStyle()
allColorRampNames=style.colorRampNames()
i=-1
for rampName in allColorRampNames:
i=i+1
if rampName=="Oranges":
break
ramp=style.colorRamp(allColorRampNames)
return(ramp)
###
# creer le style : categorise, colonne=_NB, palette=Oranges a l’aides fonctions ci-avant
# trouver la palette
ramp=trouverPalette("Oranges")
# trouver la liste des valeurs entieres distinctes du champ
catVals=trouverValDistChp(layer,"_NB") # liste de valeurs
catNb=len(catVals) # nombre de valeurs
# definir les categories, i.e. les lignes : state(True->coche), symbol(carre colore),
value(_NB), label(_NB en texte) de categorisation qui seront affichees
categories=definirCategies(catNb,catVals,ramp)
# creer style categorise avec colonne=_NB, lignes de categorie=categories et palette=ramp
renderer=QgsCategorizedSymbolRendererV2('_NB',categories)
renderer.setSourceColorRamp(ramp)
# appliquer ce style a la couche
layer.setRendererV2(renderer)
# modifier effectivement la couche
QgsMapLayerRegistry.instance().addMapLayer(layer)
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=357254#p357254
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