waigani's diary

QGISを中心にFOSS4Gをいじくる

rasterliteのおススメ

今年後半の個人的おススメはrasterliteでした。
簡単な使用方法、注意点をまとめておきます。
色々オプションはありますので、マニュアルはご一読をお勧めします。
 rasterlite-man.pdf

rasterliteとは

SQLiteは1ファイルデータベース。
SQLiteを空間情報を扱えるように拡張したのがspatialite。
spatialiteに位置情報付きの画像データを取り込めるようにするのがrasterliteになります。

rasterliteは内部でタイルに分割して画像データを持ちます。
またピラミッドを作成する機能を持っているので、大容量画像データの閲覧速度を改善することが出来ます。

spatialiteインストール

まずはspatialiteが必要です。
コンパイル済みの実行ファイルを持ってきてしまいましょう。
http://www.gaia-gis.it/spatialite/binaries.html
のspatialite-toolsからダウンロードして解凍します。
解凍後のbinディレクトリに下記ファイルが入っています。

rasterliteインストール

こちらもコンパイル済みの実行ファイルを持ってきてしまいましょう。
http://www.gaia-gis.it/spatialite/binaries.html
のlibrasterliteからダウンロードして解凍します。
解凍後のbinディレクトリに下記ファイルが入っているのを確認しましょう。

データベースの初期化

画像をloadする前に、空のspatialiteデータベースを作成しておきます。
spatialiteの初期化に必要なSQL
http://www.gaia-gis.it/spatialite/resources.html
の"init_spatialite-x.x.sql"になります。ダウンロードしておきます。

空のデータベース作成

コマンドプロンプトからspatialiteを実行します。
最初の引数が作成するデータベースの名前になります。

 > spatialite test.sqlite

下記のような表示になれば起動しています。

ここでテーブル一覧を表示するコマンドを実行してみると、テーブルが1つもありません。空っぽです。

 spatialite> .tables
初期化

このままではただの空ファイルでしかないので、spatialiteが使用するメタデータテーブルを作成します。ダウンロードしておいた初期化用のSQLを実行します。

 spatilite> .read init_spatialite-2.3.sql SJIS

最初の引数はSQLファイルの指定、2番目の引数はcharsetになります。
この状態でテーブル一覧を表示すると、3つのメタデータテーブルが作成されていることが確認できます。

データベースの初期化はこれで終了ですので、spatialiteを一旦終了します。

rasterlite_load

GeoTIFFファイルをご用意ください。
rasterlite_loadコマンドを使用して、作成済みのデータベースにGeoTIFF画像を読み込みます。

 > rasterlite_load -d test.sqlite -T test -e 4326 -f test.tif

オプションはこんな感じです。

読み込む画像は複数でも大丈夫です。その場合は繰り返しrasterlite_loadコマンドを実行して、1枚ずつデータベースへ読み込んでください。読み込む画像は解像度の同じものとしてください。

rasterlite_pyramid

loadしただけだと、1枚の画像がタイルに分割されて入っている状態です。次にrasterlite_pyramidコマンドを使用して、解像度を落としたタイル画像の階層を作成します。
内部処理としては

  • 読み込み済み画像からもっとも高い解像度を選択
  • もっとも高い解像度のタイル群を選択
  • 元画像が同じタイルで括って、解像度を半分に落としながら繰り返しタイル画像を作成していく

を行っています。

 > rasterlite_pyramid -d test.sqlite -T test

rasterlite_topmost

1枚の画像を読み込んだ場合は、rasterlite_pyramidの処理までで終了です。
複数毎の画像を読み込んだ場合は、rasterlite_pyramidでは元画像が同じ括りでのタイル作成で終わっているので、その上の階層をrasterlite_topmostコマンドで作成してあげます。

 > rasterlite_topmost -d test.sqlite -T test

QGISで開く

QGIS(というかGDAL)がrasterliteに対応していますので、QGISで開いてみましょう。
「レイヤ」→「ラスタレイヤの追加」から作成したデータベースを選択してください。


表示されない場合の注意点。
OSGeo4W、単独のインストーラどちらでインストールした場合でも、同封されているsqliteのライブラリが古い場合があります。表示されない場合は、SQLiteのDownloadPageから"sqlite-dll-win32-x86-xxxxxxx.zip"をダウンロードしてsqlite3.dllを入れ替えてみてください。
http://www.sqlite.org/download.html
OSGeo4Wでインストールした場合は、C:\OSGeo4W\binにあるsqlite3.dllを新しいもので上書きします。
QGIS以外の影響があるかは全て調べたわけではありませんので、問題起こるようでしたら教えて欲しいです。

注意点

  • 読み込み先テーブルは1つにしましょう
  • loadする画像が大量な場合、rasterlite_topmost実行時にコアダンプする場合があります。この対応方法はまた後日。

追記-2012.1.13

情報が古くなっていますので、こちらに補足書いてあります。ご参照ください。