Pages: 1
- Sujet précédent - QGIS 2.14 & Python: itération sur entités sélectionnées uniquement - Sujet suivant
#1 Tue 29 November 2016 11:40
- Cerise45
- Participant actif
- Date d'inscription: 31 Aug 2011
- Messages: 132
QGIS 2.14 & Python: itération sur entités sélectionnées uniquement
Bonjour à la communauté,
Je fais appel à vous car je suis bloquée (malgré mes recherches sur les forum en anglais) sur une action python qui semble pourtant toute bête... :
Je suis dans une première boucle (un shapefile de tous les Etats) et je fais une sélection dans ce shapefile des Etats pour récupérer l'identifiant correspondant à la 1ère entité de ce shapefile :
Code:
layer.startEditing() for feat in layerEtats.getFeatures(): id_etat = feat.attribute("ID") # une fois que j'ai récupéré cet état, je veux faire une sélection dans mon shapefile des unités administratives plus fines, ce que j'appelle "layer" expr1 = (u' "id_state" = \'') expr2 = id_etat expr3 = (u'\'') expr = str(expr1) + str(expr2) + str(expr3) selection = layer.getFeatures(QgsFeatureRequest().setFilterExpression(expr)) ids = [i.id() for i in selection] layer.setSelectedFeatures(ids)
A ce stade, mes éléments (entités administratives plus fines dont l'Etat correspond au 1er dans la table attributaire du shapefile des Etats) se sélectionnent dans ma couche.
La deuxième étape est que je veux modifier les attributs de chacune de ces entités sélectionnées en itérant sur chacune d'entre elles....et c'est là que je bloque.
Je fais :
Code:
for elem in layer.selectedFeatures(): # calculs # blabla layer.changeAttributeValue(feat.id(),writefield,result)
Je dois donc avoir un problème sur la seconde itération (qui est pourtant à l'intérieur de ma 1ère boucle).
Le comportement de son script est étrange car il me modifie les valeurs des 70 premières unités administratives plus fines (soit exactement le nombre d'Etats...) et quand mon script bloque à la fin, j'ouvre ma table attributaire et ma sélection est pourtant bien faite.
--> le problème serait donc que le script arrive à sélectionner les entités mais il écrit sur tout le layer au lieu d'écrire uniquement sur les entités sélectionnées !
Si quelqu'un pouvait me débloquer...
Hors ligne
#2 Thu 01 December 2016 09:52
- JD
- Membre
- Date d'inscription: 8 Aug 2013
- Messages: 726
Re: QGIS 2.14 & Python: itération sur entités sélectionnées uniquement
Bonjour,
vous utilisez ce code en tant que script ou en tant qu'action ?
Pouvez vous poster l'ensemble de votre code ?
Et evenutellement une capture d'écran de vos 2 tables ?
Et enfin, ce que vous voulez faire exactement, car c'est difficile de comprendre ce que vous cherchez à faire.
Sinon quelques remarques, j'ai réécris vos 2 codes car certaines fonctions ne sont plus trop utilisées.
Code:
layer.startEditing() for feat in layerEtats.getFeatures(): id_etat = feat['ID'] expr = u"id_state = '{}'".format(id_etat) selection = layer.getFeatures(QgsFeatureRequest().setFilterExpression(expr)) ids = [i.id() for i in selection] layer.setSelectedFeatures(ids)
Code:
for elem in layer.selectedFeatures(): # calculs # blabla elem['monchamps'] = ma_nouvelle_valeur layer.updateFeature(elem)
Dernière modification par lejedi76 (Thu 01 December 2016 09:53)
Hors ligne
#3 Mon 05 December 2016 15:32
- Cerise45
- Participant actif
- Date d'inscription: 31 Aug 2011
- Messages: 132
Re: QGIS 2.14 & Python: itération sur entités sélectionnées uniquement
Bonjour lejedi76,
Merci pour ces modifications simples que j'ai intégré et qui allègent la lecture de mon code.
Oui désolée ce n'est pas forcément très clair.. j'essaie de poster rapidement des explications plus limpides.
Hors ligne
Pages: 1
- Sujet précédent - QGIS 2.14 & Python: itération sur entités sélectionnées uniquement - Sujet suivant