toTopoGeom — Konverterar en enkel geometri till en topogeometri.
topogeometry toTopoGeom(geometry geom, varchar toponame, integer layer_id, float8 tolerance=-1);
topogeometry toTopoGeom(geometry geom, topogeometry topogeom, float8 tolerance=-1);
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.
Detta är ett helt fristående arbetsflöde
Skapa topologin utan att tillåta någon tolerans.
SELECT topology.CreateTopology('topo_boston_test', 2249);
Skapa en ny tabell.
CREATE TABLE nei_topo(gid serial primary key, nei varchar(30));
Lägg till en topogeometrikolumn i den nya tabellen.
SELECT topology.AddTopoGeometryColumn('topo_boston_test', 'public', 'nei_topo', 'topo', 'MULTIPOLYGON') AS new_layer_id;
1
Använd den nya lageridentifieraren för att fylla topogeometrikolumnen.
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.
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
Krymp alla TopoGeometry-polygoner med 10 meter.
UPDATE nei_topo SET topo = toTopoGeom(ST_Buffer(topo, -10), clearTopoGeom(topo), 0);
Hitta ytor som saknar TopoGeometry-referens efter krympningen.
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
);