Skip to content

Commit

Permalink
Update support
Browse files Browse the repository at this point in the history
  • Loading branch information
Gustry committed Dec 3, 2024
1 parent dabfa4d commit 55419bb
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 28 deletions.
4 changes: 0 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -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`
16 changes: 9 additions & 7 deletions docs/console.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.
Expand All @@ -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')
```

Expand Down Expand Up @@ -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')
Expand All @@ -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()
Expand Down Expand Up @@ -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'

Expand Down
12 changes: 6 additions & 6 deletions docs/extension-deploiement.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
28 changes: 17 additions & 11 deletions docs/fonctions-scripts.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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.
Expand Down Expand Up @@ -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'

Expand Down Expand Up @@ -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'

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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")
```
Expand All @@ -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

Expand All @@ -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 :

Expand Down
5 changes: 5 additions & 0 deletions docs/memo-python.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 55419bb

Please sign in to comment.