IX. Analyse spatiale

IX.5 Un exemple d'application : dites-le avec du SQL !


Comment faire pour automatiser les opérations réalisées au chapitre précédent, afin de pouvoir rendre le processus plus reproductible ?

Une première solution serait d'utiliser un modèle. Nous ne verrons pas ici le pas à pas pour créer le modèle en question, mais vous pouvez essayer vous-même en vous référant ici !

Une autre solution pour automatiser ce traitement est d'utiliser des requêtes SQL. Il s'agit d'une partie « pour aller plus loin », d'un niveau plus avancé, et vous pouvez très bien décider de vous arrêter ici. Nous nous appuierons sur cette partie.

Il est possible d'utiliser 2 logiciels différents à partir de QGIS pour lancer des requêtes SQL :

  • SQLite et son module spatial SpatiaLite ne nécessitent pas d'installation, mais les fonctions disponibles sont plus limitées que celles de Postgresql/PostGIS
  • Postgresql et son module spatial PostGIS doivent être installés en plus de QGIS, mais une fois cette opération réalisée beaucoup de possibilités s'offriront à vous !

Il n'y a pas une solution meilleure qu'une autre mais elles répondent à des besoins différents.

Pour cet exercice les 2 logiciels peuvent être utilisés. Si vous choisissez Postgresql/PostGIS, l'installation ne sera pas détaillée ici mais on trouve de nombreuses ressources sur internet. La syntaxe étant légèrement différente d'un logiciel à l'autre, les requêtes seront proposées en 2 versions.

Pour ce chapitre, vous pouvez soit télécharger les données Corine Land Cover : Données Métropole 2000 et Données Métropole 2012 puis les filtrer pour ne garder que les vignes, comme détaillé dans le tutoriel, ou bien utiliser les données en téléchargement déjà filtrées (pour un téléchargement moins lourd).

Création d'une nouvelle base SpatiaLite ou PostGIS

La première étape consiste à créer une base de données vides dans le logiciel choisi, et à y importer les données de départ, à savoir la couche Corine Land Cover.

Si vous choisissez d'utiliser Postgresql/PostGIS, assurez-vous d'avoir installé ces logiciels avant de poursuivre !

Commencez par ouvrir un nouveau projet QGIS et chargez la couche CLC00_FR_RGF ou bien CLC00_221_FR_RGF (données déjà filtrées pour ne garder que les vignes).

Création d'une base SpatiaLite

Nous allons tout d'abord créer une base SpatiaLite vide.

Dans le panneau Explorateur, faites un clic droit sur SpatiaLite → Créer une base de données... :

clic droit sur spatialite

Naviguez jusqu'au dossier où vous souhaitez créer votre base, et nommez-la par exemple maillage_clc. Elle est maintenant visible dans l'explorateur :

base spatialite créée

Si vous naviguez dans l'explorateur de fichiers de votre ordinateur jusqu'à votre base de données, vous verrez qu'un fichier SQLite a été créé. Par rapport à un format comme le shapefile, une base de données est comme une boîte qui peut contenir plusieurs jeux de données.

Une base SpatiaLite est une base SQLite qui peut gérer des données spatiales grâce au module SpatiaLite. Elle est constituée d'une seule fichier qu'on peut copier d'un dossier à l'autre.

Ça n'est pas le cas des logiciels de bases de données « traditionnels » tels que PostgreSQL, qui fonctionnent selon une logique client-serveur : la base est installé sur un serveur, et des utilisateurs peuvent s'y connecter à partir d'autres ordinateurs. Bien sûr il est possible de se servir de son propre ordinateur comme de serveur, et la base ne sera accessible que depuis celui-ci : c'est ce qu'on appelle une base « en local ».

Création d'une base PostGIS

...Et c'est ce que nous allons faire ici ! Si vous avez décidé de travailler avec SpatiaLite, passez directement à l'import des données.

Je pars du principe ici que vous avez déjà installé PostgreSQL et PostGIS, et que vous êtes connecté à un serveur PostgreSQL, local ou distant.

QGIS peut uniquement se connecter à une base déjà existante, la création d'une nouvelle base PostgreSQL/PostGIS ne peut se faire dans QGIS.

Il existe plusieurs méthodes pour cela, qui sortent un peu de ce tutoriel : cette partie consistera surtout en des renvois vers des tutoriels existants.

PostgreSQL en soi ne possède pas d'interface graphique mais fonctionne en lignes de commande. Si ce mot vous fait peur, pas de panique ! Il existe plusieurs logiciels qui peuvent servir d'interface graphique à PostgreSQL et vous permettre d'arriver à vos fins en quelques clics.

