2007年08月19日
PostGISで経緯度⇒iエリア変換するとPerlモジュールの50倍速変換できる
以前からiエリア情報をポリゴン化してGoogle Mapsとかに配信できるようなWebサービスとか作りたいと思っていつつ、時間もなく後回し後回しにしていたのですが、今回ちょっと機会に恵まれたのでざっとポリゴン化してみました。
んでもって、PostGISに505エリア分のポリゴンデータ叩き込めるようなSQLファイルも作成したので、公開します。
受け手となるテーブルデータは以下のような感じ(上記SQLの中に含まれています、赤字の部分はデータベース名なので各々の環境で置き換えてください)。
CREATE TABLE iarea (
id char(5) NOT NULL PRIMARY KEY,
name varchar(100)
);
SELECT AddGeometryColumn ('iareadb', 'iarea', 'iarea_tokyo', 4301, 'GEOMETRY', 2);
SELECT AddGeometryColumn ('iareadb', 'iarea', 'iarea_wgs84', 4326, 'GEOMETRY', 2);
CREATE INDEX idx_iarea_tokyo ON iarea USING GIST ( iarea_tokyo GIST_GEOMETRY_OPS );
CREATE INDEX idx_iarea_wgs84 ON iarea USING GIST ( iarea_wgs84 GIST_GEOMETRY_OPS );
カラムを見ていただければ判るとおり、日本測地系、世界測地系双方のポリゴンを用意しておきましたので、例えば東京測地系では
my $sth = $dbh->prepare("SELECT id,name FROM iarea WHERE ".
"iarea_tokyo && GeomFromText( ?, 4301 ) AND ".
"intersects(iarea_tokyo,GeomFromText( ?, 4301 ));");
$sth->execute(map { "POINT($long $lat)" } (0..1));
みたいな感じで経緯度を含むiエリアコードとエリア名が取れます(言うまでもなくPerlの例です)。
(世界測地系の場合は、青字のカラム名を「iarea_wgs84」、赤字のSRIDを「4326」に変更してください)
で、せっかく作ってみたので、これまで個人的に経緯度→iエリア変換に利用してきた拙作のPerlモジュールと、処理能力を比較してみました。
Perlモジュールの方は、DoCoMoのiエリアデータがメッシュの列挙で提供されるのを利用して、経緯度をそれが含まれるメッシュ名に変換し、エリアデータの列挙されたメッシュデータと正規表現マッチさせることでエリアを導出しているのですが、果たしてどの程度差が出るか?
北海道、東京、大阪、沖縄の4点の日本測地系経緯度データからiエリアコードへの変換を1000回試行して、比べてみました。
また、PostGISからの導出とPerlモジュールからの導出で差が生じていないかのテストもしてみました。
実際のテストコードはこちらです。
実行結果は、
[postgres@www iArea]$ perl dbisearch.pl
1..4
Benchmark: timing 1000 iterations of TEST1, TEST2...
TEST1: 70 wallclock secs (27.49 usr + 4.14 sys = 31.63 CPU) @ 31.62/s (n=1000)
TEST2: 10 wallclock secs ( 0.57 usr + 0.05 sys = 0.62 CPU) @ 1612.90/s (n=1000)
ok 1
ok 2
ok 3
ok 4
という感じで、Perlモジュールの方が秒間30回の試行(変換は1試行で4回変換しているので、秒間120回)しか処理できないのに対し、PostGISの方では秒間1600回の試行(変換では秒間6400回)処理できるようになりました。
およそ50倍強の高速化です。
という感じで、やはり空間データベース恐るべし、です。
とはいえ、PostGISはポリゴンが丸(擬似円)であろうと三角であろうとアメーバ状であろうと処理できるのがいいわけですが、ことiエリアに関しては、取り得る最小メッシュ値の数が有限なので、様々な大きさのメッシュが混在しているiエリア定義ファイルを全部取り得る最小メッシュ値に直してやった上で、普通の表形式テーブルで完全一致検索してやった方が、もしかしたら速いかもですね。
データ量はおっそろしい量になりそうだけど...。
Excerpt: DoCoMoのiエリアをベースに位置情報でスタンプラリーするようなゲー...
Weblog: ここギコ!
Tracked: 2008年01月25日 16:38
![[ここギコ!]](http://kokogiko.net/logo.png)



・「定義できない」とのたまうものを自説根拠の説明の中で延々と使う不誠実(笑)(むにゅう!)
・絵文字標準化でのキャリア批判に思うこと(kokogiko)
・文化は変わっていくのは当たり前だからこそ、今問われているのはリアルタイムの選択(むにゅう!)
・絵文字標準化でのキャリア批判に思うこと(ひゅ〜)
・絵文字標準化でのキャリア批判に思うこと(kokogiko)
・文化は変わっていくのは当たり前だからこそ、今問われているのはリアルタイムの選択(kokogiko)
・文化は変わっていくのは当たり前だからこそ、今問われているのはリアルタイムの選択(むにゅう!)
・文化は変わっていくのは当たり前だからこそ、今問われているのはリアルタイムの選択(むにゅう!)
・文化は変わっていくのは当たり前だからこそ、今問われているのはリアルタイムの選択(むにゅう!)