Name

AddFace — Registra una primitiva de cara a una topología y obtiene su identificador.

Synopsis

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

Descripción

Registra una primitiva de cara a una topología y obtiene su identificador.

Para una cara recién agregada, los bordes que forman sus límites y los contenidos en la cara se actualizarán para tener valores correctos en los campos left_face y right_face. Los nodos aislados contenidos en la cara también se actualizarán para tener un valor del campo containing_face.

[Note]

Esta función no utiliza ni establece los campos next_left_edge y next_right_edge de la tabla Edge.

Se supone que la topología de destino es válida (que no contiene aristas de intersección). Se plantea una excepción si: el límite del polígono no está definido completamente por los bordes existentes o el polígono se superpone con una cara existente.

Si la geometría apolygon ya existe como cara, entonces: si force_new es falso (el valor predeterminado) se devuelve el id de cara de la cara existente; si force_new es verdadero; , se asignará un nuevo identificador a la cara recién registrada.

[Note]

Cuando se realiza un nuevo registro de una cara existente (force_new=true), no se tomará ninguna acción para resolver las referencias pendientes a la cara existente en la arista, nodo y a tablas de relación, ni se actualizará el campo MBR del registro de cara existente. Depende de la persona que llama hacerse cargo de ello.

[Note]

La geometría apolygon debe tener el mismo srid que el definido para la topología de lo contrario se lanzará un error de sistema de referencia espacial no válido.

Disponibilidad: 2.0.0

Ejemplos


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