Skip to content

Commit

Permalink
Amélioration des pages lien, import et gestion des données
Browse files Browse the repository at this point in the history
  • Loading branch information
mdouchin committed Nov 21, 2024
1 parent 1c41d9a commit 585f720
Show file tree
Hide file tree
Showing 9 changed files with 83 additions and 117 deletions.
66 changes: 18 additions & 48 deletions docs/import_data.md
Original file line number Diff line number Diff line change
@@ -1,64 +1,34 @@
# Importer des données

Pour la formation, on doit importer des données pour pouvoir travailler. QGIS possède plusieurs outils pour réaliser cette importation dans PostgreSQL.
Pour la formation, on doit **importer des données** pour pouvoir travailler.

## Import d'une couche depuis QGIS

On doit **charger au préalable la couche source** dans QGIS (SHP, TAB, etc.), puis on doit vérifier :
On doit **charger au préalable la couche source** dans QGIS (SHP, TAB, etc.), puis on doit **vérifier** :

* la **projection**, idéalement EPSG:2154
* l'**encodage** : UTF-8, ISO-8859-15 ? Il faut ouvrir la table attributaire, et vérifier si les accents sont bien affichés. Sinon choisir le bon encodage dans l'onglet **Général** des **propriétés de la couche**
* la **projection**, idéalement `EPSG:2154`
* l'**encodage** : `UTF-8`, `ISO-8859-15`, etc. Il faut ouvrir la **table attributaire**, et vérifier si les accents sont bien affichés. Sinon choisir le bon encodage dans l'onglet **Général** des **propriétés de la couche**
* les **champs**: noms, type, contenu

Pour importer, on utilise le bouton **Import de couche/fichier** du gestionnaire de bdd. On choisit par exemple le fichier des communes:
Pour importer, il existe plusieurs manières dans QGIS. La plus **performante** pour des gros volumes de données est l'utilisation de l'algorithme de la `boîte à outils` du menu `Traitement` appelé `Exporter vers PostgreSQL (Connexions disponibles`.

* on clique sur **Mettre à jour les options**
* on choisit le **nom** de la couche et le schéma **z_formation**
* on coche bien les 2 cases du bas pour **convertir les noms de champ en minuscule** (Convert fieldnames to lowercase) et pour **créer l'index spatial**
![Exporter vers PostgreSQL](media/qgis_traitement_exporter_postgresql_ogr.png)

Après l'import, on peut cliquer, dans le panneau de gauche, sur le nom de la couche créée et parcourir les données avec l'onglet **Table**. Si on souhaite comparer avec la couche d'origine, il suffit de charger la table, en double-cliquant dessus dans l'arbre (ou via les autres outils de QGIS)

