3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SpatialiteをMacでビルドしようとして失敗した話

3
Last updated at Posted at 2014-01-20

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だとカラムが削減されるので、もっと速いかもしれません)

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?