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é.

Lancer la console Python

La console apparaît alors en bas de la fenêtre QGIS.

Position de la console Python

Détail de la console Python

2.2 Charger une couche

Pour charger une couche, il faut utiliser la méthode addVectorLayer fournie par l’interface iface.

uri = "/home/niko/Téléchargements/lyon/arrondissements.shp"
arrondissements = iface.addVectorLayer(
    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.

Charger une couche

En regardant plus dans le détail, l’aide de QGIS fournit des informations sur les arguments attendus: 3 QString.

Note

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 ignorer
  • vectorLayerPath: str: chemin vers la couche, sous forme de chaîne de caractère
  • baseName: str: nom de la couche à l’insertion
  • providerKey: str: outil qui va permettre l’accès aux données : ici le composant ogr issu de GDAL
  • → QgsVectorLayer: création d’un nouvel objet de type QgsVectorLayer 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)

Capture d'écran de la console Python affichant la liste des pilotes disponibles

Providers de QGIS

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)

Capture d'écran montrant la ligne de code exécutée et la table attributaire

Afficher la table attributaire

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())

Affichage du nom des champs

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"])

Afficher le contenu d’un champ

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.

Capture d'écran de la boite à outils de traitements

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.

iBoite de dialogue du géotraitement Centroides

La boite de dialogue bascule sur l’onglet Journal et exécute l’algorithme.

Journal d’exécution

L’opération s’est bien déroulée et une nouvelle couche temporaire Centroïdes a été créée.

Nouvelle couche Centroides

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:

Historique des traitements
results = processing.run("native:centroids", 
    {'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 traitement
  • native:centroids : algorithme de calcul des centroids fourni par QGIS (natif)
  • INPUT : chemin vers les données en entrée
  • ALL_PARTS : paramètre spécifique à l’algorithme
  • OUTPUT : où vont les données en sortie.
Avertissement

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.

QgsProject.instance().addMapLayer(results['OUTPUT'])
Mise en garde

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.