Namn

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 associeras med TopoGeometry-utdata i tabellen relation.

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

När tolerance anges används den för att snäppa indatageometrin till befintliga primitiver. Specialvärdet -1 (standardvärdet) innebär att topologins precision används som tolerans.

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 läggs de primitiver som konverteringen resulterar i till den befintliga TopoGeometry (topogeom) och kan utöka dess slutliga form. Se clearTopoGeom för att helt ersätta den gamla formen med den nya.

Tillgänglighet: 2.0

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

Ändrat: 3.7.0 ändrar innebörden av tolerans 0 till att verkligen betyda 0 och -1 (nytt standardvärde) till att begära användning av topologins precision.

Exempel

Detta är ett helt fristående arbetsflöde

Skapa topologin utan att tillåta någon tolerans.

Kod
SELECT topology.CreateTopology('topo_boston_test', 2249);

Skapa en ny tabell.

Kod
CREATE TABLE nei_topo(gid serial primary key, nei varchar(30));

Lägg till en topogeometrikolumn i den nya tabellen.

Kod
SELECT topology.AddTopoGeometryColumn('topo_boston_test', 'public', 'nei_topo', 'topo', 'MULTIPOLYGON') AS new_layer_id;
Utdata
1

Använd den nya lageridentifieraren för att fylla topogeometrikolumnen.

Kod
INSERT INTO nei_topo(nei, topo)
SELECT nei, topology.toTopoGeom(geom, 'topo_boston_test', 1)
FROM neighborhoods
WHERE gid BETWEEN 1 and 15;

Verifiera vad som hände.

Kod
SELECT * FROM
    topology.TopologySummary('topo_boston_test');
Utdata
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

Krymp alla TopoGeometry-polygoner med 10 meter.

Kod
UPDATE nei_topo SET topo = toTopoGeom(ST_Buffer(topo, -10), clearTopoGeom(topo), 0);
        

Hitta ytor som saknar TopoGeometry-referens efter krympningen.

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