せすてぃー_うにおんにチャレンジ。

id:yellow_73:20090728#p1やPostGIS1.4のポリゴンマージ、マジ速いでチョー早いという噂のPostGISのST_Union。
ならばということでチャレンジしてみたのですが,そもそも,PostgreSQLPostGISをほぼ使ったことのない人間なので,色々嵌りましたorz...

つかまぁ,現状でも嵌っています(汗
ということで,自分の確認も含めてメモ。

まず,作業対象は環境省の1/25,000植生図のshpファイルを200図幅ぐらいマージしたもの。マージは,ogr2ogrを使った。
こいつを,凡例単位でディゾルブしたいわけだ。つーか,ディゾルブじゃん,ユニオンじゃねーじゃんという気もするが,ここでは置いておく。

でだ。まずは,Unionをしたファイルを出力するためのテーブルを作る必要がある。これを理解するために,2時間ぐらいかかったと思われる。しかも,その理解で正しいのかどうか,不明である(汗

で,実行したコマンドは以下の通り。

INSERT INTO veg_6th_union (the_geom,org_no)
SELECT astext(multi(ST_union(the_geom))) AS the_geom,org_no FROM veg_6th
GROUP BY org_no

で,一応動いたのだが,以下のエラーが出て,いくつかのポリゴンが消えて無くなった。

NOTICE: TopologyException: found non-noded intersection between 451889 3.95671e+006, 452200 3.95671e+006 and 452200 3.95671e+006, 451889 3.95671e+006 452200 3.95671e+006
NOTICE: TopologyException: found non-noded intersection between 443695 3.90131e+006, 444161 3.90131e+006 and 443717 3.9013e+006, 443695 3.90131e+006 443695 3.90131e+006
NOTICE: TopologyException: found non-noded intersection between 418906 3.99392e+006, 418905 3.99392e+006 and 418905 3.99392e+006, 418905 3.99392e+006 418905 3.99392e+006
NOTICE: TopologyException: found non-noded intersection between 437464 3.96604e+006, 437430 3.96604e+006 and 437457 3.96605e+006, 437464 3.96604e+006 437464 3.96604e+006
NOTICE: TopologyException: found non-noded intersection between 435963 3.966e+006, 435927 3.96605e+006 and 435927 3.96605e+006, 435981 3.96605e+006 435927 3.96605e+006
NOTICE: TopologyException: found non-noded intersection between 441770 3.90132e+006, 441788 3.90132e+006 and 441780 3.90132e+006, 441770 3.90132e+006 441770 3.90132e+006
NOTICE: TopologyException: found non-noded intersection between 441889 3.91056e+006, 441889 3.91056e+006 and 441889 3.91056e+006, 441889 3.91056e+006 441889 3.91056e+006
NOTICE: TopologyException: found non-noded intersection between 429108 3.97535e+006, 429108 3.97535e+006 and 429108 3.97535e+006, 429108 3.97535e+006 429108 3.97535e+006
NOTICE: TopologyException: found non-noded intersection between 458145 3.95668e+006, 458177 3.95668e+006 and 458177 3.95668e+006, 458145 3.95668e+006 458177 3.95668e+006
NOTICE: TopologyException: found non-noded intersection between 441753 3.90132e+006, 441770 3.90132e+006 and 441770 3.90132e+006, 441765 3.90132e+006 441770 3.90132e+006
NOTICE: TopologyException: EdgeRing::computePoints: found null Directed Edge
NOTICE: TopologyException: found non-noded intersection between 356129 3.99473e+006, 356201 3.99472e+006 and 356140 3.99472e+006, 356129 3.99473e+006 356129 3.99473e+006
NOTICE: TopologyException: found non-noded intersection between 452224 3.95669e+006, 452200 3.95671e+006 and 452200 3.95671e+006, 452288 3.95671e+006 452200 3.95671e+006
NOTICE: TopologyException: found non-noded intersection between 454155 3.98442e+006, 454155 3.98442e+006 and 454155 3.98442e+006, 454155 3.98442e+006 454155 3.98442e+006
NOTICE: TopologyException: found non-noded intersection between 433045 3.96607e+006, 433044 3.96607e+006 and 433033 3.96609e+006, 433045 3.96607e+006 433045 3.96607e+006
クエリーは、成功しました: 126 行の影響があり, 実行時間は、978078 ミリ秒でした。

つーか,本当はマルチポリゴンじゃなくて,シングルポリゴンでやりたいんで,そもそもST_Collectのほうがいいのかな?

そんなかんじで,もうちと頑張ってみます。