Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

 

Pied de page des forums

Powered by FluxBB