名称

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

另请参见

AddEdgeCreateTopology第 4.5 节,“空间参考系统”