
SpatiaLite Snabbstart¶
SpatiaLite är en SQLite-databasmotor med spatiala funktioner.
SQLite är ett databashanteringssystem (DBMS) som är enkelt, robust, lättanvänt och mycket lättviktigt. Varje SQLite-databas är helt enkelt en fil. Du kan fritt kopiera den, komprimera den och porta den mellan Windows, Linux, MacOs etc.
I denna snabbstart beskrivs hur du öppnar en spatialite-databas från både GUI-program och kommandoraden. Några exempel på SQL-frågor visas.
Starta Spatialite och ladda en databas¶
Spatialite-gui tillhandahåller ett visuellt gränssnitt för visning och underhåll av en spatialite-databas. Du kan enkelt se tabellernas struktur och datainnehåll med hjälp av peka och klicka-funktioner, varav många konstruerar vanliga SQL-frågor eller skapar dina egna SQL-frågor.
Öppna Spatialite GUI genom att välja
Välj
Bläddra till katalogen
/home/user/data/spatialite
och väljtrento.sqlite
.Högerklicka på tabellen MunicipalHallsView och välj ”Show Columns”
Du kommer att märka att displayen är uppdelad i 3 områden:
Den vänstra panelen visar databasens hierarki, t.ex. en lista över tabeller och kolumner i tabellen. Högerklicka på element i den vänstra panelen för att välja från en lista med vanliga databasåtgärder.
Den övre högra panelen visar SQL för den åtgärd som valts. Du kan skriva in din egen anpassade SQL i den här panelen.
Den nedre högra panelen visar resultatet av SQL-frågan.
Högerklicka på tabellen MunicipalHalls och välj ”Edit table rows” (Redigera tabellrader). Lägg märke till SQL-frågan som har skapats åt dig i den övre högra rutan och resultatet i den nedre högra rutan:
SELECT ROWID, "PK_UID", "AREA", "PERIMETER", "COMU", "Geometry" FROM "MunicipalHalls" ORDER BY ROWID
Kör en SQL-fråga¶
Låt oss nu försöka justera denna SQL-sats för att få NOME och (Lat,Long) för endast NOME_PROV-fälten inklusive ”BRESCIA”, den här gången med hjälp av MunicipalHallsView. I den övre högra SQL-rutan skriver du:
SELECT NOME, X(Geometry) AS Longitude, Y(Geometry) AS Latitude FROM "MunicipalHallsView" WHERE NOME_PROV LIKE "BRESCIA";
Klicka på knappen ”Execute SQL” till höger och se resultatet i rutan längst ned till höger.
Kör spatialite från kommandoraden¶
Användare som behöver skript eller automatisera frågor kommer att lära sig fördelarna med att arbeta med en spatialite-databas från kommandoradsgränssnittet. I det här exemplet laddar vi en shapefil och söker efter skolor som ligger nära motorväg 42.
Innan vi arbetar från kommandoraden måste vi öppna ett terminalfönster:
.I terminalen öppnar du en exempeldatabas med spatialite genom att skriva:
spatialite /home/user/data/spatialite/trento.sqlite
Användbara kommandon från kommandoraden:
.help .tables .quit
Skapa en ny spatialite-databas och ladda en shapefil¶
Låt oss skapa en ny, tom spatialite-databas och ladda två shapefiler från datasetet 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
Observera formatet på kommandot .loadshp: först shapefilen utan .shp-tillägget, sedan namnet på den nya spatialite-tabellen, därefter teckenkodningen och slutligen EPSG-koden för shapefilens CRS.
Nu ska vi söka efter skolor nära motorväg 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
Slutligen matar vi ut frågan till en ”kommaseparerade värden”-textfil ”schools_rt42.txt” med följande kommandon:
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
Saker att prova¶
Här är några ytterligare utmaningar som du kan prova:
Inspektera geometrier med spatialite-gui
Öppna och redigera SpatiaLite-lager i QGIS
Hur vill du gå vidare?¶
För att lära dig mer om SpatiaLite är en utgångspunkt SpatiaLite-projektsidan.
Se till att besöka handledningen Spatialite cookbook