SpatiaLite を使ってみる

【概要】SpatiaLite は SQLite 3 に空間データ機能を追加する拡張ライブラリである。空間データの格納、操作、空間索引の生成が可能になる。本記事では、SpatiaLite データベースの生成、ESRI Shape ファイルの読み書き、OpenStreetMap データの読み込み、および SQL 空間関数の使用方法について説明する。

【目次】

  1. SpatiaLite の概要
  2. SpatiaLite データベースファイルの生成とメタデータのロード
  3. ESRI Shape ファイルの読み込み
  4. ESRI Shape ファイルへの書き出し
  5. OpenStreetMap データのファイルからの読み込み
  6. SpatiaLite の関数を使ってみる

SpatiaLite の概要

SpatiaLiteSQLite 3 に空間データ機能を追加する拡張ライブラリである。空間データは SQLite 3 の BLOB 型(Binary Large Object、バイナリデータを格納するデータ型)属性に格納される。

SpatiaLite を使用するメリット

主要な機能

主なデータ型

SpatiaLite で扱う主なデータ型を以下に示す。

参考資料

SpatiaLite データベースファイルの生成とメタデータのロード

SpatiaLite を使用するには、最初にデータベースファイルの生成とメタデータのロードを行う。メタデータには、空間参照系の定義やジオメトリカラムの情報が含まれており、空間クエリを正しく実行するために必要である。

SpatiaLite バージョン 3.0.0 以降の場合

バージョン 3.0.0 以降では、spatialite コマンドを実行するだけでメタデータが自動的にロードされる。

実行手順例:

spatialite mydb

Ubuntu での実行結果例:

SpatiaLite バージョン 3.0.0 でのデータベース生成の実行結果

SpatiaLite バージョン 2.4.0 の場合

バージョン 2.4.0 では、データベース生成後に InitSpatialMetaData() 関数を実行してメタデータを初期化する必要がある。

実行手順例:

spatialite mydb
SELECT InitSpatialMetaData();

Ubuntu での実行結果例:

SpatiaLite バージョン 2.4.0 でのデータベース生成の実行結果

メタデータの確認

メタデータが正しくロードされたかを確認するには、以下の SQL 文を実行する。

SELECT * FROM sqlite_master;

SpatiaLite バージョン 3.0.0 の場合の実行結果例:

SpatiaLite バージョン 3.0.0 でのメタデータ確認結果

SpatiaLite バージョン 2.4.0 の場合の実行結果例:

SpatiaLite バージョン 2.4.0 でのメタデータ確認結果

SpatiaLite の終了

SpatiaLite を終了するには、.exit と入力する。

ESRI Shape ファイルの読み込み

ESRI Shape ファイルは GIS 分野で広く使用されているベクターデータ形式である。Shape ファイルを SpatiaLite に読み込むことで、SQL を使用した空間データの検索、分析、他データとの結合が可能になる。

事前準備

読み込む Shape ファイルのパスとベース名を確認しておく。以下の例では、QGIS が配布しているサンプルデータセットを使用している。

ESRI Shape ファイルのファイル名一覧

読み込みコマンドの書式

spatialite_tool コマンドを使用して Shape ファイルを読み込む。

spatialite_tool -i -shp <ファイルのベース名> -d <SQLite 3 データベース名> -t <テーブル名> -c CP1252 [-s 4326] [-g <読み込み先の属性名>]

主なオプション:

注意事項

実行例

Ubuntu での実行手順例:

spatialite_tool -i -shp qgis_sample_data/shapefiles/regions -d /home/ubuntuuser/SQLite/mydb -t regions -c CP1252 -g Geom

SpatiaLite バージョン 3.0.0 の場合の実行画面例:

SpatiaLite バージョン 3.0.0 での Shape ファイル読み込み結果

SpatiaLite バージョン 2.4.0 の場合の実行画面例:

SpatiaLite バージョン 2.4.0 での Shape ファイル読み込み結果

読み込み結果の確認

読み込みが正常に完了したかを確認する方法を示す。

SpatiaLite バージョン 3.0.0 の場合

SpatiaLite GUI を使用した確認方法:

  1. 「Geom」を右クリックし、「Map Preview」を選択する。

    SpatiaLite GUI で Geom を右クリックして Map Preview を選択
  2. 地図が表示されることを確認する。

    SpatiaLite GUI での地図プレビュー表示

SpatiaLite コマンドラインを使用した確認:

SpatiaLite コマンドラインでの確認結果

SQLite を使用した確認(SQLite バージョン 3.7 系列がインストール済みであること):

SQLite コマンドラインでの確認結果

SQLiteman を使用した確認:

SQLiteman での確認結果

SpatiaLite バージョン 2.4.0 の場合

SpatiaLite を使用した確認:

SpatiaLite バージョン 2.4.0 での確認結果

SQLite を使用した確認(SQLite バージョン 3.7 系列がインストール済みであること):

SQLite での確認結果(バージョン 2.4.0)

SQLiteman を使用した確認:

SQLiteman での確認結果(バージョン 2.4.0)

