Message posté par : ccam86
----------------------------------------
Problème : Gestion des libellés et notes dans QGIS
Dans ma couche, je devais gérer des libellés de recouvrement (ex. *0 à 20%*, *80 à 100%*)
liés à une table externe `LD_canal`, où plusieurs libellés partagent la même note
numérique (`ldcan_note`).
Résultat : quand je choisissais un libellé dans la liste déroulante, QGIS le remplaçait
parfois par un autre ayant la même note (perte du libellé choisi).
Solution adoptée
1. Séparer les rôles des champs
* `CS_VEGAQUA` : affiche les libellés (widget Valeur relationnelle)
* `CS_VEGNOTE` : stocke uniquement les notes numériques pour les calculs (champ
ajouté)
2. Configuration du widget Valeur relationnelle
* Table : `LD_canal`
* Clé : `ldcan_id` (unique)
* Valeur affichée : `ldcan_intitule`
* Valeur stockée : `ldcan_id`
* Filtre : `ldcan_classe = 'recouvrementvegaquatique'`
3. Conversion id → note
```sql
CASE
WHEN "CS_VEGAQUA" = 126 THEN 0
WHEN "CS_VEGAQUA" = 127 THEN 2
WHEN "CS_VEGAQUA" = 128 THEN 4
WHEN "CS_VEGAQUA" = 129 THEN 5
WHEN "CS_VEGAQUA" = 130 THEN 4
WHEN "CS_VEGAQUA" = 131 THEN 2
ELSE NULL
END
```
4. Contraintes et valeurs par défaut
Exemple pour `CS_VEGAUTO` :
```sql
("CS_VEGNOTE" = 126 AND "CS_VEGAUTO" = 0) OR
("CS_VEGNOTE" != 126)
```
Bénéfices
* Conservation du libellé choisi dans la liste déroulante
* Calculs automatiques fiables grâce à `CS_VEGNOTE`
* Cohérence garantie par des contraintes
Contexte technique
* QGIS 3.40 LTR et 3.44.2
* Champs `Integer64` pour `CS_VEGNOTE` et `CS_VEGAQUA`
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=374366#p374366
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