../../_images/logo_spatialite.png

SpatiaLite Quickstart

SpatiaLite ist eine SQLite-Datenbank-Engine mit zusätzlichen räumlichen Funktionen.

SQLite ist ein Datenbankmanagement System (DBMS), das einfach, robust, leicht zu handhaben und sehr leichtgewichtg ist. Jede SQLite Datenbank ist eine einfache Datei. Sie können diese kopieren, komprimieren und nach Windows, Linux, MacOs u.a. portieren.

Dieser Quickstart beschreibt, wie man eine Datenbank mit der graphischen Anwendung oder mit Hilfe der Kommandozeile öffnet und wie einfache SQL Abfragen ausgeführt werden können.

Starten von Spatialite und Laden einer Datenbank

Spatialite-gui stellt eine grafische Oberfläche zur Anzeige und Verwaltung von SpaltiaLite Datenbanken zur Verfügung. Sie können damit die Struktur der Tabellen und die Daten über Funktionen anzeigen lassen. Darüberhinaus können Sie auch eigene SQL Abfragen absetzen.

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

  2. Wählen Sie File->Connecting an existing SQLite DB

  3. Klicken Sie Browse und gehen Sie in das Verzeichnis /home/user/data/spatialite/ und wählen Sie trento.sqlite.

    ../../_images/spatialite-gui-trento.png
  4. Klicken Sie mit der rechten Maustaste auf die Tabelle MunicpalHallsView und wählen Sie „Show Columns“

    ../../_images/spatialite-gui-columns.png
  5. Sie sehen eine in 3 Bereiche aufgeteilte Ansicht:

    • Der linke Bereich zeigt die Databank Hierachie an, beispielsweise die Liste der Tabellen und Spalten innerhalb der Tabellen. Klicken Sie auf Elemente des linken Bereichs und wählen anschließend aus einer Liste von gängigen Datenbank Aktionen.

    • Der Bereich oben rechts zeigt das SQL für die ausgewählte Aktion. Sie können hier ihr eigenes SQL eingeben oder das SQL anpassen.

    • Der untere rechte Bereich zeigt das Ergebnis der SQL Abfrage.

  6. Klicken Sie mit der rechten Maustaste auf die Tabelle MunicipalHalls und wählen Sie „Edit table rows“. Beachten Sie, dass die SQL Abfrage für Sie im oberen rechten Bereich generiert wurde und dass die Ergebnisse im unteren rechten Bereich erscheinen.:

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

Ausführen einer SQL-Abfrage

  1. Passen Sie nun diese SQL-Abfrage an, so dass NOME und (Lat,Long) nur für die NOME_PROV mit dem Eintrag „BRESCIA“ unter Verwendung des MunicipalHallsViews ausgegeben werden. Geben Sie folgenden Befehl im oberen SQL-Fenster ein:

    SELECT NOME, X(Geometry) AS Longitude, Y(Geometry) AS Latitude
        FROM "MunicipalHallsView"
        WHERE NOME_PROV LIKE "BRESCIA";
    
  2. Klicken anschließend zum Ausführen den Button „Execute SQL“ auf der rechten Seite

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

Ausführen von spatialite über die Befehlszeile

Anwender die skriptbasiert arbeiten müssen oder automatisierte Abfragen absetzen wollen, werden die Vorteile SpaltiaLite Datenbanken kommandozeielnbasiert anzusprechen kennenlernen. In diesem Beispiel werden wir eine Shapedatei laden und nach Schulen in der Nähe des Highways 42 suchen.

  1. Bevor wir von der Befehlszeile aus arbeiten, müssen wir ein Terminalfenster öffnen: :menuselection:‘System Tools -> LXTerminal‘.

  2. Öffnen Sie die Beispiel-Datenbank im Terminal über spatialite:

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

    Hilfreiche Befehle im CLI Interface:

    .help
    .tables
    .quit
    

Erstellen einer neuen räumlichen Datenbank und Laden Sie eine Shapedatei

  1. Erzeugen Sie eine neue, leere spatialite Datenbank und laden Sie zwei Shapedateien von den Nord Carolina Daten:

    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
    

    Beachten Sie das Format des .loadshp Aufrufs: zuerst die Shapedatei ohne die .shp Erweiterung, dann der Name der neuen spatialite Tabelle, dann das Encoding und abschließend der EPSG Code des CRS der Shapedatei.

  2. Nun können Sie die Schulen in der Nähe des Highways 42 ausgeben.:

    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. Abschließend wollen wir das Ergebnis der Abfrage kommasepariert in die Textdatei „schools_rt42.txt“ ausgeben:

    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
    

Was Sie noch ausprobieren können

Hier sind einige zusätzliche Herausforderungen für Sie zum Ausprobieren:

  • Überprüfen Sie Geometrien mit spatialite-gui

  • Öffnen und bearbeiten Sie SpatiaLite Layer in QGIS

Was kommt als Nächstes?

Wenn Sie mehr über SpatiaLite erfahren möchten, ist die SpatiaLite Projektseite Seite ein guter Ausgangspunkt.

Besuchen Sie unbedingt das Tutorial Spatialite cookbook