Name

toTopoGeom — Wandelt eine einfache Geometrie in eine TopoGeometry um.

Synopsis

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

topogeometry toTopoGeom(geometry geom, topogeometry topogeom, float8 tolerance);

Beschreibung

Wandelt eine einfache Geometrie in eine TopoGeometry um.

Die topologischen Elementarstrukturen, die benötigt werden um die Übergabegeometrie darzustellen, werden der zugrunde liegenden Topologie hinzugefügt. Dabei können bestehende Strukturen aufgetrennt werden, die dann mit der ausgegebenen TopoGeometry in der Tabelle relation zusammengeführt werden.

Bestehende Objekte einer TopoGeometry (mit der möglichen Ausnahme von topogeom, falls angegeben) behalten ihre geometrische Gestalt.

Wenn tolerance angegeben ist, wird diese zum Fangen der Eingabegeometrie an bestehenden Elementarstrukturen verwendet.

Bei der ersten Form wird eine neue TopoGeometry für den Layer (layer_id) einer Topologie (toponame) erstellt.

Bei der zweiten Form werden die aus der Konvertierung enstehenden Elementarstrukturen zu der bestehenden TopoGeometry (topogeom) hinzugefügt. Dabei wird möglicherweise zusätzlicher Raum aufgefüllt, um die endgültige geometrische Gestalt zu erreichen. Um die alte geometrische Gestalt zur Gänze durch eine neue zu ersetzen, siehe clearTopoGeom.

Verfügbarkeit: 2.0

Erweiterung: 2.1.0 die Version, welche eine bestehende TopoGeometry entgegennimmt, wurde hinzugefügt.

Beispiele

Dies ist ein in sich selbst vollkommen abgeschlossener Arbeitsablauf

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