Name

AddFace — Enregistre une primitive de face dans une topologie et obtient son identifiant.

Synopsis

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

Description

Enregistre une primitive de face dans une topologie et obtient son identifiant.

Pour une face nouvellement ajoutée, les arêtes formant ses limites et celles contenues dans la face seront mises à jour pour que les valeurs des champs left_face et right_face soient correctes. Les nœuds isolés contenus dans la face seront également mis à jour pour que la valeur du champ containing_face soit correcte.

[Note]

Cette fonction n'utilise ni ne définit les champs next_left_edge et next_right_edge de la table des arêtes.

La topologie cible est supposée valide (ne contenant pas d'arêtes se recoupant). Une exception est levée si : La limite du polygone n'est pas entièrement définie par les arêtes existantes ou le polygone chevauche une face existante.

Si la géométrie apolygon existe déjà en tant que face, alors : si force_new est false (par défaut), l'identifiant de la face existante est renvoyé ; si force_new est true, un nouvel identifiant sera attribué à la face nouvellement enregistrée.

[Note]

Lorsqu'un nouvel enregistrement d'une face existante est effectué (force_new=true), aucune action ne sera entreprise pour résoudre les références pendantes à la face existante dans les tables d'arêtes, de nœuds et de relations, et le champ MBR (Minimum Bounding Rectangle) de l'enregistrement de la face existante ne sera pas mis à jour. C'est à l'appelant de s'en occuper.

[Note]

La géométrie apolygon doit avoir la même srid que celle définie pour la topologie, sinon une erreur sys de référence spatiale non valide sera déclenchée.

Disponibilité : 2.0.0

Exemples


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