toTopoGeom — 將簡單的幾何圖形轉換為拓樸幾何圖形。
topogeometry toTopoGeom(
geometry geom, varchar toponame, integer layer_id, float8 tolerance)
;
topogeometry toTopoGeom(
geometry geom, topogeometry topogeom, float8 tolerance)
;
將簡單的幾何圖形轉換為 TopoGeometry。
表示輸入幾何圖形所需的拓樸基本元素將被加入到基礎拓樸中,可能會分割現有的元素,並且它們將在 relation
表格中與輸出 TopoGeometry 相關聯。
現有的 TopoGeometry 物件(可能除了 topogeom
之外,如果有的話)將保留其形狀。
當提供 tolerance
時,它將用於將輸入幾何圖形對齊到現有的基本元素。
在第一種形式中,將為給定拓樸 (toponame
) 的給定圖層 (layer_id
) 建立新的 TopoGeometry。
在第二種形式中,轉換產生的基本元素將被添加到預先存在的 TopoGeometry (topogeom
) 中,可能會增加其最終形狀的空間。 要使新形狀完全取代舊形狀,請參閱 clearTopoGeom。
可用性:2.0
增強功能:2.1.0 新增了採用現有 TopoGeometry 的版本。
這是一個完整的獨立工作流程
-- do this if you don't have a topology setup already -- creates topology not 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 it SELECT topology.AddTopoGeometryColumn('topo_boston_test', 'public', 'nei_topo', 'topo', 'MULTIPOLYGON') As new_layer_id; new_layer_id ----------- 1 --use new layer id in populating the new topogeometry column -- we add the topogeoms to the new layer with 0 tolerance INSERT INTO nei_topo(nei, topo) SELECT nei, topology.toTopoGeom(geom, 'topo_boston_test', 1) FROM neighborhoods WHERE gid BETWEEN 1 and 15; --use to verify what has happened -- SELECT * FROM topology.TopologySummary('topo_boston_test'); -- summary-- 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 = ST_Buffer(clearTopoGeom(topo), -10); -- Get the no-one-lands left by the above operation -- I think GRASS calls this "polygon0 layer" SELECT ST_GetFaceGeometry('topo_boston_test', f.face_id) FROM topo_boston_test.face f WHERE f.face_id > 0 -- don't consider the universe face AND NOT EXISTS ( -- check that no TopoGeometry references the face SELECT * FROM topo_boston_test.relation WHERE layer_id = 1 AND element_id = f.face_id );