Nome

AddFace — Registra uma face primitiva a uma topologia e pega seu identificador.

Sinopse

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

Description

Registra uma face primitiva a uma topologia e pega seu identificador.

Para uma nova face adicionada, as bordas formando seus limites e as contidas na face, serão atualizadas para ter valore corretos nos campos left_face e right_face. Os nós isolados contidos na face também serão atualizados para ter um valor correto do campo containing_face.

[Nota]

Esta função não utiliza os campos set the next_left_edge e next_right_edge da table limite.

A topologia alvo é supostamente válida (não contendo nenhuma borda auto intersectada). Uma exceção surge se: O limite do polígono não estiver completamente definido ou caso o polígono sobreponha uma face existente.

Se a apolygon geometria já existe como face, então: se force_new é falso (o padrão) a id da face da face existente retorna, se force_new é verdade uma nova id será assinada para a nova face registrada.

[Nota]

Quando um no registro de uma face existente é representada (force_new=true), nenhuma ação será tomada para resolver referências pendentes a face existente na borda, nó e tables relacionadas, nem o relato do campo MBR será atualizado. Fica a critério do chamador lidar ou não com isso.

[Nota]

A geometria da apolygon deve ter o mesmo srid definido para a topologia, senão um erro inválido é lançado no sistema de referência espacial.

Disponibilidade: 2.0.0

Exemplos

First add the edges using generate_series as an iterator. This query only works for polygons with fewer than 10000 points because of the maximum value in generate_series.

Code
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;
Raster Outputs
3
4
5
6
7
8
9
10
11
12

Then add the face.

Code
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;
Raster Outputs
1