Message posté par : Pierre
----------------------------------------
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 (Géorézo 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 scripts 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
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=351739#p351739
Pour y répondre : qgis_fr(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net