Name

AddFace — Registriert die Elementarstruktur einer Masche in einer Topologie und gibt den Identifikator der Masche aus.

Synopsis

integer AddFace(varchar toponame, geometry apolygon, boolean force_new=false);

Beschreibung

Registriert die Elementarstruktur einer Masche in einer Topologie und gibt den Identifikator der Masche aus.

Bei einer neu hinzugefügten Masche werden die Kanten die ihre Begrenzung bilden und jene die innerhalb der Masche liegen aktualisiert, damit diese die richtigen Werte in den Attribunten "left_face" und "right_face" aufweisen. Isolierte Knoten innerhalb der Masche werden ebenfalls aktualisiert, damit das Attribut "containing_face" die richtigen Werte aufweist.

[Note]

Von dieser Funktion werden die Attribute "next_left_edge" und "next_right_edge" der Tabelle "edge" weder verwendet noch gesetzt.

Es wird angenommen, dass die Zieltopologie valide ist (keine sich selbst überschneidenden Kanten enthält). Eine Fehlermeldung wird ausgegeben, wenn: Die Begrenzung des Polygons nicht vollständig durch bestehende Kanten festgelegt ist oder das Polygon eine bereits bestehende Masche überlappt.

Falls die Geometrie apolygon bereits als Masche existiert, dann: wenn force_new FALSE (der Standardwert) ist, dann wird die bestehende Masche zurückgegeben; wenn force_new TRUE ist, dann wird der neu registrierten Masche eine neue ID zugewiesen.

[Note]

Wenn eine bestehende Masche neu registriert wird (force_new=true), werden keine Maßnahmen durchgeführt um hängende Verweise auf eine bestehende Masche in den Tabellen "edge", "node" und "relation" zu bereinigen, noch wird der das Attribut MBR der bestehenden Masche aktualisert. Es ist die Aufgabe des Aufrufers sich um dies zu kümmern.

[Note]

Die Geometrie von apolygon muss dieselbe SRID aufweisen wie für die Topologie festgelegt, ansonsten wird die Fehlermeldung "invalid spatial reference sys error" ausgegeben.

Verfügbarkeit: 2.0.0

Beispiele


-- first add the edges we use generate_series as an iterator (the below
-- will only work for polygons with < 10000 points because of our max in gs)
SELECT topology.AddEdge('ma_topo', ST_MakeLine(ST_PointN(geom,i), ST_PointN(geom, i + 1) )) As edgeid
    FROM (SELECT  ST_NPoints(geom) AS npt, geom
            FROM
                (SELECT ST_Boundary(ST_GeomFromText('POLYGON((234896.5 899456.7,234914 899436.4,234946.6 899356.9,234872.5 899328.7,
                234891 899285.4,234992.5 899145, 234890.6 899069,234755.2 899255.4,
                234612.7 899379.4,234776.9 899563.7,234896.5 899456.7))', 26986) )  As geom
            )  As geoms) As facen CROSS JOIN generate_series(1,10000) As i
         WHERE i < npt;
-- result --
 edgeid
--------
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
(10 rows)
-- then add the face -

SELECT topology.AddFace('ma_topo',
    ST_GeomFromText('POLYGON((234896.5 899456.7,234914 899436.4,234946.6 899356.9,234872.5 899328.7,
    234891 899285.4,234992.5 899145, 234890.6 899069,234755.2 899255.4,
    234612.7 899379.4,234776.9 899563.7,234896.5 899456.7))', 26986) ) As faceid;
-- result --
faceid
--------
 1