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.
Contenu
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.
Ouvrez l’interface graphique spatialite en sélectionnant
Sélectionnez
Parcourez le répertoire
/home/user/data/spatialite
et choisisseztrento.sqlite
.Cliquez à droite sur la table MunicipalHallsView et sélectionnez « Show Columns »
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.
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¶
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";
Cliquez sur le bouton « Execute SQL » à droite, et voir les résultats dans le volet inférieur droit.
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.
Avant de travailler à partir de la ligne de commande, nous devons ouvrir une fenêtre terminale :
.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¶
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.
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
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