無理に「白地図」を作る

id:yellow_73:20080812 の続き。
県毎に結合→県毎にSimplify→全県結合
をやると、県境あたりに「穴」ができます。本来だったらタッチするはずなのですが、Simplifyのために、ずれができたようです。この穴を埋められたらいいのに。
で、昨日は、Simplifyをする前の行政区域ポリゴンを生で結合しようと試みましたが、10時間かかっても終わらないので、やっぱりやめる。
で、今度は「穴」を埋める方向で考えてみる。PostGISのマニュアルをよーく見てると、「穴を埋める」関数はないけれども、よく考えたらそれ使えるやんというのがいくつか。
まず、T0に都道府県ごとにSimplifyしたマルチポリゴンを用意してあるとします。

INSERT INTO T1(the_geom) SELECT ST_Union(the_geom) AS the_geom FROM T0;
INSERT INTO T2(the_geom) SELECT ST_MakePolygon(ST_ExteriorRing( (ST_Dump(the_geom)).geom)) FROM T1;
INSERT INTO T3(the_geom) SELECT ST_Simplify(ST_Union(the_geom),0.05) FROM T2;
INSERT INTO T4(the_geom) SELECT (ST_Dump(the_geom)).geom FROM T3;
INSERT INTO T5(the_geom) SELECT the_geom FROM T4 WHERE ST_Area(the_geom)>0.009;
  1. ひとつのフィーチャーにいったん結合
  2. ST_Dumpでマルチポリゴンをポリゴンに分け、「穴」を除くため、外環を取り出す(ST_ExteriorRingはラインストリングを出すので、ポリゴン化しなおす)。
  3. もう一回ひとつのフィーチャーに結合してSimplifyを行う。
  4. もう一回ポリゴンに分割。
  5. 小さい面積のポリゴンは使わない。

といったところです。以外とフィーチャーの操作ができるのね。
あと、ST_Dumpは、geomとpathを出すのですが、geomのみを取りたい場合は(ST_Dump(the_geom)).geomとしなければなりません。