../_images/logo_spatialite.png

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.

  1. Öppna Spatialite GUI genom att välja Geospatial ‣ Databases ‣ Spatialite GUI

  2. Välj File->Anslutning till en befintlig SQLite DB

  3. Bläddra till katalogen /home/user/data/spatialite och välj trento.sqlite.

    ../_images/spatialite-gui-trento.png
  4. Högerklicka på tabellen MunicipalHallsView och välj ”Show Columns”

    ../_images/spatialite-gui-columns.png
  5. 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.

  6. 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

  1. 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";
    
  2. Klicka på knappen ”Execute SQL” till höger och se resultatet i rutan längst ned till höger.

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

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.

  1. Innan vi arbetar från kommandoraden måste vi öppna ett terminalfönster: Systemverktyg -> LXTerminal.

  2. 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

  1. 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.

  2. 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
    
  3. 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