名稱

AddFace — 將面基本元素註冊到拓樸,並取得其識別碼。

概要

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

描述

將面基本元素註冊到拓樸,並取得其識別碼。

對於新加入的面,構成其邊界的邊以及包含在該面內的邊將被更新,以在 left_face 和 right_face 欄位中具有正確的值。包含在該面內的獨立節點也會被更新,以具有正確的 containing_face 欄位值。

[Note]

此函數不使用或設定邊表中的 next_left_edge 和 next_right_edge 欄位。

目標拓樸假設為有效(不包含自相交的邊)。如果發生以下情況,則會引發例外:多邊形邊界未完全由現有邊定義,或多邊形與現有面重疊。

如果 apolygon 幾何圖形已作為面存在,則:如果 force_new 為 false(預設值),則會返回現有面的面 id;如果 force_new 為 true,則會將新的 id 指派給新註冊的面。

[Note]

當執行現有面的新註冊時 (force_new=true),不會採取任何動作來解決邊、節點和關係表中對現有面的懸空參考,也不會更新現有面記錄的 MBR 欄位。這需要由呼叫者處理。

[Note]

apolygon 幾何圖形必須具有與拓樸定義相同的 srid,否則將會拋出無效的空間參考系統錯誤。

可用性:2.0.0

範例

-- first add the edges we use generate_series as an iterator (the below
-- will only work for polygons with < 10000 points because of our max in gs)
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;
-- result --
 edgeid
--------
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
(10 rows)
-- then add the face -

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;
-- result --
faceid
--------
 1