Introduction à PyQGIS
Site: | OpenCourseWare for GIS |
Cours: | Programmation pour les applications hydrologiques géospatiales |
Livre: | Introduction à PyQGIS |
Imprimé par: | Guest user |
Date: | vendredi 11 octobre 2024, 18:14 |
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
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.
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.
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.
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.
- Ouvrez
une nouvelle invite Anaconda et activez l'environnement tutorials.
conda activate tutorials
- Nous
devons installer la bibliothèque Pandas pour ce tutoriel. Exécutez la commande
suivante:
conda install pandas
- Allez dans le dossier où vous voulez télécharger le sous-répertoire contenant le tutoriel.
- Dans le navigateur web, allez à https://github.com/jvdkwast/PyQGISTutorials
- Allez à
Code et copiez l'url https.
- Téléchargez
le tutoriel et les données avec git:
git clone
-b french
https://github.com/jvdkwast/PyQGISTutorials.git - Allez
dans le sous-répertoire \PyQGISTutorials\StageVolumeCurve et exécutez:
jupyter notebook
- 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