**NB**: si un champ s'appelle déjà id dans la donnée source, et qu'il contient des valeurs dupliquées, ou des valeurs textuelles, alors il faut cocher la case **Clé primaire** dans l'outil d'import, puis choisir un nom différent pour que QGIS crée ce nouvel identifiant dans le bon format (entier auto-incrémenté via une séquence, qu'on appelle aussi serial). Par ex: id_commune

## Réimporter une donnée dans une table existante.

### Avec suppression de la table puis recréation.

Il suffit d'utiliser le même **outil d'import** via le gestionnaire de bdd, et cocher la case **Remplacer la table de destination si existante**.

Attention, cela supprime la table avant de la recréer et de la remplir, ce qui peut entraîner des effets de bord (par exemple, on perd les droits définis)

### Avec vidage puis ajout des nouvelles données

Imaginons qu'on ait donné tous les droits sur les tables du schéma, par exemple via cette requête

```sql
-- Ajout des droits un schéma et sur toutes les tables d'un schéma
GRANT ALL ON SCHEMA z_formation TO "unutilisateur";
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA z_formation TO "unutilisateur";
GRANT ALL ON SCHEMA z_formation TO "unepersonne";
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA z_formation TO "unepersonne";
```

Ensuite, on souhaite réimporter le SHP, **sans perdre les droits**: on doit d'abord **vider la table** puis **réimporter les données**, sans cocher la case *Remplacer la table de destination si existante*

```sql
-- Vider une table en remettant à zéro la séquence
-- qui permet d'auto-incrémenter le champ id (la clé primaire)
TRUNCATE TABLE z_formation.commune RESTART IDENTITY;
```

Ensuite, on importe via l'outil spécifique du menu **Traitement / Boîte à outils**. Chercher "export" dans le champ du haut (Rechercher...), et lancer l'algorithme **Exporter vers PostgreSQL (connexions disponibles)** de **GDAL**. Il faut choisir les options suivantes:
Pour trouver cet algorithme, chercher `PosgreSQL` dans le champ du haut, et lancer l'algorithme **Exporter vers PostgreSQL (connexions disponibles)** de **GDAL**. Il faut choisir les options suivantes :

* choisir la bonne **connexion**, la couche en entrée, etc.
* choisir le **schéma**, par exemple z_formation
* choisir le **nom de la table**, par exemple commune
* laisser id dans le champ **Clef primaire** ou choisir le champ approprié
* décocher **Écraser la table existante**
* cocher **Ajouter à la table existante**
* choisir le **schéma**, par exemple `z_formation`
* choisir le **nom de la table**, par exemple `commune`
* laisser `id` dans le champ **Clef primaire** si aucun champ entier auto-incrémenté existe, ou choisir le champ approprié
* décocher **Convertir en morceaux multiples** pour les couches de points (et aussi pour les lignes et polygones si on est sûr)
* laisser le reste par défaut.

Lancer l'algorithme, et vérifier une fois les données importées que les nouvelles données ont bien été ajoutées à la table.
![Algorithe d'export vers PostgreSQL](media/qgis_traitement_exporter_dialogue_algorithme.png)

Après l'import, on peut charger la table comme une couche via **l'explorateur de QGIS** :

* **rafraîchir** le contenu du schéma via clic-droit et `Rafraîchir`
* **double-cliquer** sur la table

## Importer plusieurs couches en batch

Expand All @@ -68,4 +38,4 @@ Vous pouvez créer manuellement chaque ligne, ou choisir directement les couches
https://docs.qgis.org/latest/fr/docs/user_manual/processing/batch.html


Continuer vers [Sélectionner des données: SELECT](./sql_select.md)
Continuer vers [Sélectionner des données : SELECT](./sql_select.md)
22 changes: 11 additions & 11 deletions docs/links_and_data.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,31 +11,31 @@ Documentation des fonctions PostGIS:

## Base de données

Nous présupposons qu'une **base de données** est accessible pour la formation, via un utilisateur PostgreSQL avec des droits élevés (notamment pour créer des schémas et des tables). L'extension **PostGIS** doit aussi être activée sur cette base de données.
Nous présupposons qu'une **base de données** est accessible pour la formation, via un **rôle PostgreSQL** avec des droits élevés (notamment pour créer des schémas et des tables). L'extension **PostGIS** doit aussi être activée sur cette base de données.

## Jeux de données

Pour cette formation, nous utilisons des données libres de droit :

* Un dump est téléchargable en cliquant sur ce [lien](https://github.com/3liz/formation-postgis/releases/download/1.0/data_formation.dump).
* Un dump est téléchargeable en cliquant sur ce [lien](https://github.com/3liz/formation-postgis/releases/download/1.0/data_formation.dump).

Il peut est chargé en base avec cette commande : `pg_restore -d "NOM_BASE" data_formation.dump`
Il peut est chargé en base avec cette commande :
```bash
pg_restore -h URL_SERVEUR -p 5432 -U NOM_UTILISATEUR -d NOM_BASE --no-owner --no-acl data_formation.dump
```

Ce jeu de données a pour sources :

* Extraction de données d'**OpenStreetMap** dans un format SIG, sous licence ODBL ( site https://github.com/igeofr/osm2igeo ). On utilisera par exemple les données de l'ancienne région Haute-Normandie:
https://www.data.data-wax.com/OSM2IGEO/FRANCE/202103_OSM2IGEO_23_HAUTE_NORMANDIE_SHP_L93_2154.zip
* Extraction de données d'**OpenStreetMap** dans un format SIG, sous licence "ODBL" (site https://github.com/igeofr/osm2igeo ). On utilisera par exemple les données de l'ancienne région Haute-Normandie.

* Données cadastrales (site https://cadastre.data.gouv.fr ), sous licence Par exemple pour la Seine-Maritime:
https://cadastre.data.gouv.fr/data/etalab-cadastre/2019-01-01/shp/departements/76/
* Données cadastrales (site https://cadastre.data.gouv.fr ), sous licence "Licence Ouverte 2.0" Par exemple pour la Seine-Maritime :
https://cadastre.data.gouv.fr/data/etalab-cadastre/2024-10-01/shp/departements/76/

* PLU (site https://www.geoportail-z_formation.gouv.fr/map/ ). Par exemple les données de la ville du Havre:
https://www.geoportail-z_formation.gouv.fr/map/#tile=1&lon=0.13496041707835396&lat=49.49246433172931&zoom=12&mlon=0.117760&mlat=49.502918
Cliquer sur la commune, et utiliser le lien de téléchargement, actuellement:
* PLU (site https://www.geoportail-urbanisme.gouv.fr/map/ ). Par exemple les données de la ville du Havre. Cliquer sur la commune, et utiliser le lien de téléchargement.

Ces données peuvent aussi être importées dans la base de formation via les outils de QGIS.

## Concepts de base de données:
## Concepts de base de données

Un rappel sur les concepts de table, champs, relations.

Expand Down
Binary file added docs/media/qgis_connexion_PostgreSQL.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/media/qgis_creer_schema_explorateur.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/media/qgis_creer_table_explorateur.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 585f720

Please sign in to comment.