J'ai un problème / une question concernant python et QGIS. Est-il possible d'obtenir les données d'une fonctionnalité sélectionnée dans QGIS en utilisant python, et si oui, comment?
Dans mon exemple, j'ai une couche qui montre quelques parcelles pour l'urbanisme. Si je sélectionne maintenant l'un des colis, je veux obtenir les données exactes pour ce colis. Ces données doivent être lues par un script python puis ajoutées à un fichier PDF créé automatiquement. La dernière étape est facile, mais je n'ai pas obtenu les données de cette fonctionnalité sélectionnée.
Il est possible d'obtenir des données de la couche active, mais est-il également possible d'obtenir les données d'une entité sélectionnée de cette couche?
J'espère que tu peux m'aider. Cordialement
Je voulais juste publier quelques mises à jour de la réponse précédente à la lumière des modifications apportées à l'API QGIS Python depuis la version 2.0 .
Comme auparavant, vous obtiendrez une liste des fonctionnalités sélectionnées avec
iface.activeLayer().selectedFeatures()
, mais dans lesQGIS
versions,>= 2.0
vous utilisez maintenant la fonction à laQgsFeature.attributes()
place deQgsFeature.attributeMap()
. Les deux fonctions ne sont pas exactement les mêmes:attributes()
renvoie maintenant une liste , alors que l'ancienneattributeMap()
renvoyait un dictionnaire . Prenez un moment pour parcourir la documentation de l' API pourQgsFeature.attributes()
,QgsAttributes
, etc pour comprendre comment les attributs sont stockés / accessibles.Si vous êtes intéressé, vous pouvez lire certaines des raisons derrière les changements d'API sur ce fil de liste de diffusion: [Qgis-developer] nouvelles fonctionnalités de sélection de l'API vectorielle . En bref (selon les mots du développeur QGIS Martin Dobias):
Donc, à titre d'exemple de ce que vous avez demandé comment faire (obtenir des données pour une seule entité que vous avez sélectionnée), supposons que vous disposiez d'une couche d'
city
entités contenant chacune une liste d'attributs, y compris uncounty
attribut. Pour obtenir lacounty
valeur d'une ville spécifique que vous avez sélectionnée (par exempleHelena, AR
), procédez comme suit dans la console Python:Si vous voulez les valeurs de tous les champs de la table attributaire de la ville, vous utiliserez simplement:
la source
Je voudrais ajouter quelque chose d'utile à la réponse fournie par J. Taylor et souligner que la réponse actuellement acceptée de 2012 n'est plus correcte:
L'objet QgsFeature prend en charge l'
__geo_interface__
attribut utile , qui renvoie un dictionnaire à partir d'une fonctionnalité donnée. Le dictionnaire est en fait dans une norme GeoJSON, donc vous obtenez toutes les paires attribut-valeur et la géométrie incluses. La fonctionnalité existe depuis un certain temps maintenant, décrite pour la première fois par Sean Gillies en 2012, avec un exemple d'utilisation ici . Je n'ai trouvé aucune information à partir de quelle version de QGIS est disponible et je n'ai pas encore essayé QGIS 3, mais il était sûrement disponible à partir d'au moins QGIS 2.14.TL; DR:
la source