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 Wed 15 January 2020 18:38

UPI
Juste Inscrit !
Date d'inscription: 15 Jan 2020
Messages: 1

QGIS 3.4: migration de script depuis Qgis 2.14

Bonjour,

Mon employeur nous a récemment upgradé notre version de Qgis de la 2.14 à la 3.4. Nous utilisions plusieurs scripts (exécution depuis ScriptRunner) pour automatiser notre production de carte. Le passage à PyQt5 m'oblige à faire de nombreuses modifs sur le script. Jusqu'ici je me suis débrouillé avec les traceback et google mais là je coince

Voici un extrait du code en question :

Code:

       def run_script(iface):
    global project_path
    project_path = str(QgsProject.instance().homePath()) #Recupere le dossier du projet en cours
    
    relative_folder = "\exportatlas\" #Chemin relatif du dossier d'export par rapport au projet
    uv_field_name = "UV" #Nom du champ des valeurs uniques
    format = "png" # Autorises unqiuement les formats raster. Pas de pdf ni de svg pour l'instant
    
    #PATH VERS L'EXPORT
    folder = project_path + relative_folder
    
    #utilise la couche selectionnee dans le controle des couches
    activeLayer = iface.activeLayer()
    themaLayer1 =  QgsProject.instance().mapLayersByName('couche_thema1')
    themaLayer2 =  QgsProject.instance().mapLayersByName('couche_thema2')
    themaLayer3 =  QgsProject.instance().mapLayersByName('couche_thema3')
    themaLayer4 =  QgsProject.instance().mapLayersByName('couche_thema4')

    
    #changer l'index si besoin d'un autre composeur
    activeCompo = QgsProject.instance().layoutManager().layouts()[1]
    myComposition = activeCompo.composition() 

#RECUPERATION DE LA COUCHE DE COUVERTURE DE L'ATLAS
    coverageLayer = QgsProject.instance().mapLayersByName('coverageLayer')
    #print "Selected coverage layer: " + coverageLayer.name()

Le message d'erreur rencontré se situe au niveau de la ligne myComposition = activeCompo.composition()
il est le suivant :

Code:

AttributeError: 'QgsPrintLayout' object has no attribute 'composition'

Pour vous donner un peu de contexte, ce script permet de faire une boucle sur une liste de valeur qui sera utilisé pour filtrer une ou plusieurs couches. A chaque boucle une carte sera exporté en png. Ce script utilise les fonctions d'atlas.
Il fonctionnait parfaitement sur Qgis 2.14

Si vous avez une idée pour m'aiguiller un peu ça serait top

Merci !

Dernière modification par UPI (Thu 16 January 2020 07:50)

Hors ligne

 

#2 Thu 16 January 2020 12:43

JD
Moderateur
Date d'inscription: 8 Aug 2013
Messages: 725

Re: QGIS 3.4: migration de script depuis Qgis 2.14

Bonjour,

Code:

myComposition = activeCompo.composition()

Ce n'est plus utile. La classe QgsComposition n'existe plus et est remplacée par QgsPrintLayout. Pour exporter il faut faire appel à la classe QgsPrintLayoutExporter.


Regardez sur ce post le code posté par Alexandre Neto (réponse pour la version 3)
https://gis.stackexchange.com/questions … mmand-line

Et en particulier le commentaire de nyalldawson qui explique comment la procédure est simplifiée sur la 3.

Hors ligne

 

Pied de page des forums

Powered by FluxBB