Name

toTopoGeom — Konverterar en enkel geometri till en topogeometri.

Synopsis

topogeometry toTopoGeom(geometry geom, varchar toponame, integer layer_id, float8 tolerance=-1);

topogeometry toTopoGeom(geometry geom, topogeometry topogeom, float8 tolerance=-1);

Beskrivning

Konverterar en enkel geometri till en TopoGeometry.

De topologiska primitiver som krävs för att representera indatageometrin läggs till i den underliggande topologin, eventuellt genom att dela upp befintliga primitiver, och de associeras med utdata TopoGeometry i relationstabellen.

Befintliga TopoGeometry-objekt (med möjligt undantag för topogeom, om det anges) kommer att behålla sina former.

When tolerance is given it will be used to snap the input geometry to existing primitives. The special value -1 (default) means use the topology precision as tolerance.

I det första formuläret skapas en ny TopoGeometry för det givna lagret(layer_id) i den givna topologin(toponame).

I den andra formen kommer de primitiver som konverteringen resulterar i att läggas till den redan existerande TopoGeometry(topogeom), och eventuellt lägga till utrymme i den slutliga formen. För att få den nya formen att helt ersätta den gamla, se clearTopoGeom.

Tillgänglighet: 2.0

Förbättrad: 2.1.0 lägger till versionen som tar en befintlig TopoGeometry.

Changed: 3.7.0 changes meaning of tolerance 0 to really mean 0 and -1 (new default) to request using the topology precision.

Exempel

Detta är ett helt fristående arbetsflöde

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
  );