Spatialiteというものがあります。
簡単に言うと、Sqliteです。
OSMのデータを扱うとき、大規模な場合は普通PostGISを使うのですが、Sqliteにはこんな利点があります。
- データが1つのファイルにまとまる
- 1つのファイルにまとまるので、TileMillやQGISで扱いやすく、データを同梱して配布しやすい
で、「せっかくだからやってみっか」と思ってビルドしてみて失敗したので、メモを残しておきます。
(追記: homebrewしたら成功しました。記事の後半を参照)
Spatialiteの配布
ここで行われています。
基本的には、これを configure -> make -> make installすればよいようです。
ですが、configureすると、いきなりコケます。
configure: error: 'libreadosm' is required but it doesn't seem to be installed on this system.
どうやらlibreadosmが必要のようです。
ググってみると、以下のページを見つけました。
これを configure -> make -> make install します。
これをインストールした後にもう一度 splatialite本体をビルドしようとすると、libspatialiteが無いと言われます。
ぐぐってみると、どうやらここがsource置き場のようです。
最新版(今回はlibspatialite-4.1.1.tar.gz)をダウンロードして configure -> make -> make install します。
これでまた spatialite本体をビルドしようとすると、make時に以下のエラーが出ます。
ここで詰まってしまいました。
$ make
make all-am
gcc -DHAVE_CONFIG_H -I. -g -O2 -I. -g -O2 -MT shell.o -MD -MP -MF .deps/shell.Tpo -c -o shell.o shell.c
mv -f .deps/shell.Tpo .deps/shell.Po
/bin/sh ./libtool --tag=CC --mode=link gcc -g -O2 -o spatialite shell.o -L/usr/local/lib -lspatialite -lsqlite3 -lm -lz -L/usr/local/Cellar/freexl/1.0.0f/lib -lfreexl -lm -lreadline -lcurses -lproj -lexpat -L/usr/local/Cellar/geos/3.4.2/lib -lgeos_c
libtool: link: gcc -g -O2 -o spatialite shell.o -L/usr/local/lib /usr/local/lib/libspatialite.dylib -L/usr/local/Cellar/geos/3.4.2/lib -lpthread -ldl -liconv -lsqlite3 -lz -L/usr/local/Cellar/freexl/1.0.0f/lib -lfreexl -lreadline -lcurses /usr/local/Cellar/proj/4.8.0/lib/libproj.dylib -lm -lexpat -lgeos_c
Undefined symbols for architecture x86_64:
"_sqlite3_enable_load_extension", referenced from:
_open_db in shell.o
"_sqlite3_load_extension", referenced from:
_do_meta_command in shell.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make[1]: *** [spatialite] Error 1
make: *** [all] Error 2
突然のインタラプト!!
とか書いていたら、
brew install libspatialite
brew install spatialite-tools
brew install librasterlite
でええやろ、というお言葉をいただきました。
とりあえずインストールはこれでできました。
ありがてぇありがてぇ ヽ('ω')ノ三ヽ('ω')ノ
でも、pbfファイルをインポートしようとすると
$ spatialite_osm_raw -o ./japan-latest.osm.pbf -d japan-latest.sqlite
SQLite version: 3.8.2
SpatiaLite version: 4.1.1
Segmentation fault: 11
$
コケます(´・ω・`)
まだまだ道は遠そうです。
復旧
なんかどっかでライブラリおかしくなってるのかな?と思ったので、いちどアンインストール→インストールしたら動くようになりました。
✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌
brew uninstall libspatialite
brew uninstall spatialite-tools
brew uninstall librasterlite
まだ詳しく検証していませんが、spatialite-toolsだけのインストールでもよいかもしれません。
なお、spatialite-toolsのインストール -> libspatialiteのインストール、の順に行おうとすると、「インストール済みだけどlinkされてないよ」といわれます。
$ brew install libspatialite
Warning: libspatialite-4.1.1 already installed, it's just not linked
いくつかのファイルを削除してください、という指示がでてきますので、指示通りにそのファイルを消して、何度か brew install libspatialiteを試してみてください。
spatialiteのファイル作成
GeoFabrikのサイトからpbfファイルをダウンロードしてきて、spatialiteのDBを作成します。
$ wget http://download.geofabrik.de/asia/japan-latest.osm.pbf
$ spatialite_osm_raw -o ./japan-latest.osm.pbf -d japan-latest.sqlite
僕の環境だと、だいたい5時間30分ほどかかって22GBほどのファイルができました。
(spatialite_osm_mapだとカラムが削減されるので、もっと速いかもしれません)