Spatialite を使ってみる
SpaliteLite は SQLite 3の BLOB 型の属性に空間データを格納し,各種の操作や,空間索引の生成などが簡単にできるようにしたものである.
主要な機能は次の通りである.
- SpatiaLite は SQLite を拡張し空間データを扱えるようにしたもの.
- AsText(), GeomFromText(), Area(), PointN() などの SQL 空間関数を実装
- OpenGis が定める関数 Overlaps(), Touches(), Union(), Buffer() など
- OpenGis が定める空間メタデータ (Spatial metadata)
- ESRI Shape ファイルのインポートとエクスポート * 手順は、このページで説明
- 座標の再投影 (PROJ.4 と EPSG geodetic parameters dataset)
- ロケール・キャラクタセット (locale charsets) ,GNU libiconv を使用
- SQLite 3の RTree 上に空間索引を実装
- VirtualShape 拡張.外部の ESRI Shape ファイル,CSV ファイル,TxtTab ファイル上で SQL 問い合わせを評価できる機能
Spatialite での主なデータ型は以下のとおりである.
- Point
- LineString
- Polygon
- MultiPoint
- MultiLineString
- MultiLinePolygon など
Spatialite の cookbook は https://www.gaia-gis.it/fossil/libspatialite/wiki?name=misc-docs
Spatialite の SQL 関数の詳しい説明は: https://www.gaia-gis.it/gaia-sins/spatialite-sql-latest.html
このページでは,次のことを説明する.
- SpatiaLite データベースファイルの生成とメタデータのロード
- ESRI Shape ファイルの読み込み
- ESRI Shape ファイルのへの書き出し
- OpenStreetMap データのファイルからの読み込み
Ubuntu での SpatiaLite のインストール手順については別のページで説明している.
SpatiaLite データベースファイルの生成とメタデータのロード
- 最初に,SpatiaLite データベースファイルの生成とメタデータのロードを行う。
- メタデータの確認
SELECT * FROM sqlite_master;
-
Spatialite バージョン 3.0.0 の場合の実行結果例
-
Spatialite バージョン 2.4.0 の場合の実行結果例
-
Spatialite バージョン 3.0.0 の場合の実行結果例
- 終了するときは「.exit」
ESRI Shape ファイルの読み込み
- ESRI Shape ファイルのファイル名を確認しておく
◆ Ubuntu での実行画面例(ここでは,QGIS が配布しているサンプルデータセットのファイル名を示している)
- ESRI Shape ファイルの読み込み操作
読み込みコマンドの書式は次の通り
spatialite_tool -i -shp <ファイルのベース名> -d <SQLite 3 データベース名> -t <テーブル名> -c CP1252 [-s 4326] [-g <読み込み先の属性名,省略可,デフォルト値は「geom」>] spatialite_tool -i -shp <ファイルのベース名> -d <SQLite 3 データベース名> -t <テーブル名> -c CP1252 [-s 4326] [-2] [-k]
「-s」は SRID を指定するためのもの.「4326」は「WGS 84」の意味である.
◆ 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 GUI を使って確認
- まず「Geom」を右クリックし、「Map Preview」を選ぶ
- 地図が表示されるので確認する
◆ Spatialite を使って確認
◆ SQLite を使って確認 (SQLite バージョン 3.7 系列をインストール済みであること)
◆ SQLiteman を使って確認
- まず「Geom」を右クリックし、「Map Preview」を選ぶ
-
Spatialite バージョン 2.4.0 の場合
◆ Spatialite を使って確認
◆ SQLite を使って確認 (SQLite バージョン 3.7 系列をインストール済みであること)
-
Spatialite バージョン 3.0.0 の場合
ESRI Shape ファイルのへの書き出し
書き出しコマンドの書式は次の通り
spatialite_tool -e -shp <ファイルのベース名> -d <SQLite 3 データベース名> -t <テーブル名> -g geom -c CP1252 [--type POINT]
-
Spatialite バージョン 2.4.0 の場合
◆ Ubuntu での実行画面例
OpenStreetMap データのファイルからの読み込み
- OpenStreetMap データファイルのファイル名を確認しておく
- ESRI Shape ファイルの読み込み操作
読み込みコマンドの書式は次の通り
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 での実行画面例
- 読み込まれたことの確認
-
Spatialite バージョン 3.0.0 の場合
◆ Spatialite GUI を使って確認
- まず「Geom」を右クリックし、「Map Preview」を選ぶ
- 地図が表示されるので確認する
- まず「Geom」を右クリックし、「Map Preview」を選ぶ
-
Spatialite バージョン 3.0.0 の場合
Spatialite の関数を使ってみる
- 前準備として、Spatialite バージョン 3.0.0(あるいはそれ以降) をインストールしておく
- 試しにデータベースを作りたい.
そこで、地図データ」のページで説明している. ファイル fukuoka-city.osm を使うことにする(ファイル fukuoka-city.osm を準備する)
次のコマンドで、データベースを作る
spatialite_osm_map -o <ファイル名> -d <SQLite 3 データベース名>
エラーメッセージが出ていないことを確認する.
- 行数
select count(*) from pg_building;
- Geometry のテキスト表示
select *, AsText(Geometry) from pg_building;
- Geometry の16進表示
select *,HEX(Geometry) from pg_building;
- GeometryType の表示
SELECT *, GeometryType(Geometry) FROM pg_building;
- Geometry の Boundary の 表示
SELECT *,AsText(Boundary(Geometry)) FROM pg_building;
- Geometry の Envelope の 表示
SELECT *,AsText(Envelope(Geometry)) FROM pg_building;
- Geometry の MBR 表示
SELECT *, MbrMinX(Geometry), MbrMinY(Geometry), MbrMaxX(Geometry), MbrMaxY(Geometry) FROM pg_building;
- 行数