banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GEODATA DAYS 2024

#1 Fri 23 December 2022 09:03

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 369

QGIS: Carte Atlas sur une page

bonjour
je souhaite réaliser un atlas de 364 monuments, ils sont petits et donc j'aimerais en disposer 9 par page.
comment est-ce possible ?
merci LJ

Hors ligne

 

#2 Fri 23 December 2022 12:25

Tixi
Participant actif
Date d'inscription: 6 Jun 2022
Messages: 114

Re: QGIS: Carte Atlas sur une page

Question tres interessante, impossible que personne n'ait eu ce probleme avant.
Il est evident qu en mettant neuf cartes conduites par l atlas , elle seront toutes centrees sur la meme entite.

Une solution serait de separer les 364 monuments en 9 couches d'une quarantaine d'entites, ca doit marcher. Mais il doit y avoir mieux.

J ai pense a une autre solution qui utilise l extention de la carte : Xmin, Y min, X max Y max. Il faudrait recuperer les coordonnees du centroid de l entite N+1 de l atlas et y ajouter quelques metres, decametres ou hectometres pour avoir Xmax, en retrancher autant pour avoir X min. Pareil pour Y. et ce , pour les entites N+1 a N+8.
Je n ai pas encore reussi a le faire.

Par contre, il resterait un probleme, pour que la premiere carte ne passe pas, a la seconde iteration, a l entite 2 mais a l entite 10, puisque l entite 2 serait deja sur la carte 2 de la premiere iteration. Cela dit, ce probleme doit etre solutionnable d une maniere ou d une autre.

Hors ligne

 

#3 Fri 23 December 2022 14:42

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 992

Re: QGIS: Carte Atlas sur une page

Il me semble que la solution est donnée ici :
https://gis.stackexchange.com/questions … atlas-page

Avec des expressions pour controler l'emprise (extent) des cartes, basées sur "@atlas_featureid" + 1 à N selon la position de la carte (ex. : "@atlas_featureid + 5" pour la 5 carte de la page.

Code:

with_variable( 'h',
   bounds_width( map_get(item_variables('map1'),'map_extent')),
   y(geometry(get_feature_by_id( @atlas_layername,  @atlas_featureid + 1  )))-@h/2)

Sylvain M.

Hors ligne

 

#4 Sat 24 December 2022 13:03

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 369

Re: QGIS: Carte Atlas sur une page

Merci
je pense avoir mis les formules correctes sur ma 'carte 2', comme ceci, en changeant le nom de la carte et pour les xymax -> + au lieu de -
mais cela ne semble pas marcher, pas sur de comprendre les w et h ?

les formules semblent fonctionner mais me ramènent les même que la Carte 1 !?

Code:

xmin -> with_variable( 'w',
   bounds_width( map_get(item_variables('Carte 1'),'map_extent')),
   x(geometry(get_feature_by_id( @atlas_layername,  @atlas_featureid + 1  )))-@w/2)

ymin -> with_variable( 'h',
   bounds_width( map_get(item_variables('Carte 1'),'map_extent')),
   y(geometry(get_feature_by_id( @atlas_layername,  @atlas_featureid + 1  )))-@h/2)

xmax -> with_variable( 'w',
   bounds_width( map_get(item_variables('Carte 1'),'map_extent')),
   x(geometry(get_feature_by_id( @atlas_layername,  @atlas_featureid + 1  )))+@w/2)

ymax -> with_variable( 'h',
   bounds_width( map_get(item_variables('Carte 1'),'map_extent')),
   y(geometry(get_feature_by_id( @atlas_layername,  @atlas_featureid + 1  )))+@h/2)

Dernière modification par laurent00 (Sat 24 December 2022 13:09)

Hors ligne

 

#5 Sat 24 December 2022 14:58

Tixi
Participant actif
Date d'inscription: 6 Jun 2022
Messages: 114

Re: QGIS: Carte Atlas sur une page

Chez moi, ca marche, avec une modification : 'Carte 1' s'appelle 'Map 1' car j ai une version anglaise du logiciel je suppose. Il faut que le nom de votre carte soit bien le bon. Vous pouvez double cliquer sur le nom dans la liste des elements pour le changer si besoin.

Hors ligne

 

#6 Sat 24 December 2022 15:38

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 369

Re: QGIS: Carte Atlas sur une page

je suis passé sur une dénomination map1 et map2 et cela semble fonctionner
sauf que les coordonnées ramenées sont x 100 000 et du coup ne s'affichent pas, si je multiplie les formules par 100 000, d'une part elles sont arrondies et donc perdent en précision et en plus l'échelle est très réduite !?
je pense qu'il y a un souci avec ma configuration de  projet, je suis sur un SCR WGS 84 EPSG 4326 QGIS version 3.22
aussi je zoom assez fortement sur des images satellites 1/300

