Pages: 1
- Sujet précédent - QGIS 2.16: atlas avec légende qui ne couvre pas certaines couches - Sujet suivant
#1 Thu 15 September 2016 15:58
- jpjp74
- Participant assidu
- Date d'inscription: 21 Oct 2011
- Messages: 159
QGIS 2.16: atlas avec légende qui ne couvre pas certaines couches
Bonjour,
Malgré mes recherches (je ne dois pas utiliser les bons mots-clefs) je n'arrive pas à trouver.
Je suppose que cela doit être possible avec QGIS.
Comment faire pour que lors de l'export de mon atlas (en pdf par exemple), la légende puisse être légèrement déplacée automatiquement sur certaines pages afin qu'elle ne couvre pas les objets d'une couche donnée ?
Merci d'avance pour vos réponses, bonne journée.
Win 10 et QGIS 328
Hors ligne
#2 Thu 15 September 2016 17:54
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: QGIS 2.16: atlas avec légende qui ne couvre pas certaines couches
Salut,
La difficulté est que la légende ne peut pas déterminer quels objets sont affichés sous sa position dans l'objet carte et la "valeur" à tes yeux de ceux-ci.
Perso, l'option (facile, peut-être) que j'ai trouvée pour contourner ça est d'avoir un cartouche où la légende ne chevauche pas l'objet carte.
Hors ligne
#3 Thu 15 September 2016 18:51
- jpjp74
- Participant assidu
- Date d'inscription: 21 Oct 2011
- Messages: 159
Re: QGIS 2.16: atlas avec légende qui ne couvre pas certaines couches
Merci pour cette réponse.
J'imaginais qu'avec qu'avec un "code" du genre "ne jamais chevaucher la couche A et que la légende se décale. Ca me parait effectivement compliqué voire infaisable, mais quand je lis sur le forum ce que certains arrivent à faire, je me dis qu'il n'y a (presque) pas de limites . : )
Oui j'avais pensé à cette solution, mais elle me pose 2 problèmes que je ne sais pas bien résoudre :
Le premier, si je comprends bien ce que tu proposes, c’est que du coup, je vais avoir une bande blanche (sur la droite par exemple) de mes exports dans la mesure où la légende ne prendra pas toute la place. Pas fondamental, mais pas toujours esthétique.
Le second (je ne dois peut-être pas m'y prendre de la bonne façon la plus juste ?), c'est que si je modifie la taille de ma carte dans le composeur, QGIS change automatiquement l'échelle affichée au moment de l'export généré par l'atlas.
Au lieu d'avoir 1/15000ème (affichée dans le composeur) celle-ci devient 1/15870 par exemple dans les fichiers générés par l'export. J'avais déjà constaté cela si je change la valeur de marge dans les paramètres générés par l'atlas.
Bonne soirée.
Win 10 et QGIS 328
Hors ligne
#4 Tue 27 September 2016 16:52
- Djperou
- Juste Inscrit !
- Date d'inscription: 11 Mar 2014
- Messages: 6
Re: QGIS 2.16: atlas avec légende qui ne couvre pas certaines couches
Bonjour,
J'ai aussi rencontré le même problème des légendes "sur" la carte qui se superposent aux entités et j'ai trouvé une astuce qui pourrait peut être t'aider.
L'idée n'est pas de modifier l'emplacement de la légende mais de jouer avec l'emprise de la carte.
Pour résumer mon projet (en espérant qu'il suive la même logique que le tien) :
Je devais faire une analyse sur une grande ville avec un certain nombre de couches à afficher puis avoir un zoom par quartier avec les mêmes couches. J'ai donc voulu faire un atlas basé justement sur cette couche "quartiers', avec la légende "sur" la carte pour des raisons esthétiques. Mais les formes de ces quartiers étant très différentes, lorsque j'adaptais la position de la légende pour l'un, cette dernière en recouvrait un autre etc.
Comme l'a dit Santanna, je ne pense pas que ce soit possible pour la légende de bouger en fonction des couches en-dessous d'elle.
La solution que j'ai trouvé nécessite un prérequis, c'est que ta légende soit toujours au même endroit (pour mon projet j'ai choisi à droite de ma carte mais bien "sur" celle-ci).
Ensuite l'idée est de spécifier l'emprise de ta carte grâce à "Valeur définie par des données" (le petit logo sur la droite de chaque ligne min X min Y ... dans le composeur). Pour mon projet la légende étant sur la droite et ayant une orientation classique ("nord en haut"), j'ai joué avec le min X et max X pour décaler l'emprise sur l'axe est/ouest.
Dans l'outil "valeur définir par des données" de min X j'ai donc entré ce code :
Code:
x_min(transform( @atlas_geometry ,'EPSG:4326','EPSG:3857'))-(((( x_max(transform( @atlas_geometry,'EPSG:4326','EPSG:3857')))-( x_min(transform( @atlas_geometry,'EPSG:4326','EPSG:3857'))))/100)*5)
et pour max X :
Code:
x_max(transform( @atlas_geometry ,'EPSG:4326','EPSG:3857'))+(((( x_max(transform( @atlas_geometry,'EPSG:4326','EPSG:3857')))-( x_min(transform( @atlas_geometry,'EPSG:4326','EPSG:3857'))))/100)*30)
Explication :
@atlas_geometry renvoie la géométrie de l'entité courante de l'atlas (dans mon cas un quartier)
transform() me sert à homogénéiser le système de projection, ma couche de quartier étant en 4326 et ma carte en 3857.
x_min() renvoie le point le plus à l'ouest de la géométrie (pour x_max() c'est le point le plus à l'est).
Ainsi,
Code:
(((( x_max(transform( @atlas_geometry,'EPSG:4326','EPSG:3857')))-( x_min(transform( @atlas_geometry,'EPSG:4326','EPSG:3857'))))
me renvoie la "largeur" de la carte.
Le code de min X décale donc l'emprise de 5 % [/100)*5] vers l'ouest
Le code de max X décale quant à lui l'emprise de 30% vers l'est [/100*30]
-> pour chaque carte le quartier est donc décalé vers l'ouest et il ne se retrouve donc plus en dessous de ma légende.
Après à toi d'adapter le code et notamment les poucentages en fonction de la taille de ta légende.
Je ne suis pas sûr que ce code fonctionne dans tous les cas mais pour mon projet avec 15 quartiers ça a fait le job à chaque fois.
En espèrant que ça puisse t'aider ;-)
PS: active quand même les "paramètres contrôlés par l'atlas" dans le composeur en mettant une marge (perso j'ai mis 20 %) pour que les min Y et max Y s'adaptent quand même;
Hors ligne
#5 Tue 27 September 2016 17:30
- jpjp74
- Participant assidu
- Date d'inscription: 21 Oct 2011
- Messages: 159
Re: QGIS 2.16: atlas avec légende qui ne couvre pas certaines couches
Bonsoir,
Merci beaucoup pour cette solution. Je vais tester.
Par contre, ma couche et ma carte sont dans la même projection. Dois-je quand même renseigner ces codes, avec le même EPSG, ou est-ce que je dois supprimer complètement cette partie ?
Je n'ai jamais manipulé ces codes. L'occasion de commencer ...
Bonne soirée.
Win 10 et QGIS 328
Hors ligne
#6 Tue 27 September 2016 18:51
- Djperou
- Juste Inscrit !
- Date d'inscription: 11 Mar 2014
- Messages: 6
Re: QGIS 2.16: atlas avec légende qui ne couvre pas certaines couches
Bonsoir,
Non en effet tu n'en as pas besoin et le code sera surement plus clair du coup ^^
Pour min X ça donne donc :
x_min(@atlas_geometry)-((((x_max(@atlas_geometry))-( x_min(@atlas_geometry))/100)*5)
et pour max X :
x_min(@atlas_geometry)+((((x_max(@atlas_geometry))-( x_min(@atlas_geometry))/100)*30)
Bon courage si tu commences ce genre de code mais tu verras ça vaut vraiment le coup ;-)
Bonne soirée.
Hors ligne
#7 Tue 04 October 2016 16:34
- jpjp74
- Participant assidu
- Date d'inscription: 21 Oct 2011
- Messages: 159
Re: QGIS 2.16: atlas avec légende qui ne couvre pas certaines couches
Bonjour,
Merci pour cet aide. Et toutes mes excuses pour mon silence, ma dispo n'est pas terrible en ce moment.
J'ai essayé cette méthode, mais je dois vraiment m'y prendre mal ...
Dès que je rentre la ligne de code (copier coller de ce que tu as posté) dans minX, mon échelle affiche 3308862 et évidemment ça ne donne pas grand chose.
Je suis sur un format A3 avec une toute petite légende positionnée sur la droite, au milieu.
Qu'est ce qui cloche que je ne fais pas correctement ?
Je définis la ouche de couverture, le type de sortie, les paramètres définis par l'atlas.
Ensuite je clique à droite de min X > editer et je copie la ligne que tu as posté (au passage, QGIS me dit que l'expression est invalide et je rajoute une parenthèse tout à la fin de la ligne, ça semble lui convenir)
Et là l'échelle devient n'importe quoi.
Une idée ?
Merci encore.
Bonne journée.
Win 10 et QGIS 328
Hors ligne
#8 Thu 06 October 2016 09:54
- Djperou
- Juste Inscrit !
- Date d'inscription: 11 Mar 2014
- Messages: 6
Re: QGIS 2.16: atlas avec légende qui ne couvre pas certaines couches
Bonjour,
En effet, c'est possible que le second code que j'ai posté comporte une erreur car je n'avais pas la possibilité de le tester à ce moment là.
Vu le problème que tu évoques je pense que ça vient de la projection de la carte et de ta couche. En tout cas pour moi c'était le problème pour lequel j'avais dû faire le code qui modifiait la projection (celui de mon premier dans mon premier post).
Ainsi, il faut que tu vérifie bien que la projection de ta carte (petit bouton "EPSG" en bas à droite de l'espace de travail) et la projection de ta couche (clic droit sur ta couche> propriétés>général >SCR de référence) soient identiques.
Sinon tu peux essayer aussi de faire tous tes paramètres d'atlas avant de copier le code (où inversement, histoire de voir si c'est pas juste un problème de mise à jour des variables).
Aussi n'hésite pas à utiliser l'aperçu de l'atlas (bouton dans la barre des tâches en haut du composeur. S'il n'est pas là, fait un clic droit sur le bandeau des différentes outils et ajoute la rubrique "Atlas") pour voir le rendu en passant de carte en carte. ça te permettra peut être voir d'où vient le souci.
Enfin, si ça ne marche toujours pas, peut-être que ça vient de la version de QGIS car je suis sur la 2.16.0.
En espérant pour toi que ça fonctionne !
Dernière modification par Djperou (Thu 06 October 2016 09:54)
Hors ligne
Pages: 1
- Sujet précédent - QGIS 2.16: atlas avec légende qui ne couvre pas certaines couches - Sujet suivant