mardi 20 mai 2014

Géneration d'Atlas avec QGIS ou "comment automatiser l'édition d'un grand nombre de cartes" ...

C'est une tâche classique, et bien souvent fastidieuse : pour l'édition d'un document (typiquement un rapport de fin d'année, un diagnostic de terrain, un programme de visites et d'entretien, etc.), on doit éditer un grand nombre de cartes (typiquement une carte par commune, par tronçon, par ouvrage, etc.) ... 

Atlas tutoriel QGIS InSitu SIG


Depuis la version 2.0 - Dufour, QGIS dispose d'un Générateur d'Atlas qui permet d'automatiser cette tâche. La version 2.2 - Valmiera apporte encore quelques fonctionnalités supplémentaires. Pas d'hésitation à avoir : l'outil vous fera gagner un temps fou et vaut largement d'y consacrer quelques minutes d'apprentissage.

Avançons par étape ... 

Étape n°1 : on commence par la fin, c'est à dire qu'on se pose la question "que cherchai-je à faire ?" ; dans mon exemple, je veux éditer un inventaire des mares d'un territoire, avec localisation à différentes échelles, identification, données, et même photo de la mare.

Étape n°2 :  

On ouvre dans QGIS l'ensemble des couches nécessaires (par exemple : mares ; communes ; rivière ; zones NATURA2000 ; photos aériennes ; etc.). Puis on soigne la présentation de chaque couche pour rendre la carte lisible et élégante (symbolisations, étiquettes, transparence des couches, couleurs catégorisées, seuils d'affichage, etc ...).

Astuce : dans notre future fenêtre de mise en page, nous aurons un cadre de carte à l'échelle 1/25 000ème (carte principale) et un autre cadre de carte à l'échelle  1/500 000ème (carte de localisation à échelle large). Il y a plusieurs méthodes pour insérer plusieurs cadre de carte dans une même mise en page, mais j'ai une nette préférence pour le plugin "Layer Combination" : je n'explique pas ici son fonctionnement, du reste assez simple, mais vous pourrez toujours me questionner à ce sujet si vous bloquez.

Étape n°3 : 

Enfin, on ouvre une fenêtre de mise en page (Projet => nouveau composeur d'impression).
  • On commence par faire les choix de composition : taille et orientation du papier (A4 paysage dans mon cas), qualité de l'image en sortie (300 dpi par défaut), etc.
  •  Puis on définit les paramètres du générateur d'Atlas dans l'onglet du même nom : on choisit la couche qui servira de trame (dite "couche de couverture") ; dans mon cas, c'est la couche MARES2). J'ai aussi choisi de ne générer l'Atlas que pour les mares pour lesquelles nous disposons d'une photo (et donc le champ "lienphoto" n'est pas vide, c'est le sens du Filtrer avec : length("lienphoto") > 1) ; enfin, chaque fichier généré portera un nom de type "AtlasMare2014_code_mare", en faisant appel à la valeur du champs "code_mare".
  • Titre : on ouvre un cadre de texte, et l'on y place par exemple le texte suivant, qui fera appel au code de la mare en tant que variable qui s'adaptera à chaque page de l'Atlas :
ATLAS 2014 DES MARES DE LA DURDENT
MARE n° : [% "code_mare" %]
  •  Cartouche technique (sources et copyright, date de mise à jour, réalisé par ...). Si on veut que la date de mise à jour s'inscrive automatiquement, on peut utiliser la formule suivante : 
Mise à jour le : [% day( $now ) || '/' || month( $now ) || '/' || year( $now )%]
  •  Photo de la mare : nous allons utiliser la possibilité d'insérer du code html (et donc la possibilité d'insérer une image) en faisant appel à un champ "lienphoto" qu'il faut avoir auparavant créé et renseigné avec le chemin vers les photos correspondant à chaque mare ... le code à copier et à adapter à votre cas est le suivant : 
<img src="file:///[% "lienphoto" %]" style="width: auto; height: 100%; display: block; margin: 0px 0px 0px auto;" />



Étape n°4 : 

Nous y voilà : tout est prêt pour lancer l'Atlas ; avant de lancer le générateur (cela peut être long en fonction du nombre d'images à générer et du poids des couches affichées) on peut pré-visualiser les résultats du traitement avec la barre d'outil suivante :

 
Et c'est parti ...




Bonus :

Pour faire apparaitre l'objet concerné par la page de l'Atlas en cours de création dans un style différent des autres objets, on peut utiliser la fonction $atlasfeatureid dans la définition du style de la couche MARES : 

Ce qui donne le résultat suivant : 



Conclusion :

L'outil est vraiment utile et bien fait, même s'il nécessite de très bien se concentrer lors des premières utilisations ... pour l'anecdote et pour illustrer la façon dont progresse le logiciel, il s'agissait à la base d'une extension (développée par la société Oslandia), qui a été introduite dans les fonctions intégrées du logiciel au moment du passage à la version 2.0 ; merci à eux, et bon usage à tous.