最初にST_NodeをST_Collectと組み合わせて使用して、MultiLinestring内のノード化された一連のラインストリングにラインを変換することで、これを機能させました。
ST_Nodeのドキュメントで述べているように:
すべての入力ノードを保持しながら、可能な限り少ない数のノードを使用して一連のラインストリングを完全にノード化します。
これが意味することは、ポリゴンの外部リングに相当するものを構成するために、すべての可能性のある組み合わせですべての線ストリングが結合されるということです。一方、LineStringのセットをST_Polygonizeしようとすると、それ自体はポリゴンを記述しませんが、単にLineStringを取得します。したがって、これは機能します:
WITH multi(geom) AS (
SELECT ST_Node(ST_Collect(geom))
FROM leyenda_digitalizar00
)
SELECT ST_AsText( (ST_Dump(ST_Polygonize(geom))).geom )
FROM multi;
この最初の部分、つまりCTE multiを実行すると、出力は次のようになります。
MULTILINESTRING((204.5 69.9000000000004,204.5 69.9000000000004)、(204.5 68.9,205.4 68.9)、(204.5 68.9,204.5 69,204.5 69.1,204.5 69.2,204.5 69.3,204.5 69.4,204.5 69.5,204.5 69.6,204.5 69.7,204.5 69.8,204.5 69.9、 204.5 69.9000000000004)、(209.5 68.9,209.5 68.8,209.5 68.7,209.5 68.6,209.5 68.5,209.5 68.4,209.5 68.3,209.5 68.2,209.5 68.1,209.5 68,209.5 67.9,209.5 67.8,209.5 67.7,209.5 67.6,209.5 67.5,209.5 67.4 、209.5 .......
これで、このMultiLinestringをST_Polygonizeにフィードすると、期待どおりに機能します。たとえば、
ポリゴン((205.4 68.9,204.5 68.9,204.5 69,204.5 69.1,204.5 69.2,204.5 69.3,204.5 69.4,204.5 69.5,204.5 69.6,204.5 69.7,204.5 69.8,204.5 69.9,204.5 69.9000000000004,205.4 69.9,205.4 69.3,205.4 68.9))
POLYGON((204.5 69.9000000000004,204.5 70,204.5 70.1,204.5 70.2,204.5 70.3,204.5 70.4,206.8 70.4,209.5 70.4,209.5 70.3,209.5 70.2,209.5 70.1,209.5 70,209.5 69.9,205.4 69.9,204.5 69.9000000000004))
ポリゴン((206.8 70.4,204.5 70.4,204.5 70.5,204.5 70.6,204.5 70.7,204.5 70.8,204.5 70.9,204.5 71,204.5 71.1,204.5 71.2,204.5 71.3,204.5 71.4,206.8 71.4,206.8 70.4))
明らかに、ST_AsTextは単に説明のためのものであり、パスIDも必要な場合は調整する必要があります。
重要な点は、ST_Polygonizeは、ポリゴンのアウトラインを既に記述しているラインストリングを想定していることです。これは、上記でST_Node(ST_Collect(....が行うことです)。