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 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 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.

qgis bdd sist

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 icone DB Manager (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.

extension DB Manager

Le menu Base de données permet de :

  • Actualiser icone DB Manager 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 icone DB Manager fenetre 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 icone DB Manager import,
  • exporter les tables d’une BDD en shapefile ou autre format, également disponible via le menu icone DB Manager export.

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 minuscule commune au moment de l'import
    • chef_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 à renommer chef_lieu
    • formes-des-lignes-du-rfn (shapefile) : à renommer ligne_rfn
    • liste-des-gares (texte délimité "spatial") : à renommer gare
  • 2) celles du répertoire /data absentes du projet QGIS :

    • /IGN_ETALAB/ADMIN-EXPRESS-COG/DEPARTEMENT.shp (shapefile) : attention, renommez la table en minuscule departement (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) : à renommer insee 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.

resultat import

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 icone DB Manager export.

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.

dbmanager create table

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 Basculer en mode édition.

A l'aide de la légende de la carte de Montpellier en 1724 selon Niquet et du bouton Ajouter un point, 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 Basculer en mode édition. Observez le résultat sur la carte et dans la table attributaire.

Enregistrez le projet.

qgis edition table

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...