AddFace — 将面基元注册到拓扑并获取其标识符。
integer AddFace(
varchar toponame, geometry apolygon, boolean force_new=false)
;
将面基元注册到拓扑并获取其标识符。
对于新添加的面,形成其边界的边以及面中包含的边将更新为在 left_face 和 right_face 字段中具有正确的值。 面中包含的孤立节点也将更新为具有正确的 contains_face 字段值。
该函数不使用也不设置边表的 next_left_edge 和 next_right_edge 字段。 |
假定目标拓扑有效(不包含自相交边)。 如果出现以下情况,则会引发异常: 多边形边界未完全由现有边定义,或者多边形与现有面重叠。
如果多边形
几何体已经作为面存在,则: 如果force_new
为假(默认),则返回现有面的面id; 如果force_new
为true,新的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