Introduction à PyQGIS

Site: OpenCourseWare for GIS
Cours: Programmation pour les applications hydrologiques géospatiales
Livre: Introduction à PyQGIS
Imprimé par: Guest user
Date: mardi 23 avril 2024, 20:46

1. Introduction

Ce tutoriel vous présentera PyQGIS, la bibliothèque Python de QGIS.

Nous travaillerons avec le script d’un exemple dans lequel nous créons une courbe hauteur/ volume en utilisant PyQGIS dans et en dehors de QGIS.

Une courbe niveau/volume ou courbe niveau/stockage peut être utilisée pour lire à quel volume d'un lac ou d'une fosse correspond un certain niveau d'eau. Il est beaucoup plus facile de mesurer le niveau d'eau que le volume, donc une fois la courbe créée, le volume peut être déterminé de manière simple.

Dans ce tutoriel, nous allons créer une courbe niveau/ volume d'eau pour une mine de lignite à ciel ouvert, mais la méthode est la même pour un lac.

Après ce tutoriel, vous serez en mesure de:

  • calculer le volume sous une élévation donnée avec un MNT
  • utiliser les outils de traitement de QGIS avec PyQGIS dans QGIS
  • utiliser PyQGIS dans Python sans l'interface utilisateur de QGIS
  • créer une courbe niveau/volume en utilisant PyQGIS et Pandas
Les données incluses dans ce tutoriel proviennent de Shuttle Radar Topography Mission : SRTM 1-Arc Second. Si vous souhaitez appliquer le tutoriel à d'autres zones, vous pouvez télécharger les données à partir de USGS Earth Explorer.

2. Calculer le volume sous une élévation donnée

Avant d'utiliser l’outil de traitement QGIS avec PyQGIS, nous l’utiliserons d'abord via l'interface pour nous y familiariser. Dans ce tutoriel, nous allons utiliser l'outil Raster surface volume tool (outil raster surface volume) pour calculer le volume sous une élévation donnée avec un MNT (DEM).

1. Démarrez l'invite d'Anaconda, activez l'environnement Tutorials

conda activate tutorials

2. Lancez QGIS à partir de la ligne de commande, en tapant

qgis

3. A partir du menu principal, allez à Projet | Ouvrir depuis | GeoPackage.

4. Dans la fenêtre Charger un projet depuis GeoPackage naviguez jusqu'au GeoPackage foruni data_stagevolume.gpkg et ouvrez le projet StageVolume (niveau/volume).

Ce projet a un MNT SRTM 1-Arc Second reprojeté à UTM Zone 32N et découpé suivant les limites de la zone autour de la mine à ciel ouvert. Le MNT a été stylé à l'aide d'une rampe de couleur et est mélangé à un rendu ombre de colline (hillshade).

5. Allez à Traitement | Boîte à outils pour ouvrir le panneau Boîte à outils de traitements.

6. Dans Boîte à outils de traitements choisir Analyse raster | Raster surface volume.

7. Dans la fenêtre Raster Surface Volume choisir DTM comme couche source, gardez numéro de bande comme tel et ici nous gaardons Base level 0 m, parce que nous voulons calculer le volume qui est en dessous de 0 m. On le fait en changeant la Méthode à Count Only Below Base Level. Le Surface volume report est un fichier html. nommez le volumebelowzero.html. Le tableau Surface volume est un fichier dbf. Nous ne pouvons pas choisir un fichier dbf, donc nous l'enregistrons en tant que volumebelowzero.shp.

8. Cliquez sur Exécuter.

L'onglet Journal donne le résultat: 'VOLUME' : -1155480399.7627096

Il donne également une erreur en rouge. C'est parce qu'il ne crée pas un shapefile mais un fichier dbf. Vous pouvez donc ignorer cette erreur.

9. Cliquez sur Fermer pour fermer le fenêtre.

En bas de la boîte à outils de traitement, vous trouverez le Visualiseur de résultats.

