Complementando o post anterior, imagine o seguinte cenário: um mapa que mostre de forma esquemática, adutoras que serão projetadas para abastecer alguns municípios. Neste caso o objetivo é ter uma ideia dos comprimentos das adutoras (representados pela distância entre as sedes municipais), quantidade de municípios abastecidos e o nome dos mesmos.
CREATE TABLE adutoras ( gid serial PRIMARY KEY, nome_adutora varchar(50), -- campo alimentado pela trigger comp_trecho_km numeric(10,3), -- campo alimentado pela trigger qtde_municipios_abast int, -- campo alimentado pela trigger municipios_abastecidos varchar(400) ); -- adição do campo geom SELECT AddGeometryColumn ( 'public', 'adutoras', 'geom', '4291', --Lat/Long - Datum SAD69 'LINESTRING', 2 ); -- Procedure CREATE OR REPLACE FUNCTION pipeline_geometry_field() RETURNS trigger AS $$ BEGIN SELECT string_agg(municipios.nome,', ') INTO NEW.municipios_abastecidos FROM municipios WHERE ST_Intersects(NEW.geom, municipios.geom); SELECT COUNT(municipios.*) INTO NEW.qtde_municipios_abast FROM municipios WHERE ST_Intersects(NEW.geom, municipios.geom); NEW.comp_trecho_km:=ST_Length(Geography((NEW.geom))/1000); RETURN NEW; END; $$ LANGUAGE 'plpgsql'; -- Trigger CREATE TRIGGER fill_pipeline_geometry_field BEFORE INSERT OR UPDATE ON adutoras FOR EACH ROW EXECUTE PROCEDURE pipeline_geometry_field();
O vídeo a seguir mostra a implementação do código acima, a partir da edição da tabela adutora no QGIS, observa-se o preenchimento automático dos campos após o salvamento da feição no Banco de Dados:
Nenhum comentário:
Postar um comentário