2007年08月19日

PostGISで経緯度⇒iエリア変換するとPerlモジュールの50倍速変換できる

Posted by nene2001 at 10:09 / Tag(Edit): postgis gis mobile iarea / 0 Comments: Post / View / 1 TrackBack / Google Maps このエントリーを含むはてなブックマーク

以前からiエリア情報をポリゴン化してGoogle Mapsとかに配信できるようなWebサービスとか作りたいと思っていつつ、時間もなく後回し後回しにしていたのですが、今回ちょっと機会に恵まれたのでざっとポリゴン化してみました。

んでもって、PostGISに505エリア分のポリゴンデータ叩き込めるようなSQLファイルも作成したので、公開します。

iエリアポリゴンデータのPostGIS用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エリア定義ファイルを全部取り得る最小メッシュ値に直してやった上で、普通の表形式テーブルで完全一致検索してやった方が、もしかしたら速いかもですね。
データ量はおっそろしい量になりそうだけど...。

Related query words in Google & Yahoo
Related Books from Amazon
Trackback to this entry
TrackBack URL :
Trackbacks
PerlのBenchmarkで出るベンチマーク値は、いったい何を表すのだろう?
Excerpt: DoCoMoのiエリアをベースに位置情報でスタンプラリーするようなゲー...
Weblog: ここギコ!
Tracked: 2008年01月25日 16:38
Comments
コメントはありません。
Post a comment












Remember personal info? 
2007年08月
Su Mo Tu We Th Fr Sa
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

About Me

Navigation

Search
Google
Web
kokogiko.net
Archives
Recent Entries
Recent Comments
Recent Trackbacks
姫路のオモシロ寿司屋(ここギコ!)
0系こだまとひかりレールスターに乗ってきた ドクターイエローも見た
姫路のオモシロ寿司屋(ここギコ!)
位置情報ベース広告AdLocalへ一般からも入札が可能に
「定義できない」とのたまうものを自説根拠の説明の中で延々と使う不誠実(笑)(ここギコ!)
文化は変わっていくのは当たり前だからこそ、今問われているのはリアルタイムの選択
現代アイヌの政治運動は利権獲得のためのようだな。(むにゅう!の平和大好き! はてな基地)
文化は変わっていくのは当たり前だからこそ、今問われているのはリアルタイムの選択
的外れですた恥ずかしい Googleは世界標準の絵文字を作ろうとしてるわけではない、少なくとも、今のところ(ここギコ!)
絵文字標準化でのキャリア批判に思うこと
すごい職場の活性法(これが答えだ)
人員がクラスタ化できている職場と言うのはうらやましい そろそろ限界です
文化は変わっていくのは当たり前だからこそ、今問われているのはリアルタイムの選択(ここギコ!)
大和民族の定義云々について
歴史のダイナミズムの元では右翼こそ変わらなければならない(ここギコ!)
右翼はアイヌや沖縄を包摂する論理を構築すべきではないのか
右翼はアイヌや沖縄を包摂する論理を構築すべきではないのか(ここギコ!)
大和民族の定義云々について
政治と祭祀が不可分と考えるなら、全ての祭祀を引き受けるのが筋(ここギコ!)
大和民族の定義云々について
Hatena bookmarked
My del.icio.us

Banners

Syndication
Powered by
Get it!!