AddFace — Enregistre une primitive de face dans une topologie et obtient son identifiant.
integer AddFace(
varchar toponame, geometry apolygon, boolean force_new=false)
;
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.
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.
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. |
La géométrie |
Disponibilité : 2.0.0
-- 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