#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 syntaxje 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