ESRI Shape ファイルへの書き出し

SpatiaLite データベースから ESRI Shape ファイルへ書き出すことで、QGIS、ArcGIS などの GIS ソフトウェアでデータを利用したり、Shape 形式を要求する外部システムとデータ交換したりできる。

書き出しコマンドの書式

spatialite_tool コマンドを使用して Shape ファイルを書き出す。

spatialite_tool -e -shp <ファイルのベース名> -d <SQLite 3 データベース名> -t <テーブル名> -g geom -c CP1252 [--type POINT]

主なオプション:

注意事項

実行例

SpatiaLite バージョン 2.4.0 の場合の Ubuntu での実行画面例:

SpatiaLite バージョン 2.4.0 での Shape ファイル書き出し結果

OpenStreetMap データのファイルからの読み込み

OpenStreetMap(OSM)は、誰でも自由に利用できるオープンな地図データである。OSM データを SpatiaLite に読み込むことで、道路、建物、施設などの地理情報を SQL で検索、分析できる。

事前準備

読み込む OpenStreetMap データファイル(.osm 形式)のパスを確認しておく。OSM データは OpenStreetMap 公式サイトなどからダウンロードできる。

読み込みコマンドの書式

spatialite_osm_map コマンドを使用して OpenStreetMap データを読み込む。書式はバージョンによって異なる。

SpatiaLite バージョン 3.0.0 以降の場合:

spatialite_osm_map -o <ファイル名> -d <SQLite 3 データベース名>

SpatiaLite バージョン 2.4.0 の場合:

spatialite_osm_map -o <ファイル名> -d <SQLite 3 データベース名> -T<テーブル名> -m

注意事項

実行例

Ubuntu での実行画面例:

OpenStreetMap データ読み込みの実行画面

読み込み結果の確認

SpatiaLite バージョン 3.0.0 の場合、SpatiaLite GUI を使用して確認できる。

  1. 「Geom」を右クリックし、「Map Preview」を選択する。

    SpatiaLite GUI で OpenStreetMap データの Map Preview を選択
  2. 地図が表示されることを確認する。

SpatiaLite の関数を使ってみる

SpatiaLite は空間データを操作するための SQL 関数を提供している。これらの関数を使用することで、座標の取得、図形の変換、空間演算などが可能になる。

前提条件

SpatiaLite バージョン 3.0.0 以降がインストールされていること。

サンプルデータベースの作成

以下では、地図データのページで説明しているファイル fukuoka-city.osm を使用してデータベースを作成する。事前にこのファイルを準備しておく。

次のコマンドでデータベースを作成する:

spatialite_osm_map -o <ファイル名> -d <SQLite 3 データベース名>
データベース作成コマンドの実行画面

エラーメッセージが表示されていないことを確認する。

エラーメッセージがないことの確認画面

行数の取得

count() 関数でテーブル内のレコード数を取得できる。データ量の把握や、フィルタ条件の検証に使用する。

SELECT count(*) FROM pg_building;
行数カウントの実行結果

Geometry のテキスト表示

AsText() 関数は Geometry を WKT(Well-Known Text)形式の文字列に変換する。WKT は空間データを人間が読める形式で表現したもので、デバッグや他システムとのデータ交換に使用する。

SELECT *, AsText(Geometry) FROM pg_building;
AsText 関数による Geometry のテキスト表示結果

Geometry の16進表示

HEX() 関数は Geometry のバイナリデータを16進数文字列に変換する。内部表現の確認やバイナリレベルでのデータ検証に使用する。

SELECT *, HEX(Geometry) FROM pg_building;
HEX 関数による Geometry の16進表示結果

GeometryType の表示

GeometryType() 関数は Geometry の型(POINT、POLYGON など)を返す。データの種類を確認したり、型に応じた処理を分岐させたりする場合に使用する。

SELECT *, GeometryType(Geometry) FROM pg_building;
GeometryType 関数の実行結果

Geometry の Boundary の表示

Boundary() 関数は Geometry の境界を返す。Polygon の場合は外周の LineString が返される。図形の輪郭のみを取得したい場合に使用する。

SELECT *, AsText(Boundary(Geometry)) FROM pg_building;
Boundary 関数による境界表示結果

Geometry の Envelope の表示

Envelope() 関数は Geometry を囲む最小の矩形(包絡線)を返す。図形の大まかな範囲を把握したり、空間インデックスの範囲検索に使用する。

SELECT *, AsText(Envelope(Geometry)) FROM pg_building;
Envelope 関数による包絡線表示結果

Geometry の MBR(最小外接矩形)の表示

MbrMinX()MbrMinY()MbrMaxX()MbrMaxY() 関数は、Geometry の最小外接矩形(MBR: Minimum Bounding Rectangle)の各座標値を個別に返す。範囲検索の条件指定や、座標値を使った計算に使用する。

SELECT *, MbrMinX(Geometry), MbrMinY(Geometry), MbrMaxX(Geometry), MbrMaxY(Geometry) FROM pg_building;
MBR 関数による最小外接矩形の表示結果