LoginSignup
3
9

More than 5 years have passed since last update.

WindowsでSpatiaLiteを動かしてみる

Last updated at Posted at 2017-11-18

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)

入れたとおりの値が取り出せました。

3
9
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
9