SpatiaLite を使ってみる
【概要】SpatiaLite は、SQLite に空間データベース機能を追加する拡張ライブラリである。地理座標を含むデータの格納、検索、分析が可能になる。本記事では、Windows 環境での SpatiaLite のインストールから基本的な使用方法までを解説する。
【目次】
ESRI Shape サンプルファイルの入手
動作確認用のサンプルデータとして、ESRI Shape ファイル(地理情報システムで広く使用されるベクタデータ形式)を http://download.geofabrik.de/ からダウンロードする。
- http://download.geofabrik.de/ を開く。
- Antarctica の右横にある「.shp.zip」をクリックする。
- antarctica-latest-free.shp.zip のダウンロードが開始される。
- ダウンロードしたファイルを展開(解凍)する。
- 展開後、生成されたファイルを確認する。
SpatiaLite のインストール
SpatiaLite GUI(グラフィカルユーザインターフェース版)をインストールする。
- The Gaia-SINS federated projects の Web ページを開く。
- MS Windows binaries の current stable version をクリックする。
x86 (32 bit) と amd64 (64 bit) の2種類から選択できる。後の手順で必要になるため、どちらを選択したか記録しておく。
以下、amd64 (64-bit) を選択した場合の手順を説明する。
- ダウンロードページで「spatialite_gui ...」をクリックする。
- ファイルのダウンロードが開始される。
- ダウンロードしたファイルを解凍する。spatialite_gui.exe が生成されていることを確認する。
- spatialite_gui.exe を実行する。
- SpatiaLite GUI のメインウィンドウが表示される。
動作確認
SpatiaLite GUI が正常に動作するか、ESRI Shape ファイルを読み込んで確認する。
- SpatiaLite GUI を起動し、「Load Shapefile」をクリックする。
- ファイル選択ダイアログで、ダウンロードした ESRI Shape ファイルを選択する。
- 文字コード選択ダイアログで「UTF_8」を選択し、「OK」をクリックする。
- データの読み込みが開始される。
- 読み込みが完了すると、左側のツリービューにテーブル一覧が表示される。
- 「gis.osm_natural_a_free_1」などのテーブルを右クリックし、「Edit table rows」を選択する。
- テーブルの内容が表示されれば、動作確認は完了である。
事前準備
コマンドラインや Python から SpatiaLite を使用する場合、以下の準備が必要である。
- mod_spatialite の確認
SpatiaLite の拡張モジュールとして、Windows では mod_spatialite.dll、Linux では mod_spatialite.so を使用する。インストールしたフォルダ内にこれらのファイルが存在することを確認する。
- システム環境変数 Path の設定
mod_spatialite が格納されているフォルダを、システム環境変数 Path に追加する。詳細はシステム環境変数の設定方法を参照。
- SQLite 3 の入手
コマンドラインから SpatiaLite を使用する場合、SQLite 3 が必要である。詳細はSQLite 3 の入手方法を参照。
コード例
SpatiaLite をコマンドラインや Python から使用する例を示す。
ogr2ogr コマンド
ogr2ogr は GDAL/OGR ライブラリ(地理空間データの変換・処理ライブラリ)に含まれるコマンドラインツールであり、地理空間データの形式変換に使用する。
GeoJSON ファイルを ESRI Shape ファイルに変換する例:
ogr2ogr sample.shp sample.json
ジオメトリ(図形データ)を簡略化しながら変換する例:
ogr2ogr -f "ESRI Shapefile" dst.shp src.shp -dialect SQLITE -sql "select simplify(geometry, 0.001) from org"
SQLite3 コマンド
SQLite3 のコマンドラインから SpatiaLite 拡張を読み込み、空間メタデータ(座標系などの管理情報)を初期化する例:
SELECT load_extension('/usr/local/lib/mod_spatialite.so');
SELECT InitSpatialMetaData();
プログラム例(Windows)
Python から SpatiaLite を使用する例を示す。この例では、空間データベースに接続し、指定した座標を含む行政区域を検索している。MBRContains は最小境界矩形による包含判定、GeomFromText はテキストからジオメトリへの変換、AsGeoJson はジオメトリの GeoJSON 形式への変換を行う関数である。
import sqlite3
import os
# mod_spatialiteのあるフォルダをPATHに加える
os.environ["PATH"] = os.environ["PATH"] + ';C:\\tool\\spatialite\\mod_spatialite-4.2.0-win-x86'
cnn = sqlite3.connect('database/gyouseikuiki.sqlite')
# mod_spatialiteの読み込み
cnn.enable_load_extension(True)
cnn.execute("SELECT load_extension('./mod_spatialite-4.2.0-win-x86/mod_spatialite.dll');")
sql = """
SELECT N03_001, N03_002, N03_003, N03_004, N03_007, AsGeoJson(Geometry)
FROM "N03-14_140401"
WHERE MBRContains("N03-14_140401".Geometry,GeomFromText('POINT(139.692101 35.689634 )'))
"""
ret = cnn.execute(sql)
for r in ret:
print('----------------------------')
print(r[0].encode('utf_8') )
print(r[1].encode('utf_8') )
print(r[2].encode('utf_8') )
print(r[3].encode('utf_8') )
print(r[4].encode('utf_8') )
print(r[5].encode('utf_8') )
参考リンク
SpatiaLite の詳細な仕様や活用方法については、以下の公式ドキュメントを参照。
SpatiaLite 4.2.0 SQL functions reference list
SpatiaLite で使用可能な SQL 関数の一覧。
http://www.gaia-gis.it/gaia-sins/spatialite-sql-4.2.0.html
The SpatiaLite Cookbook
SpatiaLite の実践的な使用方法を解説したチュートリアル。
http://www.gaia-gis.it/gaia-sins/spatialite-cookbook/index.html