Spatialiteクイックスタート¶
SpatiaLite は空間を扱う関数を追加した SQLite データベースエンジンです。
SQLite は動作が軽く、シンプルで堅牢、簡単に使える人気のあるデータベース管理システム (DBMS) です。それぞれのデータベースは一つのファイルに格納されます。コピー、圧縮や、Windows、Linux、MacOS などのOS間の移行も簡単にできます。
このクイックスタートでは、GUIアプリケーションとコマンドラインの両方からspatialiteデータベースを開く方法について説明します。いくつかのサンプルSQLクエリも示します。
目次
Spatialiteを起動してデータベースを読み込む¶
Spatialite-guiは、spatialiteデータベースを表示および維持するためのビジュアルインタフェースを提供します。ポイント・アンド・クリック機能を使用すると、テーブルとデータコンテンツの構造を簡単に確認できます。その多くは一般的なSQLクエリーを構築したり、独自のSQLクエリーを作成したりします。
を選択して、Spatialite GUIを開きます。
を選択します。
/home/user/data/spatialite
ディレクトリにブラウズし、trento.sqlite
を選択します。MunicipalHallsViewテーブルを右クリックして、 "Show Columns" を選択します。
表示が3つの領域に分割されていることがわかります。
左側のパネルには、テーブルのリストやテーブル内のカラムなど、データベースの階層が表示されます。左側のパネルの要素を右クリックして、一般的なデータベースアクションのリストから選択します。
右上のパネルには、選択したアクションのSQLが表示されます。このパネルには、独自にカスタマイズしたSQLを入力できます。
右下のパネルには、SQLクエリの結果が表示されます。
MunicipalHallsテーブルを右クリックして、"Edit table rows"を選択します。右上のペインに作成されたSQLクエリが表示され、結果が右下に表示されます。:
SELECT ROWID, "PK_UID", "AREA", "PERIMETER", "COMU", "Geometry" FROM "MunicipalHalls" ORDER BY ROWID
SQLクエリを実行する¶
次に、この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";
右側の"Execute SQL"ボタンをクリックすると、右下のペインに結果が表示されます。
コマンドラインからspatialiteを実行する¶
スクリプトを使用したりクエリを自動化したりする必要があるユーザは、コマンドラインインタフェースからspatialiteデータベースを操作する利点を学習します。この例では、シェープファイルをロードし、highway 42の近くにある学校を検索します。
コマンドラインから作業する前に、ターミナルウィンドウ:
を開いてください。ターミナルで、次のように入力して spatialite でサンプルデータベースを開きます:
spatialite /home/user/data/spatialite/trento.sqlite
コマンドラインからの便利なコマンド:
.help .tables .quit
新しいspatialiteデータベースを作成し、シェープファイルを読み込む¶
新しい空の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コードです。
次に、ハイウェイ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
最後に、次のコマンドを使用して、クエリを "カンマ区切り" のテキストファイル "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 を必ず参照してください。