toTopoGeom — 将简单几何图形转换为拓扑几何图形。
topogeometry toTopoGeom(geometry geom, varchar toponame, integer layer_id, float8 tolerance=-1);
topogeometry toTopoGeom(geometry geom, topogeometry topogeom, float8 tolerance=-1);
将简单的几何图形转换为拓扑几何图形TopoGeometry。
表示输入几何所需的拓扑基元将被添加到底层拓扑中,可能会拆分现有拓扑,并且它们将与关系表中的输出 TopoGeometry 相关联。
现有的 TopoGeometry 对象(拓扑几何可能除外,如果给定的话)将保留其形状。
当提供 tolerance 时,会用它来将输入几何贴靠到已有的基础要素上。特殊值 -1(默认)表示使用拓扑的精度作为容差。
在第一种形式中,将为给定拓扑 (toponame) 的给定图层 (layer_id) 创建新的 TopoGeometry。
在第二种形式中,转换产生的图元将被添加到预先存在的 TopoGeometry (topogeom) 中,可能会为其最终形状添加空间。 要让新形状完全取代旧形状,请参阅clearTopoGeom。
可用性:2.0
增强:2.1.0添加了采用现有TopoGeometry的版本。
Changed: 3.7.0 将 tolerance 为 0 的含义改为真正表示 0,而 -1(新的默认值)表示使用拓扑精度。
这是一个完整的独立工作流程
Create the topology without allowing any tolerance.
SELECT topology.CreateTopology('topo_boston_test', 2249);
Create a new table.
CREATE TABLE nei_topo(gid serial primary key, nei varchar(30));
Add a topogeometry column to the new table.
SELECT topology.AddTopoGeometryColumn('topo_boston_test', 'public', 'nei_topo', 'topo', 'MULTIPOLYGON') AS new_layer_id;
1
Use the new layer identifier to populate the topogeometry column.
INSERT INTO nei_topo(nei, topo) SELECT nei, topology.toTopoGeom(geom, 'topo_boston_test', 1) FROM neighborhoods WHERE gid BETWEEN 1 and 15;
Verify what happened.
SELECT * FROM
topology.TopologySummary('topo_boston_test');
Topology topo_boston_test (5), SRID 2249, precision 0 61 nodes, 87 edges, 35 faces, 15 topogeoms in 1 layers Layer 1, type Polygonal (3), 15 topogeoms Deploy: public.nei_topo.topo
Shrink all TopoGeometry polygons by 10 meters.
UPDATE nei_topo SET topo = toTopoGeom(ST_Buffer(topo, -10), clearTopoGeom(topo), 0);
Find faces that are left without any TopoGeometry reference after the shrink operation.
SELECT ST_GetFaceGeometry('topo_boston_test', f.face_id)
FROM topo_boston_test.face f
WHERE f.face_id
> 0
AND NOT EXISTS (
SELECT * FROM topo_boston_test.relation
WHERE layer_id = 1 AND element_id = f.face_id
);