toTopoGeom — Convertit une géométrie simple en une géométrie topographique.
topogeometry toTopoGeom(geometry geom, varchar toponame, integer layer_id, float8 tolerance=-1);
topogeometry toTopoGeom(geometry geom, topogeometry topogeom, float8 tolerance=-1);
Convertit une géométrie simple en une TopoGeometry.
Les primitives topologiques requises pour représenter la géométrie d'entrée seront ajoutées à la topologie sous-jacente, éventuellement en divisant les primitives existantes, et elles seront associées à la TopoGeometry de sortie dans la table relation.
Les objets TopoGeometry existants (à l'exception éventuelle de topogeom, s'il en existe) conserveront leur forme.
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.
Dans le premier formulaire, une nouvelle TopoGéométrie sera créée pour la couche donnée (layer_id) de la topologie donnée (toponame).
Dans la seconde forme, les primitives résultant de la conversion seront ajoutées à la TopoGeometry préexistante (topogeom), ajoutant éventuellement de l'espace à sa forme finale. Pour que la nouvelle forme remplace complètement l'ancienne, voir clearTopoGeom.
Disponibilité : 2.0
Amélioré : 2.1.0 ajoute la version d'une TopoGeometry existante.
Changed: 3.7.0 changes meaning of tolerance 0 to really mean 0 and -1 (new default) to request using the topology precision.
Il s'agit d'un flux de travail complet et autonome
-- 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
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 = toTopoGeom(ST_Buffer(topo, -10), clearTopoGeom(topo), 0);
-- 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
);