AddFace — 将面基本体注册到拓扑并获取其标识符。
integer
AddFace
(
varchar
toponame
, geometry
apolygon
, boolean
force_new=false
)
;
将面基本体注册到拓扑并获取其标识符。
对于新添加的面,形成其边界的边和面中包含的边将被更新,以便在Left_Face和Right_Face字段中具有正确的值。面中包含的隔离节点也将更新为具有正确的CONTINING_FACE字段值。
![]() |
|
此函数不使用也不设置边缘表的NEXT_LEFT_EDGE和NEXT_RIGHT_EDGE字段。 |
假设目标拓扑有效(不包含自交边)。如果存在以下情况,则会引发异常:多边形边界未完全由现有边定义,或者该多边形与现有面重叠。
如果
apolygon
几何体已作为面存在,则:如果
force_new
为FALSE(默认值),则返回现有面的面ID;如果为
force_new
如果是真的,将为新注册的人脸分配新的ID。
![]() |
|
当执行现有面的新配准时(force_new=TRUE),不会采取任何操作来解析边中对现有面的悬空引用、关系表的节点,也不会更新现有面记录的MBR字段。这是由呼叫者来处理的。 |
![]() |
|
这个
|
可用性: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