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

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#1 Wed 21 February 2018 14:20

nichtoune
Participant occasionnel
Date d'inscription: 20 Jul 2010
Messages: 16

QGIS: Comment Executer la génération d'atlas en Python ?

Bonjour,

Merci à tous ceux qui prendront le temps de me lire.
Je commence tout juste à essayer de mettre les mains dans le code, je suis un grand débutant.

J'ai fait les tutos de codeacademy en Java et Python c'est tout.

Je suis preneur de tout conseil apporté avec pédagogie, j'ai à cœur de comprendre ce qu'on me dit.


Je cherche actuellement à lancer l'export d'un atlas, en pdf, dans qgis en commande python.

L'idée finale est de pouvoir commander par un programme tiers, le lancement d'un .qgs (pour l'instant je fais ça comme un bourrin avec un fichier.bat), contenant un composeur déjà paramétré, et de commander ensuite l'export de l'atlas, en pdf. -> c'est cette opération qui m'intéresse.

Je n'ai pas trouvé dans le cookbook QGIS comment faire cela de manière simple, mais je me trompe peut être d'approche...

Si une bonne âme (ou plusieurs) peut(vent) éclairer ma lanterne, je vous en serai très reconnaissant.

Merci beaucoup !

A bientot, Nathan

Hors ligne

 

#2 Mon 26 February 2018 14:38

SPujol
Participant actif
Lieu: Villeneuve d'Ascq
Date d'inscription: 10 Jan 2008
Messages: 61

Re: QGIS: Comment Executer la génération d'atlas en Python ?

Bonjour,

Allez voir dans cette classe de l'API QGIS.

https://qgis.org/api/2.18/classQgsCompo … 75e5694096

Il y a plusieurs méthodes qui permettent de controler l'atlas et qui devraient répondre à votre demande (AtlasMode).

Cordialement,

Sylvain.


Sylvain PUJOL (Collecte Localisation Satellite - CLS)

Hors ligne

 

#3 Tue 27 February 2018 10:36

nichtoune
Participant occasionnel
Date d'inscription: 20 Jul 2010
Messages: 16

Re: QGIS: Comment Executer la génération d'atlas en Python ?

Bonjour,

merci beaucoup pour votre réponse Sylvain !

N'étant pas developpeur de formation je ne sais pas vraiment appréhender une API surtout que l'API de QGIS est assez dure à appréhender pour un débutant il me semble, le programme est en C++ (je crois ?) et il existe des bindings python mais je ne sais pas vraiment comment me mouvoir dans la doc.


J'ai trouvé ce bout de code sur georezo, mais je ne retrouver pas d'export dans le dossier

composerView = qgis.utils.iface.activeComposers()[0]
composition = composerView.composition()
atlas = composition.atlasComposition()
composition.setAtlasMode(QgsComposition.ExportAtlas)


atlas.beginRender()
for i in range(0,atlas.numFeatures()):
    atlas.prepareForFeature(i)
    composition.exportAsPDF('C:\Users\nathan.lebovits\Desktop\TESTS\QGS\test.pdf').format(i))
atlas.endRender()

Mais lorsque je l'éxécute, la console me retourne un True et un False par entité contenue dans ma couche de couverture.

Je ne connais pas assez les classes de Qgis pour les manipuler avec aisance, une idée de ce que je fais mal ?

Merci beaucoup,

bien cordialement,

Hors ligne

 

#4 Tue 27 February 2018 13:22

SPujol
Participant actif
Lieu: Villeneuve d'Ascq
Date d'inscription: 10 Jan 2008
Messages: 61

Re: QGIS: Comment Executer la génération d'atlas en Python ?

Bonjour,

J'ai un doute sur le exportAsPDF qui a ce que je comprends est une fonction. Mais est elle déclarée quelque part en amont? Je ne sais pas si on peux déclarer des fonctions dans la console Python, d'ailleurs.

Voir ceci peu être : https://docs.qgis.org/testing/en/docs/p … poser.html  (Ouitput to PDF)

Cordialement,

Sylvain


Sylvain PUJOL (Collecte Localisation Satellite - CLS)

Hors ligne

 

#5 Tue 27 February 2018 14:46

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

Re: QGIS: Comment Executer la génération d'atlas en Python ?

Bonjour,

