From 55419bbad50339dc47edd137976236ff4778b4b5 Mon Sep 17 00:00:00 2001 From: Etienne Trimaille Date: Tue, 3 Dec 2024 17:28:34 +0100 Subject: [PATCH] Update support --- README.md | 4 ---- docs/console.md | 16 +++++++++------- docs/extension-deploiement.md | 12 ++++++------ docs/fonctions-scripts.md | 28 +++++++++++++++++----------- docs/memo-python.md | 5 +++++ 5 files changed, 37 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 6ceb8f2..7a841fd 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,3 @@ # Formation PyQGIS Visible sur https://docs.3liz.org/formation-pyqgis - -## Maintenance - -En cas de MAj de la BDTOPO, faire un rechercher&remplacer `BDT_3-3_SHP_LAMB93_D0ZZ-EDYYYY-MM-DD` diff --git a/docs/console.md b/docs/console.md index d401f5c..7dc3b61 100644 --- a/docs/console.md +++ b/docs/console.md @@ -7,14 +7,16 @@ Nous allons utiliser un département de la [BDTopo](https://geoservices.ign.fr/b !!! tip Les DROM-COM ou le Territoire de Belfort (90) sont assez légers. +1. Renommer le dossier `BDT_3-3_SHP_LAMB93_D0ZZ-EDYYYY-MM-DD` en `BD_TOPO` afin de simplifier les corrections. + ## Configurer le projet * Commencer un nouveau projet et enregistrer le dans un dossier. -* À côté du projet `qgs` ou `qgz`, ajouter le dossier provenant de la BDTopo, le dossier `BDT_3-3_SHP_LAMB93_D0ZZ-EDYYYY-MM-DD`. +* À côté du projet `qgs` ou `qgz`, ajouter le dossier provenant de la BDTopo, le dossier `BD_TOPO` ci-dessus. ```bash . -├── BDT_3-3_SHP_LAMB93_D0ZZ-EDYYYY-MM-DD +├── BD_TOPO │   ├── ADMINISTRATIF │   ├── ADRESSES │   ├── BATI @@ -128,7 +130,7 @@ project.absoluteFilePath() ### Manipulation en console pour ajouter une couche Shapefile * Objectif, ajouter une couche vecteur contenu dans un dossier fils : - * Exemple `BDT_3-3_SHP_LAMB93_D0ZZ-EDYYYY-MM-DD/ADMINISTRATIF/COMMUNE.shp` : + * Exemple `BD_TOPO/ADMINISTRATIF/COMMUNE.shp` : * Recherchons dans l'API de `QgsProject` le fichier actuel du projet, à l'aide `filepath`. * L'utilisation de `home` est un peu différente, dans QGIS on peut définir un répertoire différent pour la racine des données. * Nous allons utiliser l'objet `Path` pour manipuler les fichiers/dossiers. @@ -152,7 +154,7 @@ racine = Path(project.absoluteFilePath()).parent On peut joindre notre BDTopo, en donnant plusieurs paramètres à `joinpath` : ```python -chemin = racine.joinpath('BDT_3-3_SHP_LAMB93_D0ZZ-EDYYYY-MM-DD', 'ADMINISTRATIF') +chemin = racine.joinpath('BD_TOPO', 'ADMINISTRATIF') fichier_shape = chemin.joinpath('COMMUNE.shp') ``` @@ -193,7 +195,7 @@ print(communes) from pathlib import Path project = QgsProject.instance() racine = Path(project.absoluteFilePath()).parent - chemin = racine.joinpath('BDT_3-3_SHP_LAMB93_D0ZZ-EDYYYY-MM-DD', 'ADMINISTRATIF') + chemin = racine.joinpath('BD_TOPO', 'ADMINISTRATIF') fichier_shape = chemin.joinpath('COMMUNE.shp') # fichier_shape.is_file() communes = QgsVectorLayer(str(fichier_shape), 'communes', 'ogr') @@ -208,7 +210,7 @@ print(communes) project = QgsProject.instance() racine = project.homePath() - chemin = join(racine, 'BDT_3-3_SHP_LAMB93_D0ZZ-EDYYYY-MM-DD', 'ADMINISTRATIF') + chemin = join(racine, 'BD_TOPO', 'ADMINISTRATIF') fichier_shape = join(chemin, 'COMMUNE.shp') communes = QgsVectorLayer(fichier_shape, 'communes', 'ogr') communes.isValid() @@ -326,7 +328,7 @@ Petit récapitulatif à tester pour voir si cela fonctionne correctement ! ```python from pathlib import Path -dossier = 'BDT_3-3_SHP_LAMB93_D0ZZ-EDYYYY-MM-DD' +dossier = 'BD_TOPO' thematique = 'ADMINISTRATIF' couche = 'COMMUNE' diff --git a/docs/extension-deploiement.md b/docs/extension-deploiement.md index c18d53d..022875b 100644 --- a/docs/extension-deploiement.md +++ b/docs/extension-deploiement.md @@ -27,17 +27,17 @@ et son fichier Il est possible de protéger son dépôt avec un login/mot de passe. +### Tutoriel pour installer un dépôt + +Notre [tutoriel](https://docs.3liz.org/tutorial/qgis-repository-fr/) pour l'installation d'un dépôt, avec ou sans +mot de passe. + ## plugins.qgis.org -Plus simple pour le déploiement car le dépôt [plugins.qgis.org](https://plugins.qgis.org) est par défaut dans +Plus simple pour le déploiement, car le dépôt [plugins.qgis.org](https://plugins.qgis.org) est par défaut dans les installations de QGIS. Il faut cependant que le code source soit disponible sur internet. Lire [les recommandations](https://plugins.qgis.org/publish/) pour la publication sur ce dépôt : * Code source disponible * `metadata.txt` avec les bonnes informations et des liens HTTP valides - -## Tutoriel pour installer un dépôt - -Notre [tutoriel](https://docs.3liz.org/tutorial/qgis-repository-fr/) pour l'installation d'un dépôt, avec ou sans -mot de passe. diff --git a/docs/fonctions-scripts.md b/docs/fonctions-scripts.md index c7be2b8..60a7fe2 100644 --- a/docs/fonctions-scripts.md +++ b/docs/fonctions-scripts.md @@ -5,10 +5,14 @@ Avant de commencer à vraiment écrire un script avec des fonctions, regardons comment communiquer des informations à l'utilisateur. +!!! tip "Cookbook" + Lien vers le [Python cookbook](https://docs.qgis.org/3.34/fr/docs/pyqgis_developer_cookbook/communicating.html) + qui présente cette partie plus précisément. + ### La barre de message On peut envoyer des messages vers l'utilisateur avec l'utilisation de la `messageBar` de la classe -[QgisInterface](https://qgis.org/api/classQgisInterface.html) : +`QgisInterface` [CPP](https://qgis.org/api/classQgisInterface.html)/[PyQGIS](https://qgis.org/pyqgis/3.34/gui/QgisInterface.html) : ```Python iface.messageBar().pushMessage('Erreur','On peut afficher une erreur', Qgis.Critical) @@ -19,9 +23,9 @@ iface.messageBar().pushMessage('Succès','ou un succès', Qgis.Success) Cette fonction prend 3 paramètres : -- un titre -- un message -- un niveau d'alerte +1. un titre +1. un message +1. un niveau d'alerte On peut voir dans la classe de [QgsMessageBar](https://qgis.org/pyqgis/master/gui/QgsMessageBar.html#qgis.gui.QgsMessageBar.pushSuccess) qu'il existe aussi `pushSuccess` qui est une alternative par exemple. @@ -56,8 +60,8 @@ l'organisation du code. 1. Exécuter le ```python -# En haut du script, ce souvent des variables à modifier -bd_topo = 'BDT_3-3_SHP_LAMB93_D0ZZ-EDYYYY-MM-DD' +# En haut du script, ce sont souvent des variables à modifier +bd_topo = 'BD_TOPO' thematique = 'ADMINISTRATIF' couche = 'COMMUNE' @@ -118,7 +122,7 @@ On peut ajouter une **docstring** à notre fonction, juste en dessous du `def`, ??? "Afficher la solution intermédiaire" ```python # En haut du script, ce souvent des variables à modifier - bd_topo = 'BDT_3-3_SHP_LAMB93_D0ZZ-EDYYYY-MM-DD' + bd_topo = 'BD_TOPO' thematique = 'ADMINISTRATIF' couche = 'COMMUNE' @@ -157,7 +161,7 @@ On peut garder le code le plus à gauche possible grâce à `return` qui ordonne ??? "Afficher une des solutions finales" ```python # En haut du script, ce souvent des variables à modifier - bd_topo = 'BDT_3-3_SHP_LAMB93_D0ZZ-EDYYYY-MM-DD' + bd_topo = 'BD_TOPO' # Puis place au script # En théorie, pas besoin de modification, en dessous pour un "utilisateur final" du script @@ -388,10 +392,11 @@ with edit(layer): layer = iface.activeLayer() layer.startEditing() - + print("Début de la session") # Code inutile, mais qui va volontairement faire une exception Python a = 10 / 0 + print("Fin de la session") layer.commitChanges() print("Fin du script") ``` @@ -402,6 +407,7 @@ with edit(layer): layer = iface.activeLayer() with edit(layer): + print("Début de la session") # Code inutile, mais qui va volontairement faire une exception Python a = 10 / 0 @@ -416,13 +422,13 @@ Nous allons avoir besoin de plusieurs classes dans l'API QGIS : * `QgsProject` : [PyQGIS](https://qgis.org/pyqgis/master/core/QgsProject.html) / [CPP](https://api.qgis.org/api/classQgsProject.html) * `QgsVectorLayer` : [PyQGIS](https://qgis.org/pyqgis/master/core/QgsVectorLayer.html) / [CPP](https://api.qgis.org/api/classQgsVectorLayer.html) -* Enregistrer un fichier avec `QgsVectorFileWriter` : [PyQGIS](https://qgis.org/pyqgis/master/core/QgsVectorFileWriter.html) / [CPP](https://api.qgis.org/api/classQgsVectorFileWriter.html) +* Enregistrer un fichier avec `QgsVectorFileWriter` : [PyQGIS](https://qgis.org/pyqgis/master/core/QgsVectorFileWriter.html) / [CPP](https://api.qgis.org/api/classQgsVectorFileWriter.html), lire la correction pour voir son usage. * Un champ dans une couche vecteur : `QgsField` ([PyQGIS](https://qgis.org/pyqgis/master/core/QgsField.html) / [CPP](https://api.qgis.org/api/classQgsField.html)), attention à ne pas confondre avec `QgsFields` ([PyQGIS](https://qgis.org/pyqgis/master/core/QgsFields.html) / [CPP](https://api.qgis.org/api/classQgsFields.html)) qui lui représente un ensemble de champs. * Une entité `QgsFeature` [PyQGIS](https://qgis.org/pyqgis/master/core/QgsFeature.html) / [CPP](https://api.qgis.org/api/classQgsFeature.html) * Pour le type de géométrie : Utiliser `QgsVectorLayer` `geometryType()` et également la méthode `QgsWkbTypes.geometryDisplayString()` pour sa conversion en chaîne "lisible" - * [PyQGIS](https://qgis.org/pyqgis/master/core/QgsWkbTypes.html) / [CPP](https://api.qgis.org/api/classQgsWkbTypes.html) + * [PyQGIS](https://qgis.org/pyqgis/master/core/QgsWkbTypes.html) / [CPP](https://api.qgis.org/api/classQgsWkbTypes.html) Pour le type de champ, on va avoir besoin de l'API Qt également : diff --git a/docs/memo-python.md b/docs/memo-python.md index 2e447bc..0aa4d87 100644 --- a/docs/memo-python.md +++ b/docs/memo-python.md @@ -191,6 +191,11 @@ commune['est_prefecture'] = True # Ou directement lors de la création de la variable : commune = {'nom': 'Besançon', 'code_insee': 25056, 'est_prefecture': True} + +# Lire le contenu d'une clé : +print(commune['nom']) +print(commune['population']) # Leve une erreur IndexError +print(commune.get('population')) # Imprime None ``` ## Les commentaires