../../_images/logo_spatialite.png

Guide de démarrage avec SpatiaLite

SpatiaLite est un moteur de base de données SQLite avec des fonctions spatiales ajoutées.

SQLite est un système de gestion de base de données (SGBD) qui est simple, robuste, facile à utiliser et très léger. Chaque base de données SQLite est simplement un fichier. Vous pouvez librement le copier, le compresser, et l’échanger entre Windows, Linux, MacOs etc.

Ce guide de démarrage rapide décrit comment ouvrir une base de données spatialite à partir d’applications et de la ligne de commande. Certains exemples de requêtes SQL sont affichés.

Démarrer spatialite et charger une base de données

Spatialite-gui fournit une interface visuelle pour la visualisation et la maintenance d’une base de données spatialite. Vous pouvez facilement voir la structure des tables et du contenu des données à l’aide de fonctions point et clic, dont beaucoup construisent des requêtes SQL communes, ou créez vos propres requêtes SQL.

  1. Open the Spatialite GUI by selecting Geospatial ‣ Databases ‣ Spatialite GUI

  2. Sélectionnez File->Connecting an existing SQLite DB

  3. Parcourez le répertoire /home/user/data/spatialite et choisissez trento.sqlite.

    ../../_images/spatialite-gui-trento.png
  4. Cliquez à droite sur la table MunicipalHallsView et sélectionnez « Show Columns »

    ../../_images/spatialite-gui-columns.png
  5. Vous remarquerez l’affichage divisé en 3 zones :

    • Le panneau gauche affiche la hiérarchie de base de données, comme une liste de tables et de colonnes dans la table. Cliquez à droite sur les éléments du panneau gauche pour sélectionner à partir d’une liste d’actions de base de données courantes.

    • Le panneau en haut à droite affiche SQL pour l’action sélectionnée. Vous pouvez entrer votre propre SQL personnalisé dans ce panneau.

    • Le panneau en bas à droite affiche les résultats de la requête SQL.

  6. Cliquez à droite sur la table MunicipalHalls et sélectionnez »Edit table rows ». Remarquez que la requête SQL a été créée pour vous dans le volet supérieur droit, et les résultats sont en bas à droite.:

    SELECT ROWID, "PK_UID", "AREA", "PERIMETER", "COMU", "Geometry"
        FROM "MunicipalHalls"
        ORDER BY ROWID
    

Exécuter une requête SQL

  1. Maintenant, essayons de peaufiner cette instruction SQL pour obtenir NOME et (Lat,Long) pour seulement les entités dont le champ NOME_PROV contient « BRESCIA », cette fois en utilisant la table MunicipalHallsView. Dans le type de volet SQL supérieur droit

    SELECT NOME, X(Geometry) AS Longitude, Y(Geometry) AS Latitude
        FROM "MunicipalHallsView"
        WHERE NOME_PROV LIKE "BRESCIA";
    
  2. Cliquez sur le bouton « Execute SQL » à droite, et voir les résultats dans le volet inférieur droit.

    ../../_images/spatialite-gui-select.png

Exécuter la spatialite à partir de la ligne de commande

Les utilisateurs qui ont besoin de scripter ou d’automatiser des requêtes apprendront les avantages de travailler avec une base de données spatialite à partir de l’interface de la ligne de commande. Dans cet exemple, nous allons charger un shapefile, et la recherche d’écoles qui sont près de l’autoroute 42.

  1. Avant de travailler à partir de la ligne de commande, nous devons ouvrir une fenêtre terminale : System Tools -> LXTerminal.

  2. Dans le terminal ouvrir une base de données d’exemple avec spatialite en tapant:

    spatialite /home/user/data/spatialite/trento.sqlite
    

    Commandes utiles de la ligne de commande:

    .help
    .tables
    .quit
    