LJ

Dernière modification par laurent00 (Sat 24 December 2022 15:39)

Hors ligne

 

#7 Sat 24 December 2022 15:45

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 369

Re: QGIS: Carte Atlas sur une page

4326 est une projection degré
est-il possible qu'il faille passer par une projection métrique ?

effectivement cela fonctionne maintenant, les fonctions appelées nécessitent donc une projection métrique !

LJ

Dernière modification par laurent00 (Sat 24 December 2022 15:49)

Hors ligne

 

#8 Sat 24 December 2022 15:56

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 369

Re: QGIS: Carte Atlas sur une page

malheureusement lorsque je change de page dans mon atlas,
il recommence la page au id : 2 au lieu du 3 !?

une idée ?
LJ

Hors ligne

 

#9 Sat 24 December 2022 17:20

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 369

Re: QGIS: Carte Atlas sur une page

laurent00 a écrit:

malheureusement lorsque je change de page dans mon atlas,
il recommence la page au id : 2 au lieu du 3 !?


peut être qu'il y a plus propre, mais j'ai créé une colonne "pages_catalogue" dans ma couche de base et attribué un numéro de page au id qui convient pour que la page commence par ce id,
ensuite dans l'atlas je filtre sur
"page_catalogue"  IS NOT  NULL

ça va car j'ai 364 entités et 18 miniatures par page

LJ

Dernière modification par laurent00 (Sat 24 December 2022 17:21)

Hors ligne

 

#10 Sat 24 December 2022 17:49

Tixi
Participant actif
Date d'inscription: 6 Jun 2022
Messages: 114

Re: QGIS: Carte Atlas sur une page

Oui, si ca marche, c'est bien.
Sinon, j'avais pense a filtrer par
$id  % 9 = 0
(le reste de la division par neuf est nul)

Mais du coup, je me demande si ca s applique a toutes les cartes ou seulement a la carte de reference c est a dire la carte 1 par defaut, voir le 1er des 4 onglets (appele Layout chez moi, disposition ou mise en page probablement chez vous)

Hors ligne

 

#11 Sat 24 December 2022 19:32

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 369

Re: QGIS: Carte Atlas sur une page

oui tout fonctionne
seul soucis sur la dernière page toutes les cartes apparaissent identiques, elles se répètent à la suite du dernier id
comment leur dire de ne pas s'afficher ?

LJ

Hors ligne

 

#12 Sun 25 December 2022 11:48

Tixi
Participant actif
Date d'inscription: 6 Jun 2022
Messages: 114

Re: QGIS: Carte Atlas sur une page

Pour ne pas afficher les cartes, il faut aller tout en bas de l onglet des propriétés de la carte, dans le menu "Rendu". C est l avant dernier normalement, le dernier étant "Variables"

La il y a une case a cocher : Exclure de l export. Il faut la cocher et mettre une règle du genre
if ("id" = 364,'1','0')
Si l'id est 364, exclure de l export, sinon, ne rien faire.

En espérant que l id de vos monument soit de 1 a 364, sinon il faut adapter la valeur et/ou le champ. Comme l’étendue des cartes est conduite par des règles contenant des N+1, N+2 ..., peut être vous faudra t il du > 364 au lieu de = 364
je crois que 1 est pour exclure de l export, je n ai pas fait le test. Sinon, il faut inverser le 1 et le 0
Il faut mettre cette règle sur vos cartes, sauf celle qui montre le dernier monument.

Les cartes seront cachées de l export, mais pas du composeur, logique, sinon vous ne pourriez plus les sélectionner pour les modifier.

Joyeux Noel

Hors ligne

 

#13 Sun 25 December 2022 21:59

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 369

Re: QGIS: Carte Atlas sur une page

merci cela fonctionne avec la formule suivante

Code:

if("fid" + 23 > 365, 1,0)

il faut effectivement ajouter à chaque carte id + n° de la carte comme dans les formules d'emprise qui appelle

Code:

 @atlas_featureid + 23

sur chaque carte

du coup 1 = non et 0 = oui

LJ

Dernière modification par laurent00 (Sun 25 December 2022 22:00)

Hors ligne

 

#14 Mon 26 December 2022 09:54

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 369

Re: QGIS: Carte Atlas sur une page

dernier élément a priori cela n'est pas reproductible en l'état dans un rapport.
la boite générer un atlas est différent de éditer un rapport !?

la solution aussi avec le rendu et la formule marche également if("fid" + 23 > 365, 1,0) marche aussi avec la partie opacité if("fid" + 23 > 365, 0,100), attention pas avec tous les modes de fusion !

aussi il n'est pas possible avec cette solution d'appeler les données attachées à chaque miniature, seulement celles de la première miniature de chaque page d'atlas

