Ruby で SQLite のデータベースを作成してジオメトリを突っ込む

Ruby で SpatiaLite を作成します。

gem で sqlite3 を入れるのと、システムに SpatiaLite のパッケージを入れるのを忘れずに。

#!/usr/bin/env ruby

require 'sqlite3'
sqlitefile = "test.sqlite"

db = SQLite3::Database.new(sqlitefile)
db.enable_load_extension(1)
db.load_extension("libspatialite.so")
db.enable_load_extension(0)

sql = "CREATE TABLE notes (id integer PRIMARY KEY, created text, closed text, the_geom blob);"
db.execute(sql)

sql = "INSERT INTO notes (id, created, closed, the_geom) VALUES (1,'createdate','closedate',GeomFromText('POINT(139.8333 36)', 4326));"
db.execute(sql)

db.close()

普通に SQLite を使える状態にした後に拡張機能を読み込みます。

db.enable_load_extension(1)
db.load_extension("libspatialite.so")
db.enable_load_extension(0)

エクステンションの読み込みを許可
SpatiaLite のライブラリを読み込む
エクステンションの読み込みを不許可に戻す
…とすると OK なようです。

テーブルを作る際には blob 型でカラムを作成しておき、 INSERT や UPDATE する際に当該カラムの値を GeomFromText で作ってやれば OK っぽいです。
GeomFromText は spatialite-cookbook を見れば内容が書かれています。
今回はポイントデータを WGS84 で平面直角座標系9系の原点に置く内容です。

さて、これを踏み台にして作りたかったスクリプトを書きましょうかね。