SpatiaLiteとはSQLite上でGISを扱えるようにする拡張モジュールです。
PostgreSQLに対するPostGISのような位置づけです。
SpatiaLite本家のサイトはこちら:http://www.gaia-gis.it/gaia-sins/
サイトの下部に "MS Windows binaries" とあるので、そこから64bit版をダウンロードして動作確認をしてみます。
ファイル名はmod_spatialite-4.3.0a-win-amd64.7z。
解凍するとSQLiteのコンソールアプリケーションsqlite3.exeと、SpatiaLiteモジュールであるmod_spatialite.dllが同じディレクトリにありますので、以下のように実行してみます。
起動と初期化
まずsqlite.exeを起動します。引数なしで起動すると、インメモリの一時データベースを自動生成します。
D:\spatialite\mod_spatialite-4.3.0a-win-amd64>sqlite3.exe
SQLite version 3.8.11.1 2015-07-29 20:00:57
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
まず、load_extension
関数を使ってSpatiaLiteモジュールを読み込みます。
SELECT load_extension('mod_spatialite');
次に、InitSpatialMetaData
関数を実行してSpatiaLiteが利用するメタデータテーブルを作成します。これを実行しておかないと地理情報系の関数が正しく動作しません。
SELECT InitSpatialMetaData(1);
ジオメトリ型のカラムを持つテーブルの作成
3次元の座標を持つ点を格納できるテーブルを作ってみましょう。SpatiaLiteでは、以下の流れとなります。
- まず、ジオメトリ型以外のカラムを持つテーブルを作る
- そのテーブルにジオメトリ型のカラムを追加する
SQLで書くと以下のようになります。
CREATE TABLE t(id INTEGER, name TEXT);
SELECT AddGeometryColumn(
't', -- テーブル名
'point', -- カラム名
0, -- SRID
'POINTZ', -- ジオメトリ型
'XYZ', -- ジオメトリの次元
1 -- 1ならNOT NULL制約あり
);
PostGISのように、ジオメトリ型のカラムを持つテーブルをCREATE TABLE
一発で作ることはできないので注意してください。
データの挿入と取り出し
これで、t
テーブルのpoint
カラムに三次元点を格納できます。(1, 2, 3)を格納してみましょう。ST_GeomFromText()
という関数を使います。点は 'POINTZ(1.0 2.0 3.0)'
で表します。
INSERT INTO t VALUES(1, 'some', ST_GeomFromText('POINTZ(1.0 2.0 3.0)'));
このとき、点(1,2,3)は内部表現でDBに格納されます。人間が読める形で取り出すときには、格納したカラムを引数としてST_AsText()
関数を使います。
SELECT id, name, ST_AsText(point) AS pt FROM t;
-- 1|some|POINT Z(1 2 3)
入れたとおりの値が取り出せました。