#1 Mon 07 April 2014 15:44
- dttpe
- Juste Inscrit !
- Date d'inscription: 9 Jan 2014
- Messages: 6
QGIS : Script python : fieldcalculator $length
Bonjour,
j'ai un problème, je n'arrive pas à appliquer la fonction $length dans mon script python (il est exécuté directement dans la console python).
Code:
processing.runalg("qgis:fieldcalculator","C:/test/DIF.shp", "L", 1, 10, 3, True,= $length,"C:/test/DIF2.shp") File "<input>", line 1 processing.runalg("qgis:fieldcalculator","C:/test/DIF.shp", "L", 1, 10, 3, True,= $length,"C:/test/DIF2.shp") ^ SyntaxError: invalid syntax
je sais que si je rajoute des "" à $length sa marchera mais sans appliquer la fonction !
Code:
processing.runalg("qgis:fieldcalculator","C:/test/DIF.shp", "L", 1, 10, 3, True,"= $length","C:/test/DIF2.shp") {'OUTPUT_LAYER': 'C:/test/DIF2.shp'}
comment faire ?
mon objectif est de pouvoir ajouter un champ "Longueur" sur prés de 420 shapes l'idée serait de ne pas avoir à les traiter 1 par 1 !
Est-il possible d'automatiser cette procédure ?
Help !
Dernière modification par dttpe (Thu 10 April 2014 14:57)
Hors ligne
#2 Thu 10 April 2014 14:59
- dttpe
- Juste Inscrit !
- Date d'inscription: 9 Jan 2014
- Messages: 6
Re: QGIS : Script python : fieldcalculator $length
Salut,
Toujours pas de solution ?
Cette fonction est-elle réalisable ou nécessite t-elle un plugin ?
Dernière modification par dttpe (Fri 11 April 2014 13:19)
Hors ligne
#3 Mon 14 April 2014 09:22
- PerrineR
- Participant occasionnel
- Date d'inscription: 7 Nov 2013
- Messages: 12
Re: QGIS : Script python : fieldcalculator $length
Bonjour,
je vois le post un peu après la bataille, mais peut-être es-tu encore sur le problème.
Je suppose que tu travailles sur Qgis 2. Je n'ai pas spécialement exploré l'outil fieldcalculator, mais je te propose une autre solution. Le script est à appeler dans la console avec la commande execfile().
Code:
import processing from PyQt4 import QtCore vligne=QgsVectorLayer("chemin/DIF.shp","le nom que tu veux dans la visionneuse","ogr") if not vligne.isValid(): print "échec du chargement de la couche DIF" # Création du champ caps=vligne.dataProvider().capabilities() test=vligne.fieldNameIndex("long") if test==-1: if caps & QgsVectorDataProvider.AddAttributes: res = vligne.dataProvider().addAttributes([QgsField("long",QtCore.QVariant.Double)]) vligne.updateFields() idx=vligne.fieldNameIndex("long") #Remplissage du champ "long" vligne.startEditing() for f in vligne.getFeatures(): f[idx]=f.geometry().length() vligne.updateFeature(f) vligne.commitChanges() # Affichage de la couche QgsMapLayerRegistry.instance().addMapLayer(vligne)
Des codeurs plus expérimentés pourront discuter le script à loisir...
En espérant que cela t'aidera,
Perrine
Hors ligne
#4 Mon 14 April 2014 10:21
- dttpe
- Juste Inscrit !
- Date d'inscription: 9 Jan 2014
- Messages: 6
Re: QGIS : Script python : fieldcalculator $length
Merci pour l'info, je vais tester maintenant.
je reviens vite pour le résultat.
merci
Hors ligne
#5 Mon 14 April 2014 10:47
- dttpe
- Juste Inscrit !
- Date d'inscription: 9 Jan 2014
- Messages: 6
Re: QGIS : Script python : fieldcalculator $length
Perrine,
Merci bcp après 2 trois problèmes d'encodage (j'ai rajouter #-*- coding:Utf-8 -*- en tête de script) et sa marche super bien.
encore merci ! ça m'enlève une belle épine du pied.
RESOLU
Dernière modification par dttpe (Mon 14 April 2014 10:49)
Hors ligne
#6 Mon 14 April 2014 10:55
- PerrineR
- Participant occasionnel
- Date d'inscription: 7 Nov 2013
- Messages: 12
Re: QGIS : Script python : fieldcalculator $length
En effet, j'avais oublié de copier coller l'en-tête.
Tu ne devrais pas avoir de problème pour faire fonctionner le script en boucle sur tes 420 shapes...
De rien et bonne journée,
Perrine
Hors ligne
#7 Mon 14 April 2014 21:53
Re: QGIS : Script python : fieldcalculator $length
Bonsoir,
Autre solution, voir l'article : http://anitagraser.com/2013/04/20/advan … alculator/
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne