#1 Mon 19 December 2016 14:22
- laurent00
- Participant assidu
- Date d'inscription: 6 Aug 2007
- Messages: 399
QGIS: enregistrement csv à la fermeture d'un projet
bonjour
j'aimerais savoir s'il est possible, et comment faire, pour qu'à la fermeture d'un projet il y ait un enregistrement automatique d'une couche csv datée afin d'avoir une sorte de workflow...
LJ
Hors ligne
#2 Tue 20 December 2016 12:12
- JD
- Moderateur
- Date d'inscription: 8 Aug 2013
- Messages: 726
Re: QGIS: enregistrement csv à la fermeture d'un projet
Bonjour,
il faut passer par les macros dans les propriétés du projet et ajouter quelques lignes de code à la méthode closeProject().
Je ne sais pas ce que vous voulez faire mais voici un exemple :
Code:
import os from qgis.core import QgsMapLayerRegistry, QgsVectorFileWriter from datetime import datetime layer_name = u'le_nom_de_votre_couche_ou_table' folder = u'C:/chemin/d/enregistrement' encoding = 'utf-8' suffix = datetime.now().strftime('%Y-%m-%d-%H-%M') def closeProject(): registry = QgsMapLayerRegistry.instance() layer = registry.mapLayersByName(layer_name)[0] filename = layer_name filename = os.path.join(folder, filename + '-' + suffix + '.csv') QgsVectorFileWriter.writeAsVectorFormat(layer, filename, encoding, None, driverName='CSV')
Je vous laisse l'adapter à votre convenance.
Pensez aussi à autoriser l'execution de macro dans les options de QGIS (Options > Général > Activer les macros)
Cordialement,
Dernière modification par lejedi76 (Tue 20 December 2016 12:15)
Hors ligne
#3 Tue 20 December 2016 16:41
- laurent00
- Participant assidu
- Date d'inscription: 6 Aug 2007
- Messages: 399
Re: QGIS: enregistrement csv à la fermeture d'un projet
j'ai chnagé le chelmin et le nom de la couche mais aprior rien ne se passe à la femreture
import os
from qgis.core import QgsMapLayerRegistry, QgsVectorFileWriter
from datetime import datetime
layer_name = u'acteurs'
folder = u'Z:\SERVES\LIM\ryl'
encoding = 'utf-8'
suffix = datetime.now().strftime('%Y-%m-%d-%H-%M')
def closeProject():
registry = QgsMapLayerRegistry.instance()
layer = registry.mapLayersByName(layer_name)[0]
filename = layer_name
filename = os.path.join(folder, filename + '-' + suffix + '.csv')
QgsVectorFileWriter.writeAsVectorFormat(layer, filename, encoding, None, driverName='CSV')
Dernière modification par laurent00 (Sat 11 February 2017 22:45)
Hors ligne
#4 Tue 20 December 2016 16:49
- laurent00
- Participant assidu
- Date d'inscription: 6 Aug 2007
- Messages: 399
Re: QGIS: enregistrement csv à la fermeture d'un projet
en fait ça marche très bien merci
LJ
Hors ligne
#5 Tue 20 December 2016 16:55
- laurent00
- Participant assidu
- Date d'inscription: 6 Aug 2007
- Messages: 399
Re: QGIS: enregistrement csv à la fermeture d'un projet
est-il possible de mettre cela par défaut sur qis car j'ai beaucoup de projet qui sont basés sur une couche de base acteur ...
LJ
Hors ligne
#6 Tue 20 December 2016 22:57
- JD
- Moderateur
- Date d'inscription: 8 Aug 2013
- Messages: 726
Re: QGIS: enregistrement csv à la fermeture d'un projet
Bonsoir,
si vous voulez faire cela sur chacun de vos projets il va falloir faire un plugin maison.
Il n'y a pas grand chose à faire en plus, à part connecter le signal quand le projet est fermé et sauvegardé
et gérer les erreurs quand votre couche acteur n'est pas présente.
Rien de bien sorcier mais faut mettre les mains un peu dans le cambouis.
Ca ne m'ennuie pas de vous aider si cette proposition vous convient.
Bonne soirée,
Hors ligne
#7 Wed 21 December 2016 09:43
- laurent00
- Participant assidu
- Date d'inscription: 6 Aug 2007
- Messages: 399
Re: QGIS: enregistrement csv à la fermeture d'un projet
merci bien
je pensais effectivement à faire un plugin, mais pas simple de le planifier dans mon travail actuel
donc je note pour 2017 ...
LJ
Hors ligne
#8 Sun 12 February 2017 09:34
- laurent00
- Participant assidu
- Date d'inscription: 6 Aug 2007
- Messages: 399
Re: QGIS: enregistrement csv à la fermeture d'un projet
bonjour
voici le code pour 2 couches, par contre cela ne ramène pas les coordonnées des points des polygones
est-ce possible ? est-il possible de mettre un URL plutôt qu'un Folder ?
LJ
Code:
import os from qgis.core import QgsMapLayerRegistry, QgsVectorFileWriter from datetime import datetime layer_name1 = u'tourettes' layer_name2 = u'alignements' folder = u'/home/alignements/workflow' encoding = 'utf-8' suffix = datetime.now().strftime('%Y-%m-%d-%H-%M') def closeProject(): registry = QgsMapLayerRegistry.instance() layer1 = registry.mapLayersByName(layer_name1)[0] filename1 = layer_name1 filename1 = os.path.join(folder, filename1 + '-' + suffix + '.csv') QgsVectorFileWriter.writeAsVectorFormat(layer1, filename1, encoding, None, driverName='CSV') registry = QgsMapLayerRegistry.instance() layer2 = registry.mapLayersByName(layer_name2)[0] filename2 = layer_name2 filename2 = os.path.join(folder, filename2 + '-' + suffix + '.csv') QgsVectorFileWriter.writeAsVectorFormat(layer2, filename2, encoding, None, driverName='CSV')
Hors ligne
#9 Sun 12 February 2017 15:14
- laurent00
- Participant assidu
- Date d'inscription: 6 Aug 2007
- Messages: 399
Re: QGIS: enregistrement csv à la fermeture d'un projet
je regarde aussi pour faire un plugin, en utilisant le Plugin Builder
quelques conseils sont/seront les bienvenues
LJ
Hors ligne
#10 Mon 06 March 2017 12:33
- laurent00
- Participant assidu
- Date d'inscription: 6 Aug 2007
- Messages: 399
Re: QGIS: enregistrement csv à la fermeture d'un projet
petite précision
"comment faire que le CSV prennent en compte les coordonnées d'un polygone ?
quand je fais "enregistrer sous" ma couche je sélectionne WKT, mais dans le code python comment fait-on ?
merci
Hors ligne
#11 Fri 21 April 2017 00:35
- JD
- Moderateur
- Date d'inscription: 8 Aug 2013
- Messages: 726
Re: QGIS: enregistrement csv à la fermeture d'un projet
Bonsoir,
par contre cela ne ramène pas les coordonnées des points des polygones
est-ce possible ?
Je viens de répondre à cette question sur ce fil : https://georezo.net/forum/viewtopic.php … 51#p294451 :
est-il possible de mettre un URL plutôt qu'un Folder ?
Je ne comprends pas votre question, vous voulez envoyer la ressource sur un serveur ? Sur internet ? En local ?
Quel protocole ?
Cordialement,
Hors ligne