Focus sur le couple Quantum GIS / SQLite (Spatialite)

05 avril 2013 Par Mathieu

Pour l'exemple je vais créer une nouvelle base de données SQLite nommée "commune" et y intégrer une couche SIG ainsi que des données contenues dans un fichier CSV. Le but final étant de réaliser une jointure entre la couche SIG et la table contenant les données alphanumériques pour voir les différents comportements au sein du logiciel SIG opensource Quantum GIS.

SQLite

SQLite est donc un moteur de base de données relationnelle, accessible par le langage SQL. Une base est un fichier autonome, très léger et indépendant des plateformes (comme Access ou FileMakerPro, qui eux ne fonctionnent pas sur toutes les plateformes). Le programme/bibliothèque est écrit en ANSI-C. Il est de plus en plus utilisé par de nombreuses applications, que ce soit la plupart des navigateurs internet ou bien les applications "smartphone" qui ont besoin d'utiliser leurs propres bases de données. A noter que ce SGBD n'a pas à rougir face aux autres tels que MySQL ou PostgreSQL ! (Plus d'info)

Une base SQLite (= un fichier) peut contenir plusieurs tables et vues SQL, des index, des fonctions, des triggers etc.

Comment l'utiliser?

Nativement, SQLite s'utilise en ligne de commande mais il existe de nombreux utilitaires qui permettent d'administrer ces bases de données. J'en présente un qui est simple et complet, il s'agit de l'extension SQLite Manager du navigateur Firefox. Il existe aussi d'autres outils comme Sqlite Database Browser (openSource et multi OS) ou bien encore SQLite Expert Personal. Un autre avantage de SQLite est de pouvoir être utilisables via des connexions JDBC et ODBC ainsi que par les languages de programmation tels que C, C++, C#, Python, PHP, Ruby, Java,...

SQLite Manager

SQLite Manager permet d'afficher les données, administrer la structure des tables, réaliser des requêtes SQL, créer des vues,...


Spatialite

Spatialite est une extension de SQLite qui lui permet d'être enrichi d'une cartouche spatiale et de fonctions de requêtes spatiales. C'est le pendant de ce que peut être PostGis pour PostgreSQL.

Dans sa version programme, on télécharge une version compilée SQLite + SpatiaLite. Il est tout à fais possible de rajouter la librairie spatialite à une base SQLite existante. Pour gérer ces fonctions spatiales et visualiser la géométrie, j'utilise un utilitaire nommé spatialite-gui. Ce petit utilitaire permet de créer une nouvelle base de données, de charger un fichier shapefile, des données au format CSV ou encore d'exporter une table dans un format SIG (via la librairie OGR inclue). Il permet également de gérer les droits en lecture / écriture des différentes tables et de créer des triggers.

Création de la base de données "commune"

J'utilise l'utilitaire spatialite-gui afin de créer ma base de donnée (BDD) mais j'aurai très bien pu le faire avec SQLite Manager ou bien en ligne de commande. Il suffit de faire Files > Creating a New (empty) SQLite DB puis de choisir l'endroit ou je veux créer ma BDD ainsi que le nom que je veux lui donner.

Créer une BDD dans SQLite

Une fois créée, ma base de données apparait avec différentes tables qui sont nécessaires à l'utilisation de la cartouche spatiale Spatialite (table des projections, gestion de la géométrie,...)

Import d'un fichier shapefile

L'idée est d'importer une couche SIG au format shapefile. Dans cet exemple, il s'agit de la couche des communes issues de la BDTOPO de l'IGN. Mise à disposition gratuitement par l'IGN, cette couche test est disponible sur cette page.

Je clique sur l'outil d'import de Shapefiles Importer Shapefile puis pointe l'explorateur qui s'ouvre vers la couche à importer.

Créer une BDD dans SQLite

  • - Chemin de la couche qui va être importée.
  • - Nom de la table dans notre BDD.
  • - Nom de la colonne qui va stocker la géométrie (j'ai mis geometry dans mon cas).


  • - Choix de l'encodage (laisser tel quel) et du SRID, c'est-à-dire le système de projection. Dans notre cas, la couche est en Lambert-93 donc il faut renseigner le code EPSG correspondant (2154).



  • - Différentes options sur le stockage de la géométrie (compression, indexation,...).

  • Je valide et recois un message qui m'indique que le shapefile a été chargé ainsi que le nombre d'enregistrements de la couche.

La couche doit alors apparaitre dans l'interface de spatialite-gui. Je clique sur le "plus" afin de faire apparaître les différentes colonnes de la table COMMUNE.

Couche SIG dans BDD SQLite

Une fois l'import d'une couche SIG réalisé, elle apparait dans la BDD sous la forme d'une table contenant les informations attributaires ainsi qu'une colonne contenant la géométrie.

Import d'un fichier CSV

J'importe également un fichier CSV dans la BDD. Ce fichier contient différentes données statistiques sur les communes de la couche SIG.

Je clique sur l'outil d'import de fichiers CSV ou TXT Importer CSV puis pointe l'explorateur qui s'ouvre vers le fichier à importer.



  • - Si la 1ère ligne de ma fichier contient les noms des colonnes
  • - Caractère qui entoure les champs
  • - Caractère qui sépare les champs

  • - Caractère qui sépare les décimales
Créer une BDD dans SQLite
  • - Chemin vers le fichier à importer
  • - Nom de la table qui va être créée

  • - Choix de l'encodage

Je valide et recois un message qui m'indique que le fichier CSV a été chargé ainsi que le nombre d'enregistrements du fichier.

En regardant la BDD, j'ai une nouvelle table nommée jointure qui contient les données du fichier importé.

Réaliser une jointure et créer une vue

Maintenant, je vais créer une vue qui va être le résultat de la jointure entre les données de la couche SIG et les données du fichier importé. Pour cela, j'utilise le Query / View Composer de spatialite-gui. Faites un clic droit sur la BDD et choisissez Query / View Composer.

Cet utilitaire permet de créer des requêtes mais également des vues à partir d'une ou plusieurs tables de la BDD.

Etape 1 : choix des tables et des champs qui apparaitront dans la vue et spécification des champs de jointure entre la table COMMUNE et jointure.

Jointure et Vue dans spatailite-gui

Vous pouvez ensuite passer dans l'onglet "Filter" et "Order" si vous souhaitez mettre une condition de sélection et un ordre de tri. Ce qui m'intéresse c'est l'onglet "View" qui va me permettre de créer ma vue.

Etape 2 : création d'une vue spatiale.

Jointure et Vue dans spatailite-gui

Je spécifie que je souahite créer une vue spatiale, lui donne un nom et spécifie la colonne contenant la géométrie.

J'aurais tout aussi bien put créer ma requête SQL à la main et l'exécuter en ligne de commande par exemple

>CREATE VIEW "Commune_jointure" AS SELECT "a"."ROWID" AS "ROWID", "a"."ID" AS "ID", "a"."PREC_PLANI" AS "PREC_PLANI", "a"."NOM" AS "NOM", "a"."CODE_INSEE" AS "CODE_INSEE", "a"."STATUT" AS "STATUT", "a"."CANTON" AS "CANTON", "a"."ARRONDISST" AS "ARRONDISST", "a"."DEPART" AS "DEPART", "a"."REGION" AS "REGION", "a"."POPUL" AS "POPUL", "a"."MULTICAN" AS "MULTICAN", "a"."surface" AS "surface", "a"."densite" AS "densite", "a"."geometry" AS "geometry", "b"."CODE_INSEE" AS "CODE_INSEE_1", "b"."POURCEN_HO" AS "POURCEN_HO", "b"."POURCEN_FE" AS "POURCEN_FE" FROM "COMMUNE" AS "a" JOIN "jointure" AS "b" USING ("CODE_INSEE")

La vue apparait dans ma BDD sous la forme d'une nouvelle "table". vue

L'avantage d'utiliser une Vue est dans la liaison dynamique entre les différents élements qui construisent cette vue. Si l'un de ces éléments est amené à être modifié, alors la vue sera directement impactée par ces changements.

Spatialite et Quantum GIS

Quantums GIS dispose depuis très longtemps de la capacité à lire / écrire dans une base de données SQLite. Depuis les dernières versions, le logiciel offre la possibilité de gérer les bases Spatialite et d'utiliser les fonctions de la cartouche spatiale.

Ouverture et visualisation des données

Quantums GIS permet de se connecter très facilement à une base Spatialite. Dans le menu Couche > Ajouter une couche Spatialite, je connecte la BDD en cliquant sur Nouveau puis sur Connecter.

La liste des tables spatiales de la BDD apparaissent (vous pouvez également faire apparaitre les autres tables en cochant la case Lister les tables sans géométries). Vous disposez également de différentes options de recherche sous la forme d'une éditeur SQL très simplifié.

Connexion

J'ouvre la table des communes. Une fois ajoutée dans QGIS, la couche se traite de la même manière qu'une couche d'un autre format comme shapefile ou mapinfo Tab. Je peux consulter les données attributaires, mettre la couche en édition, réaliser des opérations d'analyse spatiale, etc..

Les avantages de Spatialite

Tout le bénéfice de l'utilisation de Spatialite est la puissance des requêtes spatiales. En utilisant l'extension QSpatialite, je vais disposer dans QGIS d'un utilitaire très intéressant. C'est ce que nous allons voir.

QSpatialite

Une fois l'extension installée, je l'ouvre en utilisant ce bouton QSpatialite. L'interface est les fonctionnalités sont très proches de spatialite-gui.

QSpatialite

Je dispose d'un éditeur SQL avancé, la possibilité d'exporter des couches,...

Dans cet exemple, je recherche les communes voisines de Grenoble et qui ont un pourcentage de femme supérieur à 50%. Je vais simplement faire ma requête dans QSpatialite et lui demander de charger le résultat de la requête directement dans QGIS.

QSpatialite

Une simple requête suffit, créez et chargez votre couche directement dans QGIS

QSpatialite

Je dispose de ma nouvelle couche ! Comment faire plus simple ?!

Cet article permet d'avoir un rapide aperçu du fonctionnement et de l'utilisation de SQLite dans un exemple simple.
A vous de jouer !

Sources : Wikipedia, Portail SIG, Site officiel