Pages: 1
- Sujet précédent - QGIS 2.0 : Filtre de règle avec $scale : problème d'expression - Sujet suivant
#1 Wed 26 February 2014 21:29
- lauke
- Participant occasionnel
- Date d'inscription: 25 Feb 2014
- Messages: 10
QGIS 2.0 : Filtre de règle avec $scale : problème d'expression
Bonjour,
suite à ma question d'hier sur les étiquettes et la fonction $scale (problème résolu et étiquetage fonctionnel!),
je cherche maintenant à faire varier la présence et absence d'entités (rivières) ainsi que leur épaisseur de crayon en fonction de l'échelle.
Les rivières se distinguent ici selon leur nature (naturelle ou artificielle) et selon leur régime (permanent ou temporaire). Les attributs sont en booléen, de cette manière:
("NATUREL" = 1) pour les rivières naturelles ("NATUREL"=0) pour les rivières artificielles
("PERMANENT"=1) pour les rivières au régime permanent, ("PERMANENT"= 0) pour les rivières au régime temporaire
Je cherche un tel affichage :
lorsque l'échelle >= 30000, uniquement rivières naturelles permanentes
lorsque 10000 <= échelle < 30000, uniquement les rivières naturelles permanentes et rivières artificielles permanentes
lorsque l'échelle < 10000, l'ensemble des rivières, qu'elles soient naturelles ou artificielles, permanentes ou temporaires.
Alors dans le filtre des propriétés de règle, j'ai inscrit l'expression suivante :
CASE
WHEN $scale >= 30000 AND "NATUREL" = 1 AND "PERMANENT" = 0 THEN ''
WHEN $scale >= 30000 AND "NATUREL" = 0 THEN ''
WHEN $scale < 30000 AND $scale >= 10000 AND "NATUREL"= 1 AND "PERMANENT" = 0 THEN ''
WHEN $scale < 30000 AND $scale >= 10000 AND "NATUREL"= 0 AND "PERMANENT" = 0 THEN ''
WHEN $scale < 10000 THEN "NATUREL" = 1
WHEN $scale < 10000 THEN "NATUREL" = 0
END
Malheureusement, ça ne veut pas marcher. Pour l'étiquetage, qui certes était plus simple, ça a marché. Où est donc la coquille ici ? et comment devrais-je modifier la formulation ?
Aussi, sans vouloir pousser le vice, je me demandais s'il n'y avait pas moyen de faire varier graduellement l'épaisseur du crayon par intervalle d'échelle (ex : l'épaisseur augmente de 0.5 à tous les grossissements de 1:10000)...
est-ce possible ?
Laurent
Dernière modification par lauke (Wed 26 February 2014 21:30)
Hors ligne
#2 Thu 27 February 2014 09:55
Re: QGIS 2.0 : Filtre de règle avec $scale : problème d'expression
Bonjour,
Pour cacher un objet, dans les propriétés de style, pour la couleur, il suffit d'affecter une couleur transparente, par exemple '255,255,255,0' où 0 désigne la valeur assignée au canal alpha.
geodata au cerema et petits billets en géomatique
Hors ligne
#3 Thu 27 February 2014 10:22
- lauke
- Participant occasionnel
- Date d'inscription: 25 Feb 2014
- Messages: 10
Re: QGIS 2.0 : Filtre de règle avec $scale : problème d'expression
Merci! c'est une solution!
Mais je viens de rentrer l’expression suivante dans la propriété couleur de la source de définition
CASE
WHEN $scale > 30000 AND "NATUREL"=1 AND "PERMANENT" = 0 THEN '0,170,255,0'
WHEN $scale > 30000 AND "NATUREL"=1 AND "PERMANENT" = 1 THEN '0,170,255,255'
END
toutes les rivières naturelles sont en noir et il n'y a pas de distinction entre les régimes
le problème apparemment serait dans ma logique de synthaxe
Hors ligne
#4 Thu 27 February 2014 11:39
- cyrille
- Participant assidu
- Date d'inscription: 7 Feb 2006
- Messages: 403
Re: QGIS 2.0 : Filtre de règle avec $scale : problème d'expression
essaie avec le 0 ou 1 entre quotes puis guillements car ils sont peut etre au format texte?
Hors ligne
#5 Thu 27 February 2014 13:12
- lauke
- Participant occasionnel
- Date d'inscription: 25 Feb 2014
- Messages: 10
Re: QGIS 2.0 : Filtre de règle avec $scale : problème d'expression
en effet, ils sont en formats texte!
ça pourrait poser un problème le fait d'avoir appliqué le type données texte et insérer des 0/1 ?!
Hors ligne
#6 Thu 27 February 2014 14:34
- cyrille
- Participant assidu
- Date d'inscription: 7 Feb 2006
- Messages: 403
Re: QGIS 2.0 : Filtre de règle avec $scale : problème d'expression
je dirais non, tes 0 et 1 sont des données qualitatives ?
J'imagine que tu ne vas pas faire de calculs dessus.
Dernière modification par cyrille (Thu 27 February 2014 14:36)
Hors ligne
#7 Thu 27 February 2014 17:31
- lauke
- Participant occasionnel
- Date d'inscription: 25 Feb 2014
- Messages: 10
Re: QGIS 2.0 : Filtre de règle avec $scale : problème d'expression
non non aucunement qualitatif,
mais effectif/non effectif
non, a priori, pas de calculs dessus
c'est étrange qu'avec un même type d'expression, les variations fonctionnent pour les étiquetages et non pour les filtres
Hors ligne
#8 Fri 28 February 2014 11:18
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 4119
Re: QGIS 2.0 : Filtre de règle avec $scale : problème d'expression
Bonjour,
c'est étrange qu'avec un même type d'expression, les variations fonctionnent pour les étiquetages et non pour les filtres
Je n'ai pas vraiment l'impression que les expressions soient réellement de même type entre vos différentes écritures.
Dans l'utilisation du CASE WHEN, le texte après le THEN lui dit ce que vous voulez qu'il prenne comme valeur. Or dans votre expression, la quasi totalité est ''; cette valeur n'existant pas pour la variable concernée (ou en tout cas, ne correspondant pas à ce qui est attendu), elle ne vous fera pas ce que vous souhaitez. De même, Then "NATUREL"=1 ne lui dit rien.
L'information après le then doit correspondre à la nature de la variable:
pour les étiquettes, du texte comme par exemple '', 'Paris' ou un champ texte (ce que vous avez fait dans l'autre discussion)
pour la largeur, il faut du numérique
pour une couleur, une description colorimétrique
...
Hors ligne
#9 Fri 28 February 2014 17:21
- lauke
- Participant occasionnel
- Date d'inscription: 25 Feb 2014
- Messages: 10
Re: QGIS 2.0 : Filtre de règle avec $scale : problème d'expression
Bonjour, et merci pour les coups de pouce!
J'avais utilisé les ensembles vides ('') pcq ils fonctionnaient avec les étiquettes, j'ai donc procédé par élimination.
Cela me paraît logique que les 1 et 0 soient significatifs dans les expressions, puisque ceux sont les attributs que je leur ai accoler. Mais je peux me tromper!
Auparavant, j'avais essayé de filtrer sans éliminer, de cette manière :
CASE
WHEN $scale >= 30000 THEN "NATUREL" = 1 AND "PERMANENT"=1
WHEN $scale < 30000 AND $scale >= 10000 THEN "NATUREL" = 1 AND "PERMANENT"=1 OR "NATUREL"=0 AND "PERMANENT"=1
WHEN $scale < 10000 THEN "NATUREL" = 1 OR "NATUREL" = 0
END
Mais ça ne marche toujours pas...
Je suis donc preneur d'autres idées !
(Pour info, sous 2.2, les définitions des propriétés fonctionnent avec $scale \ les mêmes formules ne passaient pas sous 2.0, bien entendu \ donc la solution avec la transparence, ou la description colorimétrique, est opé...)
Dernière modification par lauke (Fri 28 February 2014 17:22)
Hors ligne
#10 Mon 03 March 2014 17:22
Re: QGIS 2.0 : Filtre de règle avec $scale : problème d'expression
Bonjour,
Je ne suis pas sûr d'avoir tout suivi.
Où as-tu rentré cette expression ? dans une propriété de style ? Si oui, laquelle ?
Il ne me semble pas que ce que tu rentres là permettra de faire apparaître, disparaître des lignes..
Là, cela ressemble à une syntaxe visant à changer les valeurs d'attribut, je crois
geodata au cerema et petits billets en géomatique
Hors ligne
#11 Tue 04 March 2014 20:56
- lauke
- Participant occasionnel
- Date d'inscription: 25 Feb 2014
- Messages: 10
Re: QGIS 2.0 : Filtre de règle avec $scale : problème d'expression
Bonjour,
je voulais que certaines entités apparaissent ou non selon l'échelle, sans avoir à passer par les propriétés de style (donc qu'elles disparaissent vraiment, et non pas simplement les réduire au max), donc j'entrais ces formules dans les filtres de règles ;
mais comme ça n'a pas fonctionné, j'ai fait disparaître les entités voulues en leur mettant la propriété de style "largeur du crayon" au minimum.
J'en suis encore au tâtonnement avec QGIS, il faut que je me fasse à son fonctionnement !
Dernière modification par lauke (Wed 05 March 2014 20:38)
Hors ligne
#12 Wed 05 March 2014 09:59
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 4119
Re: QGIS 2.0 : Filtre de règle avec $scale : problème d'expression
Bonjour,
je voulais que certaines entités apparaissent ou non selon l'échelle, sans avoir à passer par les propriétés de style (donc qu'elles disparaissent vraiment, et non pas simplement les réduire au max)
Si j'ai bien compris ton souhait, alors Style > "Ensemble de régles" devrait faire ton bonheur . C'est beaucoup plus simple et très puissant.
Tu cliques sur une ligne, et dans filtre tu saisis la requête de sélection càd "NATUREL" = 1 AND "PERMANENT"=1 pour ton premier cas et choisis ensuite dans la même fenêtre la plage d'échelle. Le (+) en bas de fenêtre te permet de rajouter de nouvelles lignes. Je joins une image de ce à quoi ton dernier exemple pourrait ressembler. Dès que tu changeras de seuil d'échelle, les entités à afficher apparaîtront/disparaîtront automatiquement.
C'est une écriture parmi d'autres car j'ai choisi de créer 3 règles différentes. Tu peux n'en créer qu'une et lui ajouter des seuils d'échelle, des seuils de catégorie .... Évidemment, faudra être vigilant sur la symbologie entre les différentes classifications mais ça, tu le verras à l'usage....
Hors ligne
#13 Wed 05 March 2014 18:09
- lauke
- Participant occasionnel
- Date d'inscription: 25 Feb 2014
- Messages: 10
Re: QGIS 2.0 : Filtre de règle avec $scale : problème d'expression
cf : "donc j'entrais ces formules dans les filtres de règles ;"
c'est ce que j'essaye de faire depuis le début, mais les formules que j'entre dans ces filtres (ceux des règles, établies dans l' "ensemble de règles"), comme par exemple celles que j'ai recopié dans ce sujet, ne fonctionnent pas (il n'y a pas de filtration).
Mais mon bonheur s'est en partie comblé grâce aux propriétés de style.
Merci quand même!
Dernière modification par lauke (Wed 05 March 2014 20:37)
Hors ligne
Pages: 1
- Sujet précédent - QGIS 2.0 : Filtre de règle avec $scale : problème d'expression - Sujet suivant