Créer une nouvelle base de données spatialite et charger un shapefile

  1. Créons une nouvelle base de données spatialite vide et chargeons deux shapefiles à partir du jeu de données north_carolina :

    user@osgeo-6:~$ spatialite test.sqlite
    SpatiaLite version ..: 5.0.0    Supported Extensions:
        - 'VirtualShape'        [direct Shapefile access]
        - 'VirtualDbf'          [direct DBF access]
        - 'VirtualText'         [direct CSV/TXT access]
        - 'VirtualGeoJSON'              [direct GeoJSON access]
        - 'VirtualXL'           [direct XLS access]
        - 'VirtualNetwork'      [Dijkstra shortest path - obsolete]
        - 'RTree'               [Spatial Index - R*Tree]
        - 'MbrCache'            [Spatial Index - MBR cache]
        - 'VirtualFDO'          [FDO-OGR interoperability]
        - 'VirtualBBox'         [BoundingBox tables]
        - 'VirtualSpatialIndex' [R*Tree metahandler]
        - 'VirtualElementary'   [ElemGeoms metahandler]
        - 'VirtualRouting'      [Dijkstra shortest path - advanced]
        - 'VirtualKNN'  [K-Nearest Neighbors metahandler]
        - 'VirtualGPKG' [OGC GeoPackage interoperability]
        - 'SpatiaLite'          [Spatial SQL - OGC]
        - 'VirtualXPath'        [XML Path Language - XPath]
    PROJ version ........: Rel. 6.3.1, February 10th, 2020
    GEOS version ........: 3.9.0-CAPI-1.16.2
    RTTOPO version ......: 1.1.0
    TARGET CPU ..........: x86_64-linux-gnu
    the SPATIAL_REF_SYS table already contains some row(s)
    SQLite version ......: 3.31.1
    Enter ".help" for instructions
    SQLite version 3.31.1 2020-01-27 19:55:54
    Enter ".help" for instructions
    Enter SQL statements terminated with a ";"
    spatialite>
    spatialite> .loadshp data/north_carolina/shape/schools_wake schools utf-8 3358
    spatialite> .loadshp data/north_carolina/shape/roadsmajor roads utf-8 3358
    

    Notez le format de la commande .loadshp : d’abord le shapefile sans l’extension .shp, puis le nom de la nouvelle table spatialite, ensuite l’encodage des caractères, et enfin le code EPSG du CRS du shapefile.

  2. Maintenant, nous allons interroger pour les écoles près de l’autoroute 42.:

    spatialite> SELECT s.NAMESHORT, s.ADDRNUMBER, s.ADDRROOT
         ...> FROM schools AS s, roads AS r
         ...> WHERE r.ROAD_NAME = "NC-42" AND
         ...> ST_Distance(s.Geometry, r.Geometry) < 1000;
    FUQUAY-VARINA|6600|Johnson Pond Rd
    WILLOW SPRINGS|6800|Dwight Rowland Rd
    FUQUAY-VARINA|109|N Ennis St
    LINCOLN HEIGHTS|307|Bridge St
    
  3. Enfin, nous extrayons le résultat de la requête vers un fichier texte »comma separated values (CSV) » « schools_rt42.txt » avec les commandes suivantes:

    spatialite> .mode csv
    spatialite> .output "schools_rt42.txt"
    spatialite> SELECT s.NAMESHORT, s.ADDRNUMBER, s.ADDRROOT
        ...> FROM schools AS s, roads AS r
        ...> WHERE r.ROAD_NAME = "NC-42" AND
        ...> ST_Distance(s.Geometry, r.Geometry) < 1000;
    spatialite>.q
    

Choses à essayer

Voici quelques défis supplémentaires que vous pouvez relever :

  • Inspecter les géométries avec spatialite-gui

  • Ouvrez et modifiez les couches SpatiaLite dans QGIS

Ensuite ?

Pour en savoir plus sur SpatiaLite, un point de départ est la page du projet SpatiaLite.

N’oubliez pas de visiter le tutoriel Spatialite cookbook