2 Utiliser la console python
Le premier moyen d’utiliser Python dans QGIS est à travers la console Python.
2.1 Lancer la console
Pour lancer la console Python dans QGIS, il est possible soit de passer par Extension
-> Console Python
soit en cliquant directement sur le bouton dédié.
La console apparaît alors en bas de la fenêtre QGIS.
2.2 Charger une couche
Pour charger une couche, il faut utiliser la méthode addVectorLayer
fournie par l’interface iface
.
= "/home/niko/Téléchargements/lyon/arrondissements.shp"
uri = iface.addVectorLayer(
arrondissements
uri,"arrondissements",
"ogr")
Variables utilisées:
uri
: variable contenant le chemin vers la source de données, utilisée pour plus de lisibilitéarrondissements
: variable qui servira à appeler la couche ultérieurement.
En regardant plus dans le détail, l’aide de QGIS fournit des informations sur les arguments attendus: 3 QString
.
les Qstring
sont des chaines de caractères que Qt (qui gère l’interface graphique de QGIS) transmettra à l’application.
L’objet retourné sera de type QgsVectorLayer
.
En allant voir la documentation officielle de pyQGIS, nous pouvons voir la définition suivante:
addVectorLayer(self, vectorLayerPath: str, baseName: str, providerKey: str) → QgsVectorLayer
self
réfère à l’interface, c’est un argument par défaut il peut être ignorervectorLayerPath: str
: chemin vers la couche, sous forme de chaîne de caractèrebaseName: str
: nom de la couche à l’insertionproviderKey: str
: outil qui va permettre l’accès aux données : ici le composantogr
issu de GDAL→ QgsVectorLayer
: création d’un nouvel objet de typeQgsVectorLayer
qui sera retourné par la méthode
La liste des providers
est disponible soit depuis la fenêtre About de QGIS soit à travers la console Python :
for provider in QgsProviderRegistry.instance().providerList():
print(provider)
2.3 Visualiser les données
Plusieurs méthodes permettent de voir le contenu de la couche.
- soit appeler et afficher la table attributaire
- soit parcourir les données à l’aide de boucles et les afficher dans la console
2.3.1 Afficher la table attributaire
iface.showAttributeTable(arrondissements)
2.3.2 Afficher le nom des champs
Pour pouvoir explorer un jeu de données, il faut connaitre les champs qu’il contient. Avec Python, une boucle permet rapidement de les afficher. Il nous faut recourir à deux méthodes :
.fields()
: méthode de la couche qui retourne un tableau contenant les champs.name()
: méthode du champ qui retourne le nom de ce dernier
for champ in arrondissements.fields():
print(champ.name())
La couche contient les champs suivants :
- nom
- nomreduit
- insee
- libofficie
- gid
Voyons quel est le libellé officiel (libofficie
) de ces arrondissements.
2.3.3 Afficher des données
Là encore une boucle for
va permettre de parcourir les entités de la couche et d’afficher le contenu du champ libofficie
.
La méthode .getFeatures()
retourne les entités de la couche. Une boucle sur ces dernières permet d’afficher leur contenu.
for entite in arrondissements.getFeatures():
print(entite["libofficie"])
2.4 Exercice
- Chargez les autres couches à l’aide de la console et visualisez leur contenu.
- Suivant les recommandations d’ Anita Graser , reproduisez l’affichage suivant :
Code INSEE de Lyon 1er Arrondissement : 69381
Code INSEE de Lyon 3e Arrondissement : 69383
Code INSEE de Lyon 5e Arrondissement : 69385
Code INSEE de Lyon 2e Arrondissement : 69382
Code INSEE de Lyon 4e Arrondissement : 69384
Code INSEE de Lyon 7e Arrondissement : 69387
Code INSEE de Lyon 9e Arrondissement : 69389
Code INSEE de Lyon 8e Arrondissement : 69388
Code INSEE de Lyon 6e Arrondissement : 69386
2.5 Réaliser un géotraitement
Voyons tout d’abord comment réaliser un géotraitement en utilisant l’interface graphique.
Si nous voulons exécuter un géotraitement, nous pouvons utiliser les outils proposés par le menu Vecteur
-> Outils de géométrie
-> Centroïdes
. Ou passer par la boite à outils de traitements.
Dans la boite de dialogue de l’algorithme, paramétrez la couche arrondissements
en entrée et cliquez sur Exécuter
.
La boite de dialogue bascule sur l’onglet Journal
et exécute l’algorithme.
L’opération s’est bien déroulée et une nouvelle couche temporaire Centroïdes
a été créée.
Nous pouvons remarquer qu’une icone en forme de puce mémoire est à droite du nom de la couche. Cela indique une couche stockée en mémoire. En regardant dans le journal, il est possible de voir le mot-clé 'memory'
.
2.6 Historique des traitements
Nous pouvons aussi consulter l’historique des traitements effectués.
Allez dans Traitement
-> Historique
Cliquez sur le traitement pour avoir plus d’informations sur la commande exécutée:
= processing.run("native:centroids",
results 'INPUT':'/home/niko/Téléchargements/lyon/arrondissements.shp',
{'ALL_PARTS':False,
'OUTPUT':'TEMPORARY_OUTPUT'
})
Analysons cette partie:
processing.run()
: commande de lancement d’un traitementnative:centroids
: algorithme de calcul des centroids fourni par QGIS (natif)INPUT
: chemin vers les données en entréeALL_PARTS
: paramètre spécifique à l’algorithmeOUTPUT
: où vont les données en sortie.
Attention: TEMPORARY_OUTPUT
ou memory
(sans le :
) sont couramment utilisés en tant que paramètre de sortie, cela crée une couche temporaire. Dans les anciennes versions antérieures à 3.10 le mot-clé memory:
était utilisé.
2.7 Exercices
- Essayez d’autres algorithmes issus de QGIS, GRASS ou SAGA et examinez les différences.
- Faites varier les sorties vers un shapefile et un GeoPackage et observez les différences.
- Essayer de copier/coller la commande
processing.run()
dans la console. Que se passe-t-il ?
2.8 Récupérer la sortie
Lors de la commande précédente, le traitement a été effectué mais n’est pas apparu. En effet, le résultat est stocké dans results['OUTPUT']
et nous devons le charger manuellement dans le projet QGIS.
'OUTPUT']) QgsProject.instance().addMapLayer(results[
Cette commande peut parfois ne pas fonctionner.
Pour ne pas avoir à recourir à deux étapes pour charger la nouvelle couche dans le projet, il est possible de recourir à la méthode processing.runAndLoadResults()
:
processing.runAndLoadResults("native:centroids",
{'INPUT':'/home/niko/Téléchargements/lyon/arrondissements.shp',
'ALL_PARTS':False,
'OUTPUT':'TEMPORARY_OUTPUT'
})
2.9 Exercice
Essayez de créer de fusionner les géométries des arrondissements de Lyon et de créer un buffer de 5 km autour de la ville de Lyon.
Pouvez-vous enchaîner les traitements ?
2.10 Conclusion sur l’utilisation de la console Python de QGIS
Effectuer quelques opérations dans la console peut être intéressant pour de l’exploration mais stocker les différentes étapes dans un script permet de les ré-exécuter simplement.