../../_images/logo_spatialite.png

Spatialiteクイックスタート

SpatiaLite は空間を扱う関数を追加した SQLite データベースエンジンです。

SQLite は動作が軽く、シンプルで堅牢、簡単に使える人気のあるデータベース管理システム (DBMS) です。それぞれのデータベースは一つのファイルに格納されます。コピー、圧縮や、Windows、Linux、MacOS などのOS間の移行も簡単にできます。

このクイックスタートでは、GUIアプリケーションとコマンドラインの両方からspatialiteデータベースを開く方法について説明します。いくつかのサンプルSQLクエリも示します。

Spatialiteを起動してデータベースを読み込む

Spatialite-guiは、spatialiteデータベースを表示および維持するためのビジュアルインタフェースを提供します。ポイント・アンド・クリック機能を使用すると、テーブルとデータコンテンツの構造を簡単に確認できます。その多くは一般的なSQLクエリーを構築したり、独自のSQLクエリーを作成したりします。

  1. Geospatial ‣ Databases ‣ Spatialite GUI を選択して、Spatialite GUIを開きます。

  2. File->Connecting an existing SQLite DB を選択します。

  3. /home/user/data/spatialite ディレクトリにブラウズし、 trento.sqlite を選択します。

    ../../_images/spatialite-gui-trento.png
  4. MunicipalHallsViewテーブルを右クリックして、 "Show Columns" を選択します。

    ../../_images/spatialite-gui-columns.png
  5. 表示が3つの領域に分割されていることがわかります。

    • 左側のパネルには、テーブルのリストやテーブル内のカラムなど、データベースの階層が表示されます。左側のパネルの要素を右クリックして、一般的なデータベースアクションのリストから選択します。

    • 右上のパネルには、選択したアクションのSQLが表示されます。このパネルには、独自にカスタマイズしたSQLを入力できます。

    • 右下のパネルには、SQLクエリの結果が表示されます。

  6. MunicipalHallsテーブルを右クリックして、"Edit table rows"を選択します。右上のペインに作成されたSQLクエリが表示され、結果が右下に表示されます。:

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

SQLクエリを実行する

  1. 次に、このSQL文を調整して、NOME_PROVフィールドだけのNOMEと(Lat,Long)を取得してみましょう。NOME_PROVフィールドには"BRESCIA"が含まれます。今度はMunicipalHallsViewを使用します。右上のSQLペインで、次のように入力します:

    SELECT NOME, X(Geometry) AS Longitude, Y(Geometry) AS Latitude
        FROM "MunicipalHallsView"
        WHERE NOME_PROV LIKE "BRESCIA";
    
  2. 右側の"Execute SQL"ボタンをクリックすると、右下のペインに結果が表示されます。

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

コマンドラインからspatialiteを実行する

スクリプトを使用したりクエリを自動化したりする必要があるユーザは、コマンドラインインタフェースからspatialiteデータベースを操作する利点を学習します。この例では、シェープファイルをロードし、highway 42の近くにある学校を検索します。

  1. コマンドラインから作業する前に、ターミナルウィンドウ: System Tools -> LXTerminal を開いてください。

  2. ターミナルで、次のように入力して spatialite でサンプルデータベースを開きます:

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

    コマンドラインからの便利なコマンド:

    .help
    .tables
    .quit
    

新しいspatialiteデータベースを作成し、シェープファイルを読み込む

  1. 新しい空のspatialiteデータベースを作成し、north_carolinaデータセットから2つのシェープファイルをロードしてみましょう:

    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
    

    loadshpコマンドの形式に注意してください: 最初は.shp拡張子のないシェープファイル、次に新しいspatialiteテーブルの名前、次に文字コード、最後にシェープファイルのCRSのEPSGコードです。

  2. 次に、ハイウェイ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. 最後に、次のコマンドを使用して、クエリを "カンマ区切り" のテキストファイル "schools_rt42.txt" に出力します:

    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
    

試してみること

次に、試すべき追加の課題をいくつか示します。

  • spatialite-guiを使用してジオメトリを検査する

  • QGISでSpatialiteレイヤを開いて編集する

次のステップは何?

Spatialiteの詳細については、 Spatialite project page を参照してください。

チュートリアル Spatialite cookbook を必ず参照してください。