#1 Fri 23 October 2020 09:23
- Juliette D
- Participant occasionnel
- Date d'inscription: 12 Dec 2013
- Messages: 13
QGIS Atlas: filtrer une table a chaque page
Bonjour,
Je parcours depuis quelques jours la documentation QGIS et les forums pour trouver une solution à ma question. Je me résous à poster ici en espérant que le sujet n’a pas déjà été traité.
J’aimerais exploiter la partie Atlas de la mise en page de QGIS pour générer une table de donnée spécifique à chaque page de mon atlas. Je travaille avec une base Spatialite sous QGIS 3.10.
Pour expliciter :
Je dispose d’une table « TYPE_CARTE » qui indique le nom de chaque type de carte. C’est la table que j’utilise pour générer mon atlas.
Je dispose d’une autre table « LISTE_DONNEE » qui contient une liste de données. Pour chaque donnée il est possible de savoir si elle est présente ou non dans un type de carte (colonne pour chaque type de carte).
Dans la partie Mise en page de QGIS, je n’ai pas de difficulté particulière pour générer l’atlas, avec une page par type de carte. Dans mon exemple je génère bien 3 pages (type A, B et C).
C’est pour ajouter le tableau de données que cela se gâte.
J’utilise le menu Ajouter un objet > Ajouter Table d’attribut et j’ajoute ma table « LISTE_DONNEE ».
Dans les propriétés de l’objet table d’attribut il est possible d’ajouter un filtre.
Dans cet exemple je peux ajouter un filtre pour indiquer que je ne veux QUE les données présentent sur le typeB.
Tout mon problème est que ce filtre est "statique" et que j'aimerais qu'il change à chaque page (pour la page TypeA >> TypeA='oui', pour la page TypeB >> TypeB = 'oui' etc.)
Je précise avoir essayé de chercher du côté des variables de qgis mais je n’ai réussi qu’à définir des variables statiques.
J’ai également déjà essayé de modifier la requête en appelant le nom_type : [% "nom_type" %] = 'oui'
J'imagine que je pourrais également créer des vues dans ma base spatialite, mais je ne sais pas comment appeler une vue différente pour chaque page de l’atlas.
Je vous remercie d’avance pour toutes vos bonnes idées à ce sujet !!!
Hors ligne
#2 Mon 26 October 2020 12:09
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3947
Re: QGIS Atlas: filtrer une table a chaque page
Bonjour,
En mode aveugle car pas testé sur des données, mais inspiré de cette note de la doc, essayez (les guillemets double sont de rigueur)
Code:
attribute(@atlas_feature , "nom_type")='oui'
Quoique, à la réflexion, je crains que ce soit incomplet. Il va y avoir un couac de formatage. Pourriez-vous partager un bout de projet et data? Merci
ou
Code:
attribute(attribute(@atlas_feature , 'nom_type'))='oui'
Hors ligne
#3 Mon 26 October 2020 21:34
- Juliette D
- Participant occasionnel
- Date d'inscription: 12 Dec 2013
- Messages: 13
Re: QGIS Atlas: filtrer une table a chaque page
Bonjour
Merci mille fois !
La deuxième proposition fonctionne parfaitement : attribute(attribute(@atlas_feature , 'nom_type'))='oui'
Grâce à la documentation je comprends un tout petit peu mieux.
J'avoue que le double attribute reste un peu un mystère pour moi.
Pourquoi est-il nécessaire d'appeler "attribute(attribute" ?
Si j'ai un bon raisonnement, le double attribute vient du fait que je souhaite transformer une variable de mon premier jeu de donnée "nom_type" en attribut pour le deuxième tableau. Mais je ne suis pas sur...
Souhaitez vous toujours mes données ?
Dans tous les cas cela me permet d'avancer, encore merci !
Juliette D.
Hors ligne
#4 Tue 27 October 2020 09:44
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3947
Re: QGIS Atlas: filtrer une table a chaque page
Bonjour,
Pourquoi est-il nécessaire d'appeler "attribute(attribute" ?
Si j'ai un bon raisonnement, le double attribute vient du fait que je souhaite transformer une variable de mon premier jeu de donnée "nom_type" en attribut pour le deuxième tableau. Mais je ne suis pas sur...
Oui, c'est à peu près cela, on fait une transposition dans laquelle la valeur attributaire de l'atlas devient le champ à évaluer dans la table en cours: le attribute au centre renvoie la valeur 'typeA', 'typeB', typeC' de l'atlas et on réutilise cette valeur comme champ dans la table csv pour renvoyer 'oui' ou 'non'.
Souhaitez vous toujours mes données ?
Non, c'était pour m'éviter d'en monter moi-même pour chercher une solution mais comme elle est déjà trouvée, pas besoin
Dans tous les cas cela me permet d'avancer, encore merci !
De rien. Bon courage!
Hors ligne