#1 Wed 10 November 2021 09:05
- Hydrolithe
- Participant assidu
- Lieu: Lyon
- Date d'inscription: 21 Apr 2010
- Messages: 223
QGIS 3.16: Export d'atlas dans differents dossiers
Bonjour,
J'ai paramétré un atlas qui fonctionne sous Linux bien mais je souhaiterais savoir s'il est possible de l'exporter dans différents dossiers (un par nom de commune) en utilisant un champ de la couche définie comme couche de couverture.
Par exemple en utilisant une expression dans "Sortie" de l'onglet "Atlas" (mais celle ci-dessous ne fonctionne pas) :
Code:
'chemin_fixe'||"nom_commune"||'/'||"nom_fichier"
J'ai l'impression que QGIS n'arrive pas à créer des dossiers par lui-même lors de l'export.
Si certains d'entre vous ont déjà mis en place ce genre d'export je suis preneur.
Pierre
Hors ligne
#2 Wed 10 November 2021 18:52
- michel56
- Participant assidu
- Lieu: Lorient
- Date d'inscription: 14 Jul 2012
- Messages: 474
Re: QGIS 3.16: Export d'atlas dans differents dossiers
avec cette commande:
'chemin_fixe"||'/'||"nom_commune"||'/'||"nom_fichier"
ou
'chemin_fixe"||'//'||"nom_commune"||'//'||"nom_fichier"
Dernière modification par michel56 (Thu 11 November 2021 12:37)
Opérateur cartographique & DAO & PHP.
Hors ligne
#3 Fri 12 November 2021 09:05
- Hydrolithe
- Participant assidu
- Lieu: Lyon
- Date d'inscription: 21 Apr 2010
- Messages: 223
Re: QGIS 3.16: Export d'atlas dans differents dossiers
Bonjour,
Je n'avais pas précisé mais dans mon 'chemin_fixe', il y a bien un slash à la fin.
J'avais déjà testé en doublant les slash mais sans succès.
Pierre
Hors ligne
#4 Fri 12 November 2021 12:36
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: QGIS 3.16: Export d'atlas dans differents dossiers
J'ai l'impression que QGIS n'arrive pas à créer des dossiers par lui-même lors de l'export.
Peut-être que QGis ne peut effectivement exporter que dans des dossiers existants.
Si c'est le cas, vous pourriez créer vos dossiers en ligne de commande en préalable, avec la commande "mkdir"
Par exemple, si vous avez exporté dans un TXT la liste des répertoires, j'ai vu cette commande qui devrait faire l'affaire :
Code:
$ cat repertoires.txt | xargs mkdir
Sylvain M.
Hors ligne
#5 Mon 15 November 2021 09:27
- GlaDal
- Participant assidu
- Date d'inscription: 30 Aug 2013
- Messages: 1085
Re: QGIS 3.16: Export d'atlas dans differents dossiers
Bonjour,
Une autre solution consisterait à utiliser un modèle de traitement pour faire le taf. Pour sûr, l'ayant déjà fait, ça fonctionne mais il y a peu de doc sur le sujet. Sinon, il faudra attendre les journées Qgis utilisateurs en janvier 2022 et participer à l'un des ateliers qui présentera cette fonction ! :-)
Hors ligne
#6 Tue 16 November 2021 11:49
- Hydrolithe
- Participant assidu
- Lieu: Lyon
- Date d'inscription: 21 Apr 2010
- Messages: 223
Re: QGIS 3.16: Export d'atlas dans differents dossiers
Bonjour,
Merci pour vos retours. Je suis finalement passé par du python pour la création des dossiers et les exports et ça fonctionne bien.
Pierre
Hors ligne
#7 Mon 07 March 2022 13:23
- Geomatgirl
- Juste Inscrit !
- Date d'inscription: 7 Mar 2022
- Messages: 1
Re: QGIS 3.16: Export d'atlas dans differents dossiers
Bonjour Hydrolithe,
Votre message date de novembre dernier mais je pense que votre solution en python répondrait à mon problème sauf que, beaucoup de boulot engendre moins de pratique et donc ...
Nous avons besoin de sortir un Atlas de tous les risques (il y en a au moins 7) de notre département pour chacune de nos communes (plus de 500). Les 7 images "risques" exportée de l'Atlas seront insérées dans un document Writer de libre office par lien relatif.
Aussi, j'apprécierais si vous pouviez partager votre solution ou m'aiguiller pour me permettre de répondre à cette demande de nos services.
Je vous remercie de votre aide par avance.
Bien cordialement.
Hors ligne
#8 Thu 31 March 2022 15:50
- Hydrolithe
- Participant assidu
- Lieu: Lyon
- Date d'inscription: 21 Apr 2010
- Messages: 223
Re: QGIS 3.16: Export d'atlas dans differents dossiers
Bonjour,
Désolé pour le retard de ma réponse.
Alors pour le script python, je me suis très largement inspiré de recherches sur les différents forums (GeoRezo ou GIS Stack Exchange). Donc je n'ai rien inventé, j'ai juste adapté à mon besoin. Les puristes me pardonneront si certaines parties du code ne sont pas optimisées ;-)
Je précise que ces scripts sont utilisées dans un environnement Linux, il y a sûrement des choses à adapter si vous êtes sous Windows.
Voici le script python d'export de l'atlas qui exporte une ou plusieurs cartes par communes dans un dossier commune (ex : cartes paris_1 et paris_2 dans le dossier paris) à partir des données attributaires de la couche utilisée pour l'atlas. Le chemin de sortie est paramétrable notamment via "output_com_dir" :
Code:
#-*- coding:utf8 -*- #-------------------------------------------------------------------------- # description : script d'export des cartes issues de l'atlas au format png #-------------------------------------------------------------------------- from qgis.core import QgsApplication, QgsProject, QgsLayoutExporter #ajout de gdal pour supprimer l'erreur : ERROR 6:the PNG driver does not support update access to existing datasets from osgeo import gdal gdal.PushErrorHandler('CPLQuietErrorHandler') import os def export_atlas(qgs_project_path, layout_name, outputs_folder): # Open existing project project = QgsProject.instance() project.read(qgs_project_path) # Open prepared layout that as atlas enabled and set layout = project.layoutManager().layoutByName(layout_name) # Start atlas iterator atlas = layout.atlas() if atlas.beginRender(): while atlas.next(): exporter = QgsLayoutExporter(layout) settings = QgsLayoutExporter.ImageExportSettings() filename = atlas.currentFilename()+'.png' output_com_dir = os.path.join(outputs_folder, atlas.nameForPage(atlas.currentFeatureNumber())) if not os.path.exists(output_com_dir): os.makedirs(output_com_dir) filename_path = os.path.join(output_com_dir, filename) print(f'Export '+atlas.currentFilename()) exporter.exportToImage(filename_path, settings) print(f'finished') atlas.endRender() else: print('WARNING - No atlas features available for export !') def main(): # Start a QGIS application without GUI qgs = QgsApplication([], False) qgs.initQgis() #Path of .qgz project project_path = 'chemin du projet a renseigner' output_folder = 'dossier d export a renseigner' layout_name = 'nom du composeur a renseigner' export_atlas(project_path, layout_name, output_folder) # Close the QGIS application qgs.exitQgis() if __name__ == "__main__": main()
Ce script python est ensuite exécuté dans un script shell (sous Linux, sous Windows il faudra sûrement passer par un .bat) qui a pour but de déplacer les dossiers "communes" générés par le script python vers des dossiers "groupements" (regroupement de plusieurs communes). L'idée est de se baser sur un fichier .csv qui liste pour chaque commune le groupement correspondant :
Code:
#!/bin/bash #-------------------------------------------------------------------------- # description : script permettant de : # - lancer l'export des cartes de l'atlas via le script python # - deplacer des dossiers "communes" vers les dossiers "groupements" correspondants #-------------------------------------------------------------------------- #export atlas via script python python3 /chemin_vers_script/export_atlas_png.py #deplacer dossiers "communes" -> dossiers "groupements" FILE=$(cat /chemin_vers_liste/liste_groupements.csv) echo $FILE for var in $FILE ;do GROUPEMENT=$(echo $var | awk -F";" '{ print $1 }') COMMUNE=$(echo $var | awk -F";" '{ print $2 }') echo "$GROUPEMENT - $COMMUNE" mv /chemin_vers_dossiers_communes/$COMMUNE/ /chemin_vers_dossiers_groupements/$GROUPEMENT/ done
Enfin, il est possible d'utiliser ce script shell dans un cron (Linux) ou dans une tâche planifiée (Windows) pour automatiser l'exécution à un intervalle donné (toutes les nuits par exemple).
Pierre
Dernière modification par Hydrolithe (Thu 31 March 2022 15:51)
Hors ligne
#9 Thu 31 March 2022 17:24
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: QGIS 3.16: Export d'atlas dans differents dossiers
Sinon, en version ultra simple qui marche sur Windows, je me suis fait ce genre de script Python basé sur le nom des fichier, qui comporte la logique de classement des dossier :
Code:
import shutil import os file_source = 'C:\\chemin\\dossiersource\\' destination = 'C:\\chemin\\dossierdestination\\' get_files = os.listdir(file_source) for file in get_files: Nom_com = file.split("_")[0] chemin = os.path.join(destination, Nom_com) os.makedirs(chemin, exist_ok=True) shutil.move(file_source + file, chemin)
A exécuter sur le dossier d'export des Atlas une fois réalisé, et basé ici sur "Nom_com" qui serait en position initiale du nom de fichier et suivi d'un underscore (_).
(cf. ce sujet : https://georezo.net/forum/viewtopic.php?id=126731 )
Sylvain M.
Hors ligne