2.2 Manipuler une BDD dans QGIS
Dans cette partie nous allons manipuler des BDD PostGIS directement via QGIS Desktop. Nous apprendrons d'abord à créer des connexions vers ces bases via le bouton Ajout de couches (cf. 2.2.1). Puis nous utiliserons l'extension DB Manager et explorerons ses fonctionnalités d'import (cf. 2.2.2), de création de schéma (cf. 2.2.3) et d'édition de table vectorielle (cf. 2.2.4).
2.2.1 Se connecter à une base PostGIS via QGIS
QGIS peut afficher des données spatiales stockées dans une ou plusieurs BDD spatiales dont les formats pris en charge sont : PostGIS, SpatiaLite, GeoPackage, Oracle Spatial, MSSQL, DB2, couches virtuelles.
TP : se connecter à la base bdd_sist_solution
via QGIS
Ouvrez QGIS et créez un nouveau projet dans data/mon_travail
dénommé 2_2_bdd_sist_solution.qgz
.
Ajoutez une couche PostGIS via le bouton Ajout de couches de la barre d'outils Gestion des sources de données. Puis cliquez sur PostgreSQL et créez une nouvelle connexion en sélectionnant Nouveau. Compléter les informations suivantes :
- Nom = connexion_solution
- Hôte = localhost (ou adresse IP du serveur)
- Port = 5432
- Base de données =
bdd_sist_solution
- Authentification/De base : Nom d'utilisateur =
sist
et Mot de passe =sist
(normalement à ne pas stocker, mais ici par facilité on va le faire !) - Cochez l'option "Lister les tables sans géométries" pour voir les tables non spatialisées (ex :
insee
) en dessous de la liste des tables
Si le "test de la connexion" fonctionne, cliquez sur OK, sinon corrigez les paramètres ci-dessus.
Une fois la connexion créée, son nom apparaît dans le menu déroulant des connexions disponibles. Il suffit ensuite de cliquer sur Connecter pour accéder à son contenu classé par schéma.
Sélectionnez (ctrl - clic) dans le schéma occ
les tables departement
, commune
, ligne_rfn
,gare
,chef_lieu
et insee
pour les visualiser dans le panneau de carte. Cliquez sur Ajouter : les données s'affichent dans le panneau de carte.
Enregistrez le projet et fermez-le.
2.2.2 Découverte de l'outil DB Manager
L'extension DB Manager, également dénommée Gestionnaire BD, est accessible via le menu Base de données ou via le bouton (menu Vue/Barres d'outils/Base de données). C'est l'un des outils d’intégration et de gestion des formats de BDD spatiales pris en charge par QGIS dont PostGIS.
Le menu Base de données permet de :
- Actualiser l'outil pour faire apparaître les éventuelles dernières opérations de connexion ou d'import/export de tables notamment,
- ouvrir une Fenêtre SQL pour exécuter des requêtes SQL (cf. 2.3),
- Quitter l’outil.
Une fois connecté à une BDD, de nouvelles fonctionnalités apparaissent :
Le menu Schéma inclut des outils pour Créer un schéma et Supprimer le schéma (vide).
Le menu Table permet de :
-
créer/éditer des tables et supprimer des tables et des vues,
-
vider des tables,
- déplacer une table vers un autre schéma de la base,
- effectuer un "nettoyage" des tables cibles par la commande SQL Vacuum Analyze,
- actualiser les données des vues matérialisées (cf. bonnes pratiques sur l'usage de vues matérialisées 2.4),
- importer des couches ou des fichiers, qu’ils soient chargés ou non dans QGIS, également disponible via le menu ,
- exporter les tables d’une BDD en shapefile ou autre format, également disponible via le menu .
Autres fonctions de transfert :
- glisser-déposer les tables ou vues depuis DB Manager vers l’explorateur/canevas QGIS,
- transférer des tables entre bases de données par un simple glisser-déposer.
En savoir plus via la doc QGIS...
2.2.3 Créer un schéma et y importer des données vectorielles
Nous allons à présent utiliser DB Manager pour créer un schéma qui va stocker les données spatiales à importer.
L'import/export de données peut également être réalisé en lignes de commande via les outils shp2pgsl (pour ESRI shapefiles), pgsql2shp (export de tables, vues ou requêtes de sélection SQL en shapefile) et ogr2ogr, très puissant pour convertir les données entre PostGIS et beaucoup de formats de données (en savoir plus via la doc QGIS...).
TP : se connecter à la base bdd_sist_tp
via DB Manager, créer le schéma occ
(pour Occitanie) et y importer des données spatiales
Dans QGIS ouvrez le projet 1_4_symbologie_occitanie_sncf.qgz
dans le dossier data/mon_travail
(ou dans data/solutions
) et l'enregistrez sous un nouveau nom 2_2_bdd_sist_tp_occ.qgz
dans data/mon_travail
(rem : on pourrait aussi repartir d'un projet vierge).
Sélectionnez dans la couche des chefs-lieux les 320 préfectures de région, préfectures, sous-préfectures et Paris (critère : "STATUT" LIKE '%réfecture%' OR "STATUT" = 'Capitale d''état').
Créez une nouvelle connexion connexion_tp à la base bdd_sist_tp
avec l'utilisateur sist
(cf. TP ci-dessus, ou via DB Manager). Connectez-vous à cette base.
Dans DB manager, créez le schéma occ
via le menu Schéma/Créer un schéma... de DB Manager.
Pour la liste des données ci-après, importez dans le schéma occ
à l'aide du bouton Import de couche/fichier chaque fichier en précisant (après vérification éventuelle des métadonnées) :
Procédure à répéter pour chaque fichier à importer :
- Schéma =
occ
- Table = le nom de la table (bonne pratique : toujours en minuscule, sans accent ni espace ni caractères spéciaux, remplacez "-" par "_")
-
Cochez les cases et renseignez :
- Clé primaire = "id" (valeur par défaut OK)
- Colonne géométrique = "geom"
- SCR source = valeur par défaut à vérifier (attention il faut que ça commence par EPSG ... et non IGNF...)
- SCR cible = EPSG:2154 - RGF93 / Lambert-93 à choisir pour toutes les tables (rem : pour certaines couches, une reprojection s'opère)
- Encodage = UTF-8 (valeur par défaut OK)
- Cochez "Convertir les noms de champ en minuscule"
- Cochez "Créer un index spatial" (pour optimiser les temps de calcul des requêtes)
Enregistrez régulièrement le projet.
Liste des données à importer dans la base bdd_sist_tp
:
-
1) celles déjà présentes dans le projet QGIS :
COMMUNE
(shapefile) : attention, renommez la table en minusculecommune
au moment de l'importchef_lieu
(shapefile) : attention, ne pas oubliez de cocher la case "Importer uniquement les entités sélectionnées" pour n'importer que la sélection des 320 chefs-lieux. Table à renommerchef_lieu
formes-des-lignes-du-rfn
(shapefile) : à renommerligne_rfn
liste-des-gares
(texte délimité "spatial") : à renommergare
-
2) celles du répertoire
/data
absentes du projet QGIS :/IGN_ETALAB/ADMIN-EXPRESS-COG/DEPARTEMENT.shp
(shapefile) : attention, renommez la table en minusculedepartement
(SCR 2154)/mon_travail/1_6_selection_jointure/com_comparateur_occitanie
(texte délimité "non spatial" ou tableur généré en 1.6 exercice 13) : à renommerinsee
et avec "id" comme clé primaire et UTF-8 comme encodage des caractères
Explorez dans DB Manager chaque nouvelle table à travers ses 3 onglets Info, Table et Aperçu.
Une fois les imports terminés, supprimez toutes les couches du projet QGIS. Puis double-cliquez dans DB Manager sur les nouvelles tables PostGIS créées, organisez-les dans le panneau des couches et visualisez-les sur la carte.
Enregistrez le projet.
Couche non valide
Attention, QGIS peut afficher le message d’erreur : "la couche xxx n’est pas valide". La table ou la vue doit avoir obligatoirement un identifiant unique de type int4 ou équivalent (source : documentation QGIS). De plus, la vue geometry_columns
doit être à jour et correctement renseignée (type et SRID).
Rem : l'export (non abordé en TP) est également très facile à réaliser via le menu Table/Exporter vers le fichier... ou le bouton .
2.2.4 Créer une table vectorielle pour l'édition des données
Il est possible de créer une table vectorielle et d'ajouter des champs, dont le champ de géométrie (avec un index spatial). Par contre, il n’est pas possible d’ajouter des données dans "geom" : il faut utiliser le menu d’édition des couches de QGIS pour géolocaliser/dessiner les géométries (points, lignes, polygones) et compléter ensuite les données attributaires.
Nous allons ici créer une table vectorielle avec la définition de ses différents champs en vue de son édition en ligne via le webmapping (cf. 3. Webmapping).
TP : se connecter à la base bdd_sist_tp
via DB Manager, créer le schéma montp
(pour Montpellier) et créer une table
Ouvrez QGIS et créez un nouveau projet vierge 2_2_bdd_sist_tp_montp.qgz
dans le dossier data/mon_travail
.
Ajoutez la couche raster 1724_montpel_cv_niquet_georef.tif
du répertoire data/Occitanie/Montpellier_Niquet/
dont le SCR est RGF93 / Lambert 93 (EPSG 2154).
Ajoutez la couche vectorielle Occsol_montpel_1724.shp
issue de data/mon_travail/1_5_numerisation
et créée dans le cadre dans l'exercice 9 de la partie 1.5. Numérisation.
Créez le schéma montp
via le menu Schéma/Créer un schéma... de DB Manager.
Importez la couche Occsol_montpel_1724.shp
dans le schéma montp
(cf. TP ci-dessus) : renommez la table occsol_1724
.
Créez la table point_legend_1724
via le menu Table/Créer une table... de DB Manager, avec les caractéristiques suivantes :
- Schéma =
montp
- Nom =
point_legend_1724
-
Puis cliquez sur le bouton Ajouter un champ et renseignez le tableau :
- "id" de type serial (entier int4 qui s'auto-incrémente)
- "num_niquet" de type smallint (entier) qui ne peut pas être NULL
- "libelle" de type varchar (texte) qui ne peut pas être NULL
-
Clé primaire = "id"
- Cochez "Créer une colonne géométrique" de type POINT, Nom = "geom", Dimensions = 2 et SRID = 2154
- Cochez "Créer un index spatial"
Puis cliquez sur "Créer" : la table de ponctuels est créée mais ne contient aucun enregistrement.
Glissez-déposez cette nouvelle table depuis DB Manager dans le panneau de couches de QGIS (ou double-cliquez dessus). Cliquez sur Basculer en mode édition .
A l'aide de la légende de la carte de Montpellier en 1724 selon Niquet et du bouton , créez les points numérotés 1 à 6 et 11 sur la carte d'origine (= les principales portes de la cité) en ajoutant pour chacun leur "num_niquet" et "libelle" correspondants.
Une fois la saisie terminée, enregistrez les points après avoir désactivé le bouton d'édition . Observez le résultat sur la carte et dans la table attributaire.
Enregistrez le projet.
2.2.5 À RETENIR
L'outil DB Manager permet de se connecter à une ou plusieurs BDD et d'effectuer des opérations de gestion : création, modification, suppression de schémas/tables mais également de vues. DB Manager permet également de manipuler les données elles-mêmes à travers les requêtes SQL (cf. 2.3).
En savoir plus sur l'extension DB Manager via la doc QGIS...