名前

AddFace — フェイスプリミティブをトポロジに登録し、その識別番号を得ます。

概要

integer AddFace(varchar toponame, geometry apolygon, boolean force_new=false);

説明

フェイスプリミティブをトポロジに登録し、その識別番号を得ます。

新しく追加されたフェイスのために、境界を形成するエッジとフェイスに含まれるエッジはleft_faceとright_faceフィールドに正しい値を持つよう更新されます。フェイスに含まれる孤立ノードも正しいcontaining_faceフィールド値を持つよう更新されます。

[注記]

This function does not use nor set the next_left_edge and next_right_edge fields of the edge table.

対象トポロジは妥当(自己インタセクトするエッジが無い)と仮定しています。ポリゴンの境界が既存のエッジでは完全には定義されない場合や、ポリゴンが既存のフェイスにオーバラップする場合には、例外が投げられます。

apolygonジオメトリがフェイスとして既に存在する場合には、force_newがfalse(デフォルト)なら既存のフェイス識別番号を返し、force_newがtrueなら新しくフェイスが登録されて新しい識別番号が確保されます。

[注記]

既存フェイスの新規登録が実行される時(force_new=true)、そのエッジ内の既存のフェイスへの参照のダングルを解決しません。また、関連テーブルのノードと既存フェイスのレコードのMBR(訳注: 最小境界矩形)フィールドの更新も行いません。これに対応するのは、この関数を呼び出した側です。

[注記]

alineジオメトリはトポロジと同じsridである必要があり、異なる場合は不正な空間参照系エラーが投げられます。

初出: 2.0.0

-- まずgenerate_seriesを使って繰り返しを発生させてエッジを追加します
-- (次に示すものは最大値10000ポイント以下のポリゴンでのみ動作します。
-- generate_seriesの上限になるためです)。
SELECT topology.AddEdge('ma_topo', ST_MakeLine(ST_PointN(geom,i), ST_PointN(geom, i + 1) )) As edgeid
    FROM (SELECT  ST_NPoints(geom) AS npt, geom
            FROM 
                (SELECT ST_Boundary(ST_GeomFromText('POLYGON((234896.5 899456.7,234914 899436.4,234946.6 899356.9,234872.5 899328.7,
                234891 899285.4,234992.5 899145, 234890.6 899069,234755.2 899255.4,
                234612.7 899379.4,234776.9 899563.7,234896.5 899456.7))', 26986) )  As geom
            )  As geoms) As facen CROSS JOIN generate_series(1,10000) As i
         WHERE i < npt;
-- 結果 --
 edgeid
--------
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
(10 rows)
-- 次にフェイスの追加 -
				
SELECT topology.AddFace('ma_topo', 
    ST_GeomFromText('POLYGON((234896.5 899456.7,234914 899436.4,234946.6 899356.9,234872.5 899328.7,
    234891 899285.4,234992.5 899145, 234890.6 899069,234755.2 899255.4,
    234612.7 899379.4,234776.9 899563.7,234896.5 899456.7))', 26986) ) As faceid;
-- 結果 --
faceid
--------
 1
 

関連情報

AddEdge, CreateTopology, 「SPATIAL_REF_SYSテーブルと空間参照系」