AddFace — Registra uma face primitiva a uma topologia e pega seu identificador.
integer AddFace(
varchar toponame, geometry apolygon, boolean force_new=false)
;
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.
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.
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. |
A geometria da |
Disponibilidade: 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