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

Printemps des cartes 2024

#1 Mon 21 June 2021 16:14

gbodet
Participant actif
Lieu: Compiègne
Date d'inscription: 28 Sep 2005
Messages: 51

QGIS 3.10: execution de plusieurs projets sans les ouvrir

Bonjour,

Est-il possible de lancer la génération des atlas présent dans x projets QGIS ?

En effet, je dispose actuellement de 22 projets QGIS intégrant chacun un atlas constitué de mises en page particulières. L'intégration dans un seul projet s'est révélé trop lourd pour QGIS.

L'objectif serait de lancer dans une ligne de commande l'export en PDF des cartes présentes dans les Atlas de chaque projet QGIS pour gagner du temps.

J'ai déjà testé cette solution mais sans succès
https://ubuntuplace.info/questions/4601 … r-printing

Voici en détail la procédure réalisée :

Voici ce que je lance dans un fichier BAT

Code:

""C:\Program Files\QGIS3.10\bin\qgis-ltr-bin-g7.exe" --project R:\Ressources\4-Partage\3-Procedures\QGIS\PLUiH_ARC_planche_graphique_test_3.x\200067965_reglement_graphique_A0_3.x.qgs --code c:\temp\print.py
PAUSE

Le fichier print.py contient le code ci-dessous pris sur le site en référence dans mon 1er email.

Code:

from qgis.core import *
from qgis.gui import *
from qgis.utils import iface

for comp in iface.activeComposers():
    print comp
    folder = "C:\temp"
    title = "testing"
    printer = QPrinter()
    painter = QPainter()
    comp.composition().setUseAdvancedEffects(False)
    myAtlas = comp.composition().atlasComposition()

    if myAtlas.enabled():
        myAtlas.beginRender()
        comp.composition().setAtlasMode(QgsComposition.ExportAtlas)
        myAtlas.setFilenamePattern(u"'{}_'||$feature".format(title))
        for i in range(0, myAtlas.numFeatures()):
            myAtlas.prepareForFeature(i)
            filename = os.path.join(folder, title + '.pdf')
            print filename
            comp.composition().beginPrintAsPDF(printer, filename)
            comp.composition().beginPrint(printer)
            printReady = painter.begin(printer)
            if i > 0:
                printer.newPage()
            comp.composition().doPrint(printer, painter)
        myAtlas.endRender()
        painter.end()

En lançant le .bat, le projet QGIS s'ouvre et me donne une erreur

Code:

Une erreur est survenue lors de l'exécution du code suivant:
with open('C:/temp/print.py','r') as f: exec(f.read())

Cordialement

Dernière modification par gbodet (Mon 21 June 2021 16:40)

Hors ligne

 

#2 Tue 22 June 2021 00:24

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 940
Site web

Re: QGIS 3.10: execution de plusieurs projets sans les ouvrir

Bonjour,

Le code récupéré ne marchera jamais. Les imports Python utilisent de l'exemple original utilisent Qt4. Cela signifie que le code est pour Python 2 et QGIS 2.x. Depuis avec la version 3 de QGIS, l'API a énormément changée pour la partie impression. Ce code est donc devenu obsolète.

Vous avez d'autres options:

* utiliser cet exemple https://github.com/carey136/Standalone- … tlas-QGIS3 qui est basée sur Python
* passer l'algorithme de processing "native:atlaslayouttopdf" via PyQGIS et entre chaque exécution, charger un nouveau projet parmi vos 22 via PyQGIS
* passer par la ligne de commande qgis_process mais j'ai rencontrée un erreur pour cela. J'ai posté d'ailleurs sur un forum anglophone concernant ce problème https://gis.stackexchange.com/questions … df-qgis-al

Les 2 dernières solutions demandent une version de QGIS récente. Je crois que l'algorithme mentionné dans mes 2 derniers points est arrivé en 3.16. La ligne de commande qgis_process est arrivée depuis QGIS 3.14


Cordialement

Thomas

Hors ligne

 

#3 Tue 22 June 2021 21:11

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3799

Re: QGIS 3.10: execution de plusieurs projets sans les ouvrir

Bonjour,
Autre alternative, téléchargez la version master de https://github.com/DelazJ/MapsPrinter (depuis le bouton vert "Code"), dézippez et installez dans vos extensions (ça va rajouter deux algorithmes dans la boîte à outils) et exécutez l'algorithme "Export de mises en page depuis un dossier" (on suppose donc que tous les projets sont dans un même dossier).

Hors ligne

 

#4 Wed 30 June 2021 14:45

gbodet
Participant actif
Lieu: Compiègne
Date d'inscription: 28 Sep 2005
Messages: 51

Re: QGIS 3.10: execution de plusieurs projets sans les ouvrir

Bonjour,

1 - J'ai testé la solution en ligne de commande par rapport à votre exemple https://github.com/carey136/Standalone- … tlas-QGIS3, en modifiant les paramètres de valeurs

Code:

# -P = Project file
myProject = 'R:\\Ressources\\4-Partage\\3-Procedures\\QGIS\\PLUiH_ARC_planche_graphique_3.x\\PLUiH_ARC_planche_graphique_3.x'

# -L = Layout ("Layout name")
layoutName = 'ARMANCOURT_A0_PORTRAIT_1/2500_27'

# -C = Coverage Layer Name ("Layer Name")
coverageLayer = 'geo_p_planche_pluiarc'

# -F = filter ("column" "operator" "value")
atlasFilter = '"id_planche" = "60023"'

# -O = Output Format (pdf or image)
outputFormat = 'pdf'

# -D = Output Directory ("c:your\output" - exclude trailing "\")
outputFolder = 'C:\\temp\\pluih_test_export_auto'

# -N = Image output Query
outputName = '@atlas_featurenumber' #e.g.\"Parish\" || \' \' || \"Number\" where parish and number are columns

# -Q = PDF Name
pdfName = 'Export'

Mais j'ai une erreur python

Code:

Traceback (most recent call last):
  File "C:\PROGRA~1\QGIS3~1.16\apps\Python37\lib\code.py", line 90, in runcode
    exec(code, self.locals)
  File "<input>", line 1, in <module>
  File "<string>", line 11, in <module>
  File "C:\PROGRA~1\QGIS3~1.16\apps\Python37\lib\argparse.py", line 1641, in __init__
    prog = _os.path.basename(_sys.argv[0])
AttributeError: module 'sys' has no attribute 'argv'

N'étant pas un spécialiste, cette erreur est-elle corrigeable ? J'ai lancé le code Python dans une console sous QGIS 3.16 (64bits).

2 - La solution du plugin MapsPrinter  ne fonctionne pas. Le Plugin s'installe, quand je le lance, pas de fichier écrit en PDF dans le répertoire indiqué et pas de message indiquant une erreur, juste une information précisant

Code:

Opération interrompue : Des cartes de 1 mises en page(s) sur 1 ont été exportées dans "C:/temp/pluih_test_export_auto" avant l'annulation. Certains fichiers pourraient être incomplets.

Cordialement

Hors ligne

 

#5 Thu 01 July 2021 10:44

gbodet
Participant actif
Lieu: Compiègne
Date d'inscription: 28 Sep 2005
Messages: 51

Re: QGIS 3.10: execution de plusieurs projets sans les ouvrir

Bonjour,

Afin de résoudre mon problème de message d'erreur, après consultation de plusieurs sites, j'ai intégré après la command

Code:

import sys

la synthaxe suivante

Code:

if not hasattr(sys, 'argv'):
    sys.argv  = ['']

Le lancement du code dans une console Python m'indique bien l'exécution du fichier et affiche

Code:

Success !

.

En revanche, aucune mise en page en PDF, et impossible d'utiliser QGIS après.

Ci-joint le fichier .py. S'agit-il d'un problème lié aux paramètres (j'ai testé avec "" et '') ou de l'Atlas ?


Cordialement

Hors ligne

 

#6 Thu 01 July 2021 15:11

ppluvinet
Participant assidu
Lieu: LYON
Date d'inscription: 6 Aug 2007
Messages: 608

Re: QGIS 3.10: execution de plusieurs projets sans les ouvrir

Bonjour,
Je ne suis pas expert en Python mais Vous pouvez vous inspirer des scripts que j'ai mis en fin de ce sujet et qui m'a permis faire ce que vous cherchez à faire.
https://georezo.net/forum/viewtopic.php?id=111123
Bien à vous,


Pascal PLUVINET

Hors ligne

 

#7 Fri 02 July 2021 08:29

gbodet
Participant actif
Lieu: Compiègne
Date d'inscription: 28 Sep 2005
Messages: 51

Re: QGIS 3.10: execution de plusieurs projets sans les ouvrir

Bonjour,

Merci à tous pour vos retours. J'ai pu faire fonctionner le Plugin Maps Printer après mettre aperçu qu'il fallait écrire le nom de la mise en page en minuscule, les majuscules ne fonctionnant pas. En revanche, je ne dispose que de l'algorithme Export groupé de mise en page" et non celui permettant d'exporter les mises en page à partir du dossier.

Pour le fonctionnement de vos scripts Python, je n'ai pas encore pu les faire fonctionner. Le premier fournit par ThomasG ne marche toujours pas, il se lance et bloc QGIS. Celui de ppluvinet se lance et me renvoi SUCCESS sans pour autant écrire le PDF.

Il s'agit peut-être d'un problème de variable ?

Code:

from qgis.core import QgsApplication, QgsProject, QgsLayoutExporter
import os
from qgis.core import QgsApplication, QgsProject, QgsProject
from qgis.core import QgsProject
from qgis.gui import QgsMapCanvas, QgsLayerTreeMapCanvasBridge
from qgis.utils import iface
from qgis.core.contextmanagers import qgisapp
from PyQt5.QtCore import QFileInfo
import sys

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' #f'atlas.currentFilename().png'
             filename_path = os.path.join(outputs_folder, 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()

      #Chemon des projets qgz, chemin du répertoire d'export et nom du composeur 
     project_path = sys.argv[1]
     output_folder = 'C:/temp/pluih_test_export_auto/'
     layout_name = 'planche_27'

     export_atlas(project_path, layout_name, output_folder)

     # Close the QGIS application
     qgs.exitQgis()

if __name__ == "__main__":
 main()

Cordialement

Dernière modification par gbodet (Fri 02 July 2021 08:50)

Hors ligne

 

#8 Fri 02 July 2021 09:50

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3799

Re: QGIS 3.10: execution de plusieurs projets sans les ouvrir

Bonjour,

J'ai pu faire fonctionner le Plugin Maps Printer après mettre aperçu qu'il fallait écrire le nom de la mise en page en minuscule, les majuscules ne fonctionnant pas. En revanche, je ne dispose que de l'algorithme Export groupé de mise en page" et non celui permettant d'exporter les mises en page à partir du dossier.


On parle bien de la version master à télécharger sur github? Je viens d'essayer et ça marche: j'ai les deux algos et il n'y a pas de souci avec les mises en page avec majuscule.


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#9 Fri 02 July 2021 15:02

ppluvinet
Participant assidu
Lieu: LYON
Date d'inscription: 6 Aug 2007
Messages: 608

Re: QGIS 3.10: execution de plusieurs projets sans les ouvrir

Avez-vous bien définit dans vos Altas un nom d'export. et dans output_folder , avez vous défini un chemin correct ?


Pascal PLUVINET

Hors ligne

 

#10 Sat 03 July 2021 13:22

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 940
Site web

Re: QGIS 3.10: execution de plusieurs projets sans les ouvrir

Bonjour,

J'avais indiqué trois solutions. Vous avez essayé les 2 premières mais la dernière est bien plus simple. Vous l'avez vraiment essayé?

Code:

qgis_process run native:atlaslayouttopdf --project_path=/home/thomasg/own-projects/sample-qgis-server/projects/atlas_minimum.qgs --LAYOUT=v1_layout_atlas --OUTPUT=/tmp/atlas1.pdf

Cordialement


Thomas

Hors ligne

 

#11 Tue 06 July 2021 08:42

gbodet
Participant actif
Lieu: Compiègne
Date d'inscription: 28 Sep 2005
Messages: 51

Re: QGIS 3.10: execution de plusieurs projets sans les ouvrir

Bonjour,

Merci encore à toutes les personnes qui m'ont répondu et proposées des solutions.
Je suis parti pour l'utilisation du Plugin MapsPrinter https://github.com/DelazJ/MapsPrinter qui fonctionne maintenant très bien pour l'export des mises en pages contenus dans des projets Qgis situés dans un dossier ou dans un projet seul.

Je remercie l'auteur DelazJ pour avoir apporter des éléments importants pour l'installation, la correction d'un bug pour l'export en PDF et une amélioration concernant la nomination des fichiers exportés par nom de l'atlas.

Pour ceux qui souhaitent l'utiliser, pour l'installation, télécharger le ZIP sur https://github.com/DelazJ/MapsPrinter, décompressé dans le répertoire des plugin QGIS et ne pas oublier de renommer le répertoire

Code:

MapsPrinter

Lancez QGIS (testé avec la V3.10 et 3.16), et dans le menu Extension vous aurez accès aux 2 fonctions. Dans les 2 cas, j'utilise

Code:

Exécuter comme processus de lot

et je complète les informations demandées.

Cordialement

Hors ligne

 

#12 Tue 13 July 2021 14:19

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3799

Re: QGIS 3.10: execution de plusieurs projets sans les ouvrir

Bonjour,

gbodet a écrit:

Pour ceux qui souhaitent l'utiliser, pour l'installation, télécharger le ZIP sur https://github.com/DelazJ/MapsPrinter, décompressé dans le répertoire des plugin QGIS et ne pas oublier de renommer le répertoire


Pour info, les versions 0.7 (pour QGIS <3.8) et 0.8 de Maps Printer sont sorties et intègrent tous ces fonctions et correctifs, donc point besoin désormais de passer par le téléchargement de la master. La procédure d'installation classique via le gestionnaire d'extensions de QGIS est vivement recommandée, la version master repassant en mode "je ne vous garantis pas que ça fonctionne à coup sûr!!!".

gbodet a écrit:

dans le menu Extension vous aurez accès aux 2 fonctions. Dans les 2 cas, j'utilise

Code:

Exécuter comme processus de lot


Je serais curieux de savoir dans quel contexte vous utilisez le processus de lot pour l'algorithme "Exporter les mises en page du projet". L'interface classique devrait répondre au besoin, non?
Autrement la suggestion de ThomasG en ligne de commande avec QGIS>=3.14 peut être encore plus efficace

Code:

qgis_process run mapsprinter:exportlayoutsfromfolder --PROJECTS_FOLDER=/le/dossier/de/projets --EXTENSION=0 --OUTPUT_FOLDER=/le/dossier/export

Hors ligne

 

Pied de page des forums

Powered by FluxBB