résultat ici -> https://www.researchgate.net/profile/La … UpdatesLog


LJ

Dernière modification par laurent00 (Tue 27 December 2022 14:54)

Hors ligne

 

#15 Tue 27 December 2022 20:04

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 369

Re: QGIS: Carte Atlas sur une page

je crois qu'il serait intéressant de trouver ou développer un atlas qui permettent de faire des atlas de miniatures genre catalogue
peut être avec le développement à venir des rapports qui me semble encore limité

LJ

Hors ligne

 

#16 Tue 03 January 2023 15:23

loicbcn
Participant occasionnel
Date d'inscription: 22 Jan 2018
Messages: 26

Re: QGIS: Carte Atlas sur une page

Bonjour,
En créant une nouvelle couche attributaire pour gérer l'atlas, avec un enregistrement pour chaque page, et 9 champs contenant les emprises de chaque carte de la page sous forme de tableau (array) [minX,minY,maxX,maxY], il doit être possible d'obtenir 9 vignettes par page.

Restera à gérer la dernière page, car 364 n'est pas divisible par 9. donc, 4 vignettes de cette dernière page n'auront pas d'emprise pour afficher de contenu.

Hors ligne

 

#17 Wed 04 January 2023 13:06

loicbcn
Participant occasionnel
Date d'inscription: 22 Jan 2018
Messages: 26

Re: QGIS: Carte Atlas sur une page

Pour développer un peu le message précédent,
On peut générer une table de ce type, avec une ligne par page de l'atlas ... Ici, il y aura 4 éléments par page.


|line|elem1|elem2|elem3|elem4|
|----|-----|-----|-----|-----|
|1   |json |json |json |json |
|2   |json |json |json |json |
|3   |json |json |json |json |
...

Et on stocke dans du json les données de chaque entité à cartographier, le nom de l'entité et l'emprise par exemple (ici, les points représentent des communes (chefs lieux d'admin express)).
{"nom":"Mairie de Brive-la-Gaillarde","emprise":[583824.3,6451231.3,585824.3,6453231.3]}
{"nom":"Mairie de Muret","emprise":[563845.4,6262917.8,565845.4,6264917.8]}
...

L'atlas peut être généré en utilisant cette table comme couche de couverture, puis dans les emprises (min X, min Y, max X, max Y) on peut saisir:
  from_json("elem1")['emprise'][0]
  from_json("elem1")['emprise'][1]
  from_json("elem1")['emprise'][2]
  from_json("elem1")['emprise'][3]
Pour la première carte de la page,
  from_json("elem2")['emprise'][0]
...
Pour la 2ème carte, etc...

ça fait un peu de saisie, mais pour une seule page.

Et si on veut que chaque com de commune apparaisse au dessus de chaque carte, on peut mettre une étiquette avec comme valeur:
[%from_json( "elem1" )['nom']%] ...

Pour la dernière page qui peut contenir moins de 4 éléments, on peut jouer sur l'option "rendu" dans les propriétés de l'objet dans le composer.
en donnant cette valeur à l'opacité: case when "elem1" is null then 0 else 100 end


Finalement, le plus compliqué, c'est de générer cette table.
J'ai généré celle de cet exemple avec le dbmanager de QGIS (couches virtuelles) avec cette requête sur une table nommée "prefs_r76" issue des chefs lieux d'admin express, pour des pages contenant 4 éléments ... il faut la modifier si on veut + ou - d' éléments / page.

Code:

with datas as (
        select p.*, 
        cast(ceil(cast(ROW_NUMBER() OVER () as float) / 4) as int) page,
        (ROW_NUMBER() OVER ())%4 +1 idcarte,
            json_object('nom', nom_chf, 'emprise', 
                json_array(    
                    xmin(st_buffer(geometry, 1000)), 
                    ymin(st_buffer(geometry, 1000)), 
                    xmax(st_buffer(geometry, 1000)), 
                    ymax(st_buffer(geometry, 1000)))) as jsondata
        from prefs_r76 p
        order by page, idcarte
)        
select page, 
    max(case when idcarte = 1 then jsondata end) elem1,
    max(case when idcarte = 2 then jsondata end) elem2,
    max(case when idcarte = 3 then jsondata end) elem3,
    max(case when idcarte = 4 then jsondata end) elem4
from datas
group by page

Voilà. C'est un peu long, et plus on veut d'éléments / page, plus ce sera long, mais ça fonctionne.

Dernière modification par loicbcn (Wed 04 January 2023 16:08)

Hors ligne

 

#18 Fri 06 January 2023 20:40

laurent00
Participant assidu
Date d'inscription: 6 Aug 2007
Messages: 369

Re: QGIS: Carte Atlas sur une page

loicbcn a écrit:


merci je testerai aussi
LJ

Hors ligne

 

Pied de page des forums

Powered by FluxBB