10. Double-cliquez sur Surface volume report ou sur le lien html (il s'agit du même lien). Il s'ouvrira dans votre navigateur. examinez les résultats.

11. Faites glisser le fichier volumebelowzero.dbf du panneau du Nagivateur vers le cenevas des cartes.

12. Faites un Clic droite sur le tableau volumebelowzero dans le panneau couches et choisir Ouvrir la table des attributs pour examiner les résultats.

13. Répétez avec d’autres élévations à partir de l'étape 5.

Dans la section suivante, nous calculerons les volumes pour plusieurs élévations et stockerons les valeurs dans un tableau.

Veuillez regarder ici, le résultat jusqu'à cette étape:



3. Créer un tableau niveau/ volumes avec PyQGIS dans QGIS

Dans la section précédente, nous avons calculé le volume correspondant à une, et une seule élévation donnée.

Dans cette section, nous calculerons itérativement le volume pour une gamme d'élévations et enregistrerons les résultats dans un tableau. Pour cela, nous devons écrire un script PyQGIS bâti sur l'outil Raster Surface Volume.

Tous les outils de traitement que vous avez exécutés sont stockés dans l'historique de la Boîte à outils de traitements. Jetons y un coup d’œil et voyons comment nous pouvons l'utiliser pour notre script.

1. Dans la Boîte à outils de traitement, cliquez sur pour ouvrir l'historique.

Algorithm history

Vous y trouverez ce que nous avons fait dans la section précédente. Essayez de lire ce qui est écrit après processing.run.

Il contient le nom de l'outil : native:rastersurfacevolume. Il contient un dictionnaire avec toutes les entrées de la fenêtre. Cela signifie que nous pouvons le copier et remplacer des parties du dictionnaire dans un script PyQGIS avec une variable. Ici, nous devons itérer pour différentes valeurs de LEVEL (niveau) du niveau minimal au l'niveau maximal du MNT (DEM).

2. Cliquez fermer pour fermer la fenêtre de l'History.

3. Dans le menu principal, choisir Extension | Console Python pour ouvrir la console de Python.

4. Dans la console de Python cliquez sur pour ouvrir l'éditeur.

5. Allza à cette page GitHub: https://github.com/jvdkwast/PyQGIS_Hydro/blob/master/scripts/StageVolume.py

6. Copiez le code Python dans l'éditeur et enregistrez le script en tant que StageVolume.py.

Lisez les commentaires pour comprendre ce qui se passe dans le code. Plus tard, nous examinerons plus en détail le script lorsque nous travaillerons avec en dehors de l'interface graphique (GUI) de QGIS.

7. La seule chose à changer est de remplacer projectPath et inputRasterDEM par vos noms à vous.

8. Enregistrez le script et cliquez sur pour l'exécuter.

Voici le résultat affiché dans la console Python:

Le script a également ajouté une couche DEM (MNT) et le tableau StageVolume dans le panneau des Couches.

9. Faites un clic droite sur StageVolume et choisissez Ouvrir la table des attributs et l'inspecter.

Stage Volume Table

Nous avons créé le tableau Niveau/Volume avec le champ Level (niveau) en mètres et le champ VolAbsKm3 contenant les volumes en km3.

Dans la section suivante, nous allons créer la courbe Niveau/volume en utilisant l'extension Data Plotly.

Notez que vous pouvez également ajouter StageVolumeTool depuis GitHub à la boîte à outils de traitement. L'outil dispose alors d'une fenêtre. Vous pouvez télécharger l'outil à partir d'ici: https://github.com/jvdkwast/PyQGIS_Hydro/blob/master/scripts/StageVolumeTool.py


4. Créer une courbe Niveau/Volume avec l'extension Data Plotly

Maintenant que nous avons créé le tableau des Niveaux et volumes, nous pouvons facilement créer la courbe des niveaux et volumes avec l'extension Data Plotly.

1. Installez l'extension Data Plotly à partir du repositoire des extensions.

2. Cliquez sur pour ouvrir la panneau de Data Plotly.

3. Assurez vous de choisir Scatter Plot comme type de graphique et StageVolume comme couche. Le champ X est VolAbsKm3 et le champs Y est Level.

4. Cliquez sur

5. Décochez Show legend. Définir Plot title comme Stage Volume (Niveau Volume), Gardez Legend title vide. Changez X label à Volume (km3) et Y label à Level (niveau) (m).

6. Cliquez sur (Créer le graphique)

Vous pouvez enregistrer le résultat sous forme d'image à l'aide du bouton .

Sur la courbe niveau/volume, nous pouvons noter un changement brusque à 86,4 m. C'est approximativement l'altitude de la limite de la fosse.

Dans la prochaine section, nous allons implémenter toute la procédure dans Python en utilisant PyQGIS sans l'interface graphique de QGIS.

Veuillez suivre la vidéo ci-dessous pour voir les résultats obtenus jusqu'à présent:

5. Créer une courbe niveau/volume en utilisant PyQGIS sans l'interface graphique de QGIS

Pour de nombreux besoins d'automatisation, il est également très utile de pouvoir utiliser PyQGIS dans des scripts sans avoir à lancer l'interface graphique de QGIS.

Nous allons explorer cela et examiner plus profondément le code qui a été précedemment utilisé en se servant d’un Jupyter Notebook.

  1. Ouvrez une nouvelle invite Anaconda et activez l'environnement tutorials.
    conda activate tutorials
  2. Nous devons installer la bibliothèque Pandas pour ce tutoriel. Exécutez la commande suivante:
    conda install pandas
  3. Allez dans le dossier où vous voulez télécharger le sous-répertoire contenant le tutoriel.
  4. Dans le navigateur web, allez à https://github.com/jvdkwast/PyQGISTutorials
  5. Allez à Code et copiez l'url https.



  6. Téléchargez le tutoriel et les données avec git:
    git clone -b french https://github.com/jvdkwast/PyQGISTutorials.git
  7. Allez dans le sous-répertoire \PyQGISTutorials\StageVolumeCurve et exécutez:
    jupyter notebook
  8. Dans le navigateur, cliquez sur PyQGISStageVolume.ipynb et suivez le tuturiel.

6. Conclusions

Dans ce tutoriel, vous avez appris à:

  • calculer le volume sous une élévation donnée avec un MNT (DEM)
  • utiliser les outils de traitement de QGIS avec PyQGIS dans QGIS
  • utiliser PyQGIS dans Python sans l'interface utilisateur de QGIS
  • créer une courbe niveau/volume à l'aide de PyQGIS et de Pandas
Vous pouvez faire bien d'autres choses avec PyQGIS, en plus de cet exemple qui vous a été présenté sur PyQGIS.
Les tutoriels d'Ujaval Gandhi sont également une ressource très utile.