Le plus connu est peut-être pgAdmin, qui est peut-être déjà installé sur votre ordinateur selon la manière dont vous avez installé PostgreSQL. Vous pouvez également utiliser par exemple DBeaver.

Pour créer une nouvelle base de données PostgreSQL, en la nommant maillage_clc :

  • en ligne de commande ou ici
  • avec pgAdmin en déroulant pour aller à la partie « 3) Creating a new database using pgAdmin »
  • avec DBeaver, le principe est le même qu'avec pgAdmin : clic droit sur le serveur postgres → Créer → Database

Il faut ensuite donner les 2 extensions postgis et postgis_topology à la base pour pouvoir y mettre des données géographiques. Encore une fois, vous pouvez procéder au choix :

  • en ligne de commande avec ces 2 commandes : CREATE EXTENSION postgis; et CREATE EXTENSION postgis_topology;
  • avec pgAdmin, en faisant un clic droit sur la base → Créer → Extension puis en choisissant postgis et postgis_topology
  • avec DBeaver, sensiblement de la même manière qu'avec pgAdmin

Votre base PostGIS est créée, il ne reste plus qu'à s'y connecter dans QGIS !

icône du gestionnaire de donnéesMenu Couche → Gestionnaire des sources de données ou bien clic sur l'icône correspondante, rubrique PostgreSQL :

création d'une connexion à une base PostGIS

Cliquez sur Nouveau pour créer une nouvelle connexion à notre base maillage_clc :

Fenêtre de création d'une connexion à une base PostGIS
  • Nom : vous pouvez donner le nom de votre choix à la connexion, mais le plus simple est probablement de lui donner le même nom que la base : maillage_clc
  • Hôte : tapez localhost si votre base est en local, sinon l'adresse de votre serveur PostgreSQL
  • Port : par défaut, le numéro du port est 5432, mais il peut être différent selon votre configuration
  • Base de données : tapez ici le nom de la base : maillage_clc
  • Cliquez ensuite sur Tester la connexion : selon votre configuration, il sera nécessaire ou non de rentrer vos identifiants

Si le test de connexion est réussi, vous pouvez cliquer sur OK et fermer la fenêtre. Vous pouvez également fermer la fenêtre du gestionaire de sources de données.

Votre base est maintenant visible dans l'explorateur :

Base PostGIS visible dans l'explorateur de fichiers

Une dernière étape consiste à créer un schéma nommé tutoqgis dans cette base. Un schéma correspond à un sous-dossier dans la base de données. Le schéma par défaut se nomme public mais c'est une bonne pratique de créer vos propres schémas.

Rien de compliqué : toujours dans l'explorateur, clic droit sur votre base → Nouveau schéma...

clic droit sur la base, créer schéma

Nommez-le par exemple tutoqgis. Votre base doit donc contenir 3 schémas : tutoqgis, public et topology.

base maillage_clc avec ses 3 schémas

On peut aussi créer le schéma à partir du gestionnaire de bases de données.

Vous remarquerez que cette étape est plus longue et complexe avec PostgreSQL. Néanmoins, une fois ce logiciel configuré et avec un peu d'habitude, il ne vous faudra plus que quelque secondes pour créer une nouvelle base !

Import de données dans SpatiaLite ou PostGIS

Cette étape est presque équivalente pour les 2 logiciels, en passant par le gestionnaire de base de données de QGIS.

Avant d'importer les données, nous allons sélectionner dans la couche Corine Land Cover les entités correspondant au vignoble, pour n'importer que celles-ci. Cette étape pourrait tout à fait être effectuée une fois les données importées dans la base, mais comme cela le temps d'import dans SpatiaLite ou PostGIS sera plus court.

Cette sélection n'est pas nécessaire si vous utilisez la couche CLC00_221_FR_RGF disponible en téléchargement.

Utilisez une requête attributaire sur la couche CLC00_FR_RGF pour ne sélectionner que les vignes : "CODE_00" = '221' (en jaune ci-dessous).

Couche CLC, vignes sélectionnées en jaune

Il ne reste plus qu'à importer les entités sélectionnes, dans SpatiaLite ou PostGIS selon votre choix.

icône du gestionnaire de bases de donnéesDans QGIS, ouvrez la fenêtre du gestionnaire de bases de données : menu Base de données → DB Manager... ou bien clic sur l'icône correspondante.

Sélectionnez votre base, SpatiaLite... :