Message posté par : myh89
----------------------------------------
Bonjour tout le monde,
Suite à mon dernier message, j'ai réussi écrire mon script Python et à le faire
fonctionner depuis l'intérieur de Qgis.
Cependant j'aimerais le lancer en automatique la nuit et donc besoin de le traduire en
Powershell. Quelqu'un saurait-il m'aider ? Depuis Powershell je sais ouvrir le
projet Qgis mais pas interagir avec lui.
MERCI D'AVANCE POUR VOTRE AIDE, ci dessous le script qui fonctionne depuis Qgis.
# Appel des librairies nécessaires
from qgis import processing
from qgis.core import QgsApplication, QgsProject, QgsLayerTreeGroup, QgsLayerTreeLayer,
QgsExpression, QgsExpressionContext, QgsExpressionContextUtils
from qgis.utils import iface
from PyQt5.QtCore import QVariant
from datetime import datetime
from qgis.core import *
# Variables d'environnement, noms des répertoires, projets, etc
chemin_projet_source = r'C:/Users/toto/'
nom_projet_source = r'tata.qgz'
ensemble_projet_chemin = chemin_projet_source + nom_projet_source
chemin_projet_impressions_PDF = r'C:/Users/lulu/'
# NOM DES VARIABLES
#uri
#couche_source
#couche_resultat
# chemin_projet_impressions_PDF
# Informations de connection à la base en MySQL
uri = 'MySQL:sig,host=xxxxxx,user=xxxxx,password=cxxxx|layername=xxxxx'
# Ici pour avoir la liste des couches, mais pas nécessaire car on utilise toujours la même
coiuche 'titi'
for id, layer in QgsProject.instance().mapLayers().items():
print(layer.name())
nom_couche_source = ('titi')
layer = QgsProject.instance().mapLayersByName('titi')[0]
iface.setActiveLayer(layer)
couche_source = iface.activeLayer()
datajour = str(datetime.now())
datajourH = datajour[:13]
minutes = datajour[14:16]
couche_resultat = 'POQ du ' + datajourH + 'h' + minutes + '.shp'
chemin_shapefile = chemin_projet_source + couche_resultat
# Syntaxe qui fonctionne pour convertir le MySQL en shapefile
writer = QgsVectorFileWriter.writeAsVectorFormat(couche_source, chemin_shapefile,
"UTF-8", couche_source.crs(), "ESRI Shapefile")
vlayer = QgsVectorLayer(chemin_shapefile, couche_resultat[:23], "ogr")
QgsProject.instance().addMapLayer(vlayer)
# A ce niveau la nouvelle couche avec date et heure est ajoutée dans la liste des couches
et devient la nouvelle active layer
nom_champ_somme = 'DISPO'
colonnes_somme = ['nb_dispo', 'nb_dispo5',
'nb_dispo_s','nb_dispo_1' ]
expression_somme = '+'.join(colonnes_somme)
contexte_expression = QgsExpressionContext()
POQ = iface.activeLayer()
contexte_expression.setFeature(POQ.getFeature(0))
expression = QgsExpression(expression_somme)
expression.prepare(contexte_expression)
POQ.dataProvider().addAttributes([QgsField(nom_champ_somme, QVariant.Int)])
POQ.updateFields()
# a cet endroit là ça a bien créé le champ DISPO
index_champ_somme = POQ.fields().indexFromName(nom_champ_somme)
POQ.startEditing()
# ca ouvre la couche en édition
for entite in POQ.getFeatures():
contexte_expression.setFeature(entite)
valeur_somme = expression.evaluate(contexte_expression)
POQ.changeAttributeValue(entite.id(), index_champ_somme, valeur_somme)
# Là il faut faire un entrée dans la console Python pour que que ça fasse les calculs
puis ensuite, mais marche ok si on lance le script Python d'un coup
POQ.commitChanges()
# ca enregistre les changements et ferme le mode edition
# Attribuer le style qui va bien et est déjà enregistré en qml
style_existant = r'C:/Users/zaza.qml'
POQ.loadNamedStyle(style_existant)
POQ.triggerRepaint()
project = QgsProject.instance()
projectLayoutManager = project.layoutManager()
layout = projectLayoutManager.layoutByName("zozo")
#iface.openLayoutDesigner(layout) # il faudra penser à fermer le gestionnaire de mise en
page après
#iface.showLayoutManager()
sortie = chemin_projet_impressions_PDF + couche_resultat[:23]+ '.pdf'
processing.run("native:printlayouttopdf",{'LAYOUT':'zozo',
'OUTPUT': sortie})
# Ici le resultat est OK = un pdf avec la carte à jour dans le bon répertoire. Il faudra
penser à fermer Qgis proprement
MERCI DE VOTRE AIDE POUR M'AIDER à FAIRE FONCTIONNER CE SCRIPT VIA POWERSHELL
M. Huant
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=361865#p361865
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