Une astuce, si je puis me permettre est aussi de regarder les plugins qui font à peu près ou une partie de ce que vous voulez: télécharger, observer le code (profitez des avantages de l'open source)... un exemple pour l'export (c'est aussi du débutant, mais assez documenté, je pense)
Il y a aussi le cookbook mais à voir ce qu'il propose (peu mis à jour ces dernières années) et aussi dans le code source, il y a des tests en python qui peuvent aider (genre dans https://github.com/qgis/QGIS/blob/relea … c/python/)

Hors ligne

 

#6 Wed 28 February 2018 09:09

nichtoune
Participant occasionnel
Date d'inscription: 20 Jul 2010
Messages: 16

Re: QGIS: Comment Executer la génération d'atlas en Python ?

Bonjour et merci de vos réponse.

J'ai finalement réussi à faire ce que je voulais, c'est à dire exporter l'atlas dans un pdf.

Maintenant ce que je souhaiterai faire, c'est modifier le script pour en créer un nouveau qui me permettrait d'avoir 1 pdf par emprise de la couche de couverture.

Voici le code actuel qui fonctionne :


def impressionPlan():
    for emprise in iface.activeComposers():
        print emprise
        folder = r"C:\Users\xxxxx\xxxx"
        title = "testing"
        printer = QPrinter()
        painter = QPainter()
        emprise.composition().setUseAdvancedEffect(False)
        myAtlas = emprise.composition().atlasComposition()
        if myAtlas.enabled():
            myAtlas.beginRender()
            emprise.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, u'title%s.pdf' %i)
                print filename
                emprise.composition().beginPrintAsPDF(printer, filename)
                emprise.composition().beginPrint(printer)
                printReady = painter.begin(printer)
                printer.newPage()
                emprise.composition().doPrint(printer, painter)
            myAtlas.endRender()
            painter.end()



Je ne sais pas ce qui permet de paramétrer cela dans le code je manque de connaissances.

Merci encore pour vos réponses !

Hors ligne

 

#7 Wed 28 February 2018 10:34

nichtoune
Participant occasionnel
Date d'inscription: 20 Jul 2010
Messages: 16

Re: QGIS: Comment Executer la génération d'atlas en Python ?

Bonjour,

Je cherche à présent à rappatrier dans le titre, le nom de la couche de couverture.
dans un avenir proche je devrai également rapatrier le nom de l'entité de la couche de couverture (celle qui fixe l'emprise de la carte lors de l'impression du plan.)

Merci de votre aide,

Hors ligne

 

#8 Wed 28 February 2018 11:58

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

Re: QGIS: Comment Executer la génération d'atlas en Python ?

Bonjour,

Voici une fonction qui permet de changer un libellé dans la composition :

Code:

def changeTextOfQgsComposerLabel(myComposition, iLabel, texte):
    '''
    pour myComposition,
    change le texte du ième QgsComposerLabel
    '''
    
    labelItems = filter(lambda x: isinstance(x, QgsComposerLabel), myComposition.items())
    labelItem = labelItems[iLabel]
    labelItem.setText(texte)   

changeTextOfQgsComposerLabel(myComposition, 3, ('%s (%s)' % (nomCommune, millesimeCommune)))

Pour avoir des infos sur l'entité de couverture, utiliser

Code:

myAtlas.currentFeature()

Pour avoir son nom :

Code:

myAtlas.coverageLayer().name()

geodata au cerema et petits billets en géomatique

Hors ligne

 

#9 Thu 01 March 2018 09:38

nichtoune
Participant occasionnel
Date d'inscription: 20 Jul 2010
Messages: 16

Re: QGIS: Comment Executer la génération d'atlas en Python ?

Bonjour MathieuR,

Merci beaucoup pour ces fonctions !

Bien cordialement,

N.

Hors ligne

 

#10 Fri 18 March 2022 16:34

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 981

Re: QGIS: Comment Executer la génération d'atlas en Python ?

Salut smile
Je me permets de poster à la suite de votre message car je suis curieux de savoir comment vous procéderiez pour répondre à cette question.

De mon côté, je le ferai via un script python "post-export" de l'Atlas, comme ceci :
(en me basant sur le nom de fichier exporté)

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)

Mais à la lecture de cette discussion, je me dis qu'il serait possible et finalement plus propre de le faire dès l'exportation de l'Atlas dans QGis, en se basant sur un champ attributaire (par exemple : attribute(@atlas_feature, 'Nom_com') ). Et ça éviterait d'ajouter le nom de l'attribut de classement (nom_com ici) dans le nom de fichier.

Si vous avez une idée, je prends (surtout pour ma culture Python smile )

Dernière modification par Sylvain M. (Fri 18 March 2022 16:35)


Sylvain M.

Hors ligne

 

Pied de page des forums

Powered by FluxBB