diff --git a/pgh_consistency--6.0.sql b/pgh_consistency--6.2.sql similarity index 96% rename from pgh_consistency--6.0.sql rename to pgh_consistency--6.2.sql index b1dafd4..d0b6bbd 100644 --- a/pgh_consistency--6.0.sql +++ b/pgh_consistency--6.2.sql @@ -1,3845 +1,3845 @@ --- --- Copyright (c) 2016 Alexandre de Amorim Teixeira, pghydro.project@gmail.com --- --- This program is free software; you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation; either version 2 of the License, or --- (at your option) any later version. --- --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. --- --- You should have received a copy of the GNU General Public License --- along with this program; if not, write to the Free Software --- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - ---REQUIREMENTS - ---Postgresql version 9.1+ ---PostGIS version 2.0+ ---PgHydro version 6.0.1 - ---------------------------------------------------------------------------------- ---Pfafstetter Consistency Extension Version 6.0.1 of xx/xx/xxxx ---------------------------------------------------------------------------------- - -------------------------------------- ---CREATE SCHEMA, TABLES AND SEQUENCES -------------------------------------- - -DROP SCHEMA IF EXISTS pgh_consistency CASCADE; - -CREATE SCHEMA pgh_consistency; - ------------------------------ ---CREATE CONSISTENCY TABLES ------------------------------ - -CREATE TABLE pgh_consistency.pghft_drainageareaoverlapdrainagearea -( - id bigint NOT NULL, - int_pk bigint, - editor bigint, - dra_pk_a integer, - dra_pk_b integer, - cn01_gm geometry(MultiPolygon), - dra_gm_a geometry(MultiPolygon), - dra_gm_b geometry(MultiPolygon), - area numeric, - CONSTRAINT pghft_drainageareaoverlapdrainagearea_pkey PRIMARY KEY (id) -); - -CREATE TABLE pgh_consistency.pghft_drainageareaisnotsimple -( - id bigint NOT NULL, - dra_pk integer, - editor bigint, - cn02_gm geometry(MultiPolygon), - CONSTRAINT pghft_drainageareaisnotsimple_pkey PRIMARY KEY (id) -); - -CREATE TABLE pgh_consistency.pghft_drainageareaisnotsingle -( - id bigint NOT NULL, - dra_pk integer, - editor bigint, - cn03_gm geometry(MultiPolygon), - CONSTRAINT pghft_drainageareaisnotsingle_pkey PRIMARY KEY (id) -); - -CREATE TABLE pgh_consistency.pghft_drainageareaisnotvalid -( - id bigint NOT NULL, - dra_pk integer, - editor bigint, - cn04_gm geometry(MultiPolygon), - cn05_gm_point geometry(MultiPoint), - CONSTRAINT pghft_drainageareaisnotvalid_pkey PRIMARY KEY (id) -); - -CREATE TABLE pgh_consistency.pghft_drainageareamoreonedrainageline -( - id bigint NOT NULL, - dra_pk integer, - editor bigint, - cn06_gm geometry(MultiPolygon), - CONSTRAINT pghft_drainageareamoreonedrainageline_pkey PRIMARY KEY (id) -); - -CREATE TABLE pgh_consistency.pghft_drainageareanodrainageline -( - id bigint NOT NULL, - dra_pk integer, - editor bigint, - cn07_gm geometry(MultiPolygon), - area numeric, - CONSTRAINT pghft_drainageareanodrainageline_pkey PRIMARY KEY (id) -); - -CREATE TABLE pgh_consistency.pghft_drainageareawithindrainagearea -( - id bigint NOT NULL, - dra_pk integer, - editor bigint, - cn08_gm geometry(MultiPolygon), - area numeric, - CONSTRAINT pghft_drainageareawithindrainagearea_pkey PRIMARY KEY (id) -); - -CREATE TABLE pgh_consistency.pghft_drainagelinecrossdrainageline -( - id bigint NOT NULL, - drn_pk integer, - editor bigint, - cn09_gm geometry(MultiLineString), - CONSTRAINT pghft_drainagelinecrossdrainageline_pkey PRIMARY KEY (id) -); - -CREATE TABLE pgh_consistency.pghft_drainagelinehaveselfintersection -( - id bigint NOT NULL, - drn_pk integer, - editor bigint, - cn10_gm geometry(MultiLineString), - CONSTRAINT pghft_drainagelinehaveselfintersection_pkey PRIMARY KEY (id) -); - -CREATE TABLE pgh_consistency.pghft_drainagelineisdisconnected -( - id bigint NOT NULL, - drn_pk integer, - editor bigint, - cn11_gm geometry(MultiLineString), - CONSTRAINT pghft_drainagelineisdisconnected_pkey PRIMARY KEY (id) -); - -CREATE TABLE pgh_consistency.pghft_drainagelineisnotsimple -( - id bigint NOT NULL, - drn_pk integer, - editor bigint, - cn12_gm geometry(MultiLineString), - CONSTRAINT pghft_drainagelineisnotsimple_pkey PRIMARY KEY (id) -); - -CREATE TABLE pgh_consistency.pghft_drainagelineisnotsingle -( - id bigint NOT NULL, - drn_pk integer, - editor bigint, - cn13_gm geometry(MultiLineString), - CONSTRAINT pghft_drainagelineisnotsingle_pkey PRIMARY KEY (id) -); - -CREATE TABLE pgh_consistency.pghft_drainagelineisnotvalid -( - id bigint NOT NULL, - drn_pk integer, - editor bigint, - cn14_gm geometry(MultiLineString), - CONSTRAINT pghft_drainagelineisnotvalid_pkey PRIMARY KEY (id) -); - -CREATE TABLE pgh_consistency.pghft_drainagelineisnotvalidpoint -( - id bigint NOT NULL, - drn_pk integer, - editor bigint, - cn15_gm_point geometry(MultiLineString), - CONSTRAINT pghft_drainagelineisnotvalidpoint_pkey PRIMARY KEY (id) -); - -CREATE TABLE pgh_consistency.pghft_drainagelineloops -( - id bigint NOT NULL, - plg_pk integer, - editor bigint, - cn16_gm geometry(MultiPolygon), - area numeric, - CONSTRAINT pghft_drainagelineloops_pkey PRIMARY KEY (id) -); - -CREATE TABLE pgh_consistency.pghft_drainagelinemoreonedrainagearea -( - id bigint NOT NULL, - drn_pk integer, - editor bigint, - cn17_gm geometry(MultiLineString), - CONSTRAINT pghft_drainagelinemoreonedrainagearea_pkey PRIMARY KEY (id) -); - -CREATE TABLE pgh_consistency.pghft_drainagelinenodrainagearea -( - id bigint NOT NULL, - drn_pk integer, - editor bigint, - cn18_gm geometry(MultiLineString), - CONSTRAINT pghft_drainagelinenodrainagearea_pkey PRIMARY KEY (id) -); - -CREATE TABLE pgh_consistency.pghft_drainagelineoverlapdrainageline -( - id bigint NOT NULL, - drn_pk integer, - editor bigint, - cn19_gm geometry(MultiLineString), - CONSTRAINT pghft_drainagelineoverlapdrainageline_pkey PRIMARY KEY (id) -); - -CREATE TABLE pgh_consistency.pghft_drainagelinetouchdrainageline -( - id bigint NOT NULL, - drn_pk integer, - editor bigint, - cn20_gm geometry(MultiLineString), - CONSTRAINT pghft_drainagelinetouchdrainageline_pkey PRIMARY KEY (id) -); - -CREATE TABLE pgh_consistency.pghft_drainagelinewithindrainageline -( - id bigint NOT NULL, - drn_pk integer, - editor bigint, - cn21_gm geometry(MultiLineString), - CONSTRAINT pghft_drainagelinewithindrainageline_pkey PRIMARY KEY (id) -); - -CREATE TABLE pgh_consistency.pghft_pointvalencevalue2 -( - id bigint NOT NULL, - drp_pk integer, - editor bigint, - cn22_gm geometry(MultiPoint), - CONSTRAINT pghft_pointvalencevalue2_pkey PRIMARY KEY (id) -); - -CREATE TABLE pgh_consistency.pghft_pointvalencevalue4 -( - id bigint NOT NULL, - drp_pk integer, - editor bigint, - cn23_gm geometry(MultiPoint), - CONSTRAINT pghft_pointvalencevalue4_pkey PRIMARY KEY (id) -); - -CREATE TABLE pgh_consistency.pghft_pointdivergent -( - id bigint NOT NULL, - drp_pk integer, - editor bigint, - cn24_gm geometry(MultiPoint), - CONSTRAINT pghft_pointdivergent_pkey PRIMARY KEY (id) -); - -------------------------------------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_SplitDrainagelineMultipoint(input_geom geometry, blade geometry) -------------------------------------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_SplitDrainagelineMultipoint(input_geom geometry, blade geometry) - RETURNS geometry AS -$$ - -- this function is a wrapper around the function ST_Split - -- to allow splitting multilines with multipoints - -- - DECLARE - result geometry; - simple_blade geometry; - blade_geometry_type text := GeometryType(blade); - geom_geometry_type text := GeometryType(input_geom); - BEGIN - IF blade_geometry_type NOT ILIKE 'MULTI%' THEN - RETURN ST_Split(input_geom, blade); - ELSIF blade_geometry_type NOT ILIKE '%POINT' THEN - RAISE NOTICE 'Need a Point/MultiPoint blade'; - RETURN NULL; - END IF; - - IF geom_geometry_type NOT ILIKE '%LINESTRING' THEN - RAISE NOTICE 'Need a LineString/MultiLineString input_geom'; - RETURN NULL; - END IF; - - result := input_geom; - -- Loop on all the points in the blade - FOR simple_blade IN SELECT (ST_Dump(ST_CollectionExtract(blade, 1))).geom - LOOP - -- keep splitting the previous result - result := ST_CollectionExtract(ST_Split(result, simple_blade), 2); - END LOOP; - RETURN result; - END; -$$ -LANGUAGE PLPGSQL; - ---------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_MakeSnapToGridDrainageLine(numeric) ---------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_MakeSnapToGridDrainageLine(numeric) -RETURNS character varying AS -$$ -BEGIN - -UPDATE pghydro.pghft_drainage_line -SET drn_gm = ST_SNAPTOGRID(drn_gm, $1); - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_MakeSnapToGridDrainageLine(0.000000000001); - -------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_RemoveReapetedPointsDrainageLine() -------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_RemoveReapetedPointsDrainageLine() -RETURNS character varying AS -$$ -BEGIN - -UPDATE pghydro.pghft_drainage_line -SET drn_gm = ST_RemoveRepeatedPoints(drn_gm); - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_RemoveReapetedPointsDrainageLine(); - -------------------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_CreateDrainageLineVertexIntersections(numeric) -------------------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_CreateDrainageLineVertexIntersections(numeric) -RETURNS character varying AS -$$ -DECLARE - -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - ---Create Vertex on intersection lines - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_gm_idx; - -CREATE INDEX drn_gm_idx ON pghydro.pghft_drainage_line USING GIST(drn_gm); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -UPDATE pghydro.pghft_drainage_line drn -SET drn_gm = ST_MULTI(ST_SNAP(drn.drn_gm, a.drp_gm, $1)) -FROM -( -SELECT drn_pk_a, ST_MULTI(ST_UNION(drp_gm)) as drp_gm -FROM -( -SELECT a.drn_pk as drn_pk_a, b.drn_pk as drn_pk_b, ST_INTERSECTION(a.drn_gm, b.drn_gm) as drp_gm --row_number() over() -FROM pghydro.pghft_drainage_line AS a, pghydro.pghft_drainage_line AS b -WHERE (a.drn_gm && b.drn_gm) -AND -ST_Relate(a.drn_gm, b.drn_gm) IN ( ---TOUCH -'F01FF0102', -'F010F0102', ---'FF1F00102', -'F01FF01F2', -'F010F01F2', -'F01F001F2', -'F010FF1F2', ---'FF1F0F1F2', -'F0100F1F2', ---CROSS -'0F1FF0102', -'0010F0102', -'0F1F00102', -'001FF0102', -'0010F01F2', -'001F001F2', -'001FF01F2', -'0F1F0F1F2', -'00100F1F2', -'0010FF1F2' -) -) as a -GROUP BY drn_pk_a -) as a -WHERE a.drn_pk_a = drn.drn_pk; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_gm_idx; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_CreateDrainageLineVertexIntersections(0.000000000001); - ----------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_BreakDrainageLine() ----------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_BreakDrainageLine() -RETURNS character varying AS -$$ -DECLARE - -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - ---Break Lines - -DROP INDEX IF EXISTS pghydro.drn_gm_idx; - -CREATE INDEX drn_gm_idx ON pghydro.pghft_drainage_line USING GIST(drn_gm); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -UPDATE pghydro.pghft_drainage_line drn -SET drn_gm = pgh_consistency.pghfn_SplitDrainagelineMultipoint(drn.drn_gm, a.drp_gm) -FROM -( -SELECT drn_pk_a, ST_MULTI(ST_UNION(drp_gm)) as drp_gm -FROM -( -SELECT a.drn_pk as drn_pk_a, b.drn_pk as drn_pk_b, ST_INTERSECTION(a.drn_gm, b.drn_gm) as drp_gm --row_number() over() -FROM pghydro.pghft_drainage_line AS a, pghydro.pghft_drainage_line AS b -WHERE (a.drn_gm && b.drn_gm) -AND -( -ST_Relate(a.drn_gm, b.drn_gm) IN ( ---TOUCH -'F01FF0102', -'F010F0102', ---'FF1F00102', -'F01FF01F2', -'F010F01F2', -'F01F001F2', -'F010FF1F2', ---'FF1F0F1F2', -'F0100F1F2', ---CROSS -'0F1FF0102', -'0010F0102', -'0F1F00102', -'001FF0102', -'0010F01F2', -'001F001F2', -'001FF01F2', -'0F1F0F1F2', -'00100F1F2', -'0010FF1F2' -) -) -) as a -GROUP BY drn_pk_a -) as a -WHERE a.drn_pk_a = drn.drn_pk; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_gm_idx; - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_BreakDrainageLine(); - ---SELECT pgh_consistency.pghfn_ExplodeDrainageLine(); - --------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_MakeSnapToGridDrainageArea(numeric) --------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_MakeSnapToGridDrainageArea(numeric) -RETURNS character varying AS -$$ -BEGIN - -UPDATE pghydro.pghft_drainage_area -SET dra_gm = ST_SNAPTOGRID(dra_gm, $1); - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_MakeSnapToGridDrainageArea(numeric); - -------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_RemoveReapetedPointsDrainageArea() -------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_RemoveReapetedPointsDrainageArea() -RETURNS character varying AS -$$ -BEGIN - -UPDATE pghydro.pghft_drainage_area -SET dra_gm = ST_RemoveRepeatedPoints(dra_gm); - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_RemoveReapetedPointsDrainageArea(); - ---------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_MakeDrainageAreaSimple() ---------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_MakeDrainageAreaSimple() -RETURNS character varying AS -$$ -BEGIN - -UPDATE pghydro.pghft_drainage_area -SET dra_gm = st_multi(st_buildarea(st_union(st_multi(st_boundary(dra_gm)),st_pointn(st_boundary(dra_gm),1)))) -WHERE ST_IsSimple(dra_gm) = 'f'; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_MakeDrainageAreaSimple(); - --------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_MakeDrainageAreaValid() --------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_MakeDrainageAreaValid() -RETURNS character varying AS -$$ -BEGIN - -UPDATE pghydro.pghft_drainage_area -SET dra_gm = ST_CollectionExtract(ST_MakeValid(dra_gm),3) -WHERE ST_IsValid(dra_gm) = false; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_MakeDrainageAreaValid(); - ------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_RemoveDrainageAreaInteriorRings() ------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_RemoveDrainageAreaInteriorRings() -RETURNS character varying AS -$$ -BEGIN - -UPDATE pghydro.pghft_drainage_area -SET dra_gm = ST_Multi(ST_MakePolygon(ST_ExteriorRing((ST_Dump(dra_gm)).geom))) -WHERE ST_NumInteriorRings(dra_gm) > 0; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_RemoveDrainageAreaInteriorRings(); - --------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_RemoveWatershedInteriorRings() --------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_RemoveWatershedInteriorRings() -RETURNS character varying AS -$$ -BEGIN - -UPDATE pghydro.pghft_watershed -SET wts_gm = ST_Multi(ST_MakePolygon(ST_ExteriorRing((ST_Dump(wts_gm)).geom))) -WHERE ST_NumInteriorRings(wts_gm) > 0; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_RemoveWatershedInteriorRings(); - ------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_ExplodeDrainageArea() ------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_ExplodeDrainageArea() -RETURNS varchar AS -$$ -DECLARE - -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -DROP INDEX IF EXISTS pghydro.sqc; - -CREATE SEQUENCE pghydro.sqc; - -PERFORM setval(('pghydro.sqc'::text)::regclass, a.nextval::bigint, false) -FROM -( -SELECT max(dra_pk)+1 as nextval -FROM pghydro.pghft_drainage_area -) as a; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -DROP TABLE IF EXISTS pghydro.pghft_drainage_area_temp; - -CREATE TABLE pghydro.pghft_drainage_area_temp -AS SELECT dra_gm -FROM -( -SELECT (ST_Dump(dra_gm)).geom AS dra_gm -FROM -( - -SELECT (pghfn_DrainageAreaIsNotSingle).dra_gm_ as dra_gm -FROM pgh_consistency.pghfn_DrainageAreaIsNotSingle() - -) as b -) as a; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -ALTER TABLE pghydro.pghft_drainage_area_temp -ADD COLUMN dra_pk INTEGER PRIMARY KEY DEFAULT nextval('pghydro.sqc'); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -DROP INDEX IF EXISTS pghydro.dra_pk_idx; - -CREATE INDEX dra_pk_idx ON pghydro.pghft_drainage_area(dra_pk); - -DELETE FROM pghydro.pghft_drainage_area -WHERE dra_pk in -( -SELECT dra_pk -FROM -( - -SELECT (pghfn_DrainageAreaIsNotSingle).dra_pk_ as dra_pk -FROM pgh_consistency.pghfn_DrainageAreaIsNotSingle() - -) as b -); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -INSERT INTO pghydro.pghft_drainage_area (dra_pk, dra_gm) -SELECT dra_pk, ST_Multi(dra_gm) -FROM pghydro.pghft_drainage_area_temp; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -DROP TABLE IF EXISTS pghydro.pghft_drainage_area_temp; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - -DROP SEQUENCE IF EXISTS pghydro.sqc; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; - -DROP INDEX IF EXISTS pghydro.dra_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_ExplodeDrainageArea(); - ------------------------------------------------------------------ ---FUNCTION pgh_consistency.pghfn_RemoveInteriorRingDrainageArea() ------------------------------------------------------------------ - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_RemoveInteriorRingDrainageArea() -RETURNS character varying AS -$$ -BEGIN - -UPDATE pghydro.pghft_drainage_area -SET dra_gm = ST_Multi(ST_MakePolygon(ST_ExteriorRing((ST_Dump(dra_gm)).geom))); - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_RemoveInteriorRingDrainageArea(); - ----------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_DrainageLineIsNotSingle() ----------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineIsNotSingle() -RETURNS TABLE(drn_pk_ integer, drn_nm_ character varying, drn_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT drn_pk, drn_nm, drn_gm -FROM pghydro.pghft_drainage_line -WHERE ST_NumGeometries(drn_gm) > 1; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - - -------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numDrainageLineIsNotSingle() -------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineIsNotSingle() -RETURNS bigint AS -$$ -SELECT count(drn_pk) -FROM -( -SELECT (pghfn_DrainageLineIsNotSingle).drn_pk_ as drn_pk -FROM pgh_consistency.pghfn_DrainageLineIsNotSingle() -) as a; -$$ -LANGUAGE SQL; - - ------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_ExplodeDrainageLine() ------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_ExplodeDrainageLine() -RETURNS varchar AS -$$ -DECLARE - -time_ timestamp; - -BEGIN - -DROP SEQUENCE IF EXISTS pghydro.sqc; - -CREATE SEQUENCE pghydro.sqc; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -PERFORM setval(('pghydro.sqc'::text)::regclass, a.nextval::bigint, false) -FROM -( -SELECT max(drn_pk)+1 as nextval -FROM pghydro.pghft_drainage_line -) as a; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_gm_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -DROP TABLE IF EXISTS pghydro.pghft_drainage_line_temp; - -CREATE TABLE pghydro.pghft_drainage_line_temp -AS SELECT drn_nm, drn_gm -FROM -( -SELECT drn_nm, (ST_Dump(drn_gm)).geom AS drn_gm -FROM -( -SELECT (pghfn_DrainageLineIsNotSingle).drn_nm_ as drn_nm, (pghfn_DrainageLineIsNotSingle).drn_gm_ as drn_gm -FROM pgh_consistency.pghfn_DrainageLineIsNotSingle() -) as b -) as a; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -ALTER TABLE pghydro.pghft_drainage_line_temp -ADD COLUMN drn_pk INTEGER PRIMARY KEY DEFAULT nextval('pghydro.sqc'); - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -DELETE FROM pghydro.pghft_drainage_line -WHERE drn_pk in -( -SELECT drn_pk -FROM -( -SELECT (pghfn_DrainageLineIsNotSingle).drn_pk_ as drn_pk -FROM pgh_consistency.pghfn_DrainageLineIsNotSingle() -) as b -); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -INSERT INTO pghydro.pghft_drainage_line (drn_pk, drn_nm, drn_gm) -SELECT drn_pk, drn_nm, ST_Multi(drn_gm) -FROM pghydro.pghft_drainage_line_temp; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - -DROP TABLE pghydro.pghft_drainage_line_temp; - -DROP SEQUENCE pghydro.sqc; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; - -PERFORM setval(('pghydro.drn_pk_seq'::text)::regclass, a.nextval::bigint, false) -FROM -( -SELECT max(drn_pk)+1 as nextval -FROM pghydro.pghft_drainage_line -) as a; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ----------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_DrainageLineIsNotSimple() ----------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineIsNotSimple() -RETURNS TABLE(drn_pk_ integer, drn_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT drn_pk, drn_gm -FROM pghydro.pghft_drainage_line -WHERE ST_IsSimple(drn_gm) <> 't'; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - -------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numDrainageLineIsNotSimple() -------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineIsNotSimple() -RETURNS bigint AS -$$ -SELECT count(drn_pk) -FROM -( -SELECT (pghfn_DrainageLineIsNotSimple).drn_pk_ as drn_pk -FROM pgh_consistency.pghfn_DrainageLineIsNotSimple() -) as a; -$$ -LANGUAGE SQL; - ---------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_MakeDrainageLineSimple() ---------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_MakeDrainageLineSimple() -RETURNS character varying AS -$$ -BEGIN - -UPDATE pghydro.pghft_drainage_line drn -SET drn_gm = st_multi(st_union(drn.drn_gm,st_pointN(st_geometryN(drn.drn_gm, 1), 1))) -FROM -( -SELECT (pghfn_DrainageLineIsNotSimple).drn_pk_ as drn_pk -FROM pgh_consistency.pghfn_DrainageLineIsNotSimple() -) as a -WHERE a.drn_pk = drn.drn_pk; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_MakeDrainageLineSimple(); - ---------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_DrainageLineIsNotValid() ---------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineIsNotValid() -RETURNS TABLE(drn_pk_ integer, drn_gm_ geometry, drn_gm_point_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT drn_pk, drn_gm, location(ST_IsValidDetail(drn_gm)) as drn_gm_point -FROM pghydro.pghft_drainage_line -WHERE ST_IsValidReason(drn_gm) <> 'Valid Geometry'; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - - ------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numDrainageLineIsNotValid() ------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineIsNotValid() -RETURNS bigint AS -$$ -SELECT count(drn_pk) -FROM -( -SELECT (pghfn_DrainageLineIsNotValid).drn_pk_ as drn_pk -FROM pgh_consistency.pghfn_DrainageLineIsNotValid() -) as a; -$$ -LANGUAGE SQL; - - --------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_MakeDrainageLineValid() --------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_MakeDrainageLineValid() -RETURNS character varying AS -$$ -BEGIN - -UPDATE pghydro.pghft_drainage_line drn -SET drn_gm = ST_CollectionExtract(ST_MakeValid(drn.drn_gm),2) -FROM -( -SELECT (pghfn_DrainageLineIsNotValid).drn_pk_ as drn_pk -FROM pgh_consistency.pghfn_DrainageLineIsNotValid() -) as a -WHERE a.drn_pk = drn.drn_pk; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_MakeDrainageLineValid(); - -------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_DrainageLineHaveSelfIntersection() -------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineHaveSelfIntersection() -RETURNS TABLE(drn_pk_ integer, drn_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT drn_pk, drn_gm -FROM -( -WITH auto_intersect AS ( -SELECT a.drn_pk as drn_pk_a, b.drn_pk as drn_pk_b, a.drn_gm as drn_gm_a, b.drn_gm as drn_gm_b -FROM pghydro.pghft_drainage_line AS a, pghydro.pghft_drainage_line AS b -WHERE (a.drn_gm && b.drn_gm) -AND -ST_Relate(a.drn_gm, b.drn_gm) IN ( ---TOUCH -'F01FF0102', -'F010F0102', ---'FF1F00102', -'F01FF01F2', -'F010F01F2', -'F01F001F2', -'F010FF1F2', ---'FF1F0F1F2', -'F0100F1F2', ---CROSS -'0F1FF0102', -'0010F0102', -'0F1F00102', -'001FF0102', -'0010F01F2', -'001F001F2', -'001FF01F2', -'0F1F0F1F2', -'00100F1F2', -'0010FF1F2', ---OVERLAP -'1F1FF0102', -'1010F0102', -'1F1F00102', -'1F10F0102', -'1010FF102', -'1F100F102', -'1F10FF102', -'1F1F0F1F2', -'10100F1F2', -'1010FF1F2', ---WITHIN -'1FF00F102', -'1FF0FF102' ---'1FFF0FFF2' -) -) -SELECT drn_pk_a as drn_pk, drn_gm_a as drn_gm -FROM auto_intersect aut -UNION ALL -SELECT drn_pk_b as drn_pk, drn_gm_b as drn_gm -FROM auto_intersect aut -) as a; - - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_DrainageLineHaveSelfIntersection() - ----------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numDrainageLineHaveSelfIntersection() ----------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineHaveSelfIntersection() -RETURNS bigint AS -$$ -SELECT count(drn_pk) -FROM -( -SELECT (pghfn_DrainageLineHaveSelfIntersection).drn_pk_ as drn_pk -FROM pgh_consistency.pghfn_DrainageLineHaveSelfIntersection() -) as a; -$$ -LANGUAGE SQL; - - ---SELECT pgh_consistency.pghfn_numDrainageLineHaveSelfIntersection(); - ------------------------------------------------------------------ ---FUNCTION pgh_consistency.pghfn_DrainageLineWithinDrainageLine() ------------------------------------------------------------------ - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineWithinDrainageLine() -RETURNS TABLE(drn_pk_ integer, drn_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT a.drn_pk, a.drn_gm -FROM pghydro.pghft_drainage_line a, pghydro.pghft_drainage_line b -WHERE ST_RELATE(a.drn_gm, b.drn_gm) IN -( -'1FF00F102', -'1FF0FF102' ---'1FFF0FFF2' -) -AND (a.drn_gm && b.drn_gm) - -UNION ALL - -SELECT a.drn_pk, a.drn_gm -FROM pghydro.pghft_drainage_line a, pghydro.pghft_drainage_line b -WHERE ST_RELATE(a.drn_gm, b.drn_gm) IN -( ---'1FF00F102', ---'1FF0FF102', -'1FFF0FFF2' -) -AND (a.drn_gm && b.drn_gm) -AND a.drn_pk <> b.drn_pk -AND a.drn_pk < b.drn_pk; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_DrainageLineWithinDrainageLine() - --------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numDrainageLineWithinDrainageLine() --------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineWithinDrainageLine() -RETURNS bigint AS -$$ -SELECT count(drn_pk) -FROM -( -SELECT (pghfn_DrainageLineWithinDrainageLine).drn_pk_ as drn_pk -FROM pgh_consistency.pghfn_DrainageLineWithinDrainageLine() -) as b; -$$ -LANGUAGE SQL; - - ------------------------------------------------------------------------ ---FUNCTION pgh_consistency.pghfn_DeleteDrainageLineWithinDrainageLine() ------------------------------------------------------------------------ - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DeleteDrainageLineWithinDrainageLine() -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -DELETE FROM pghydro.pghft_drainage_line -WHERE drn_pk IN -( -SELECT drn_pk -FROM pgh_consistency.pghft_drainagelinewithindrainageline -); - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_DeleteDrainageLineWithinDrainageLine(); - ----------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_DrainageLineLoops() ----------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineLoops() -RETURNS TABLE(plg_pk_ integer, plg_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - - -SELECT (ROW_NUMBER() OVER ())::integer AS plg_pk, clp_gm as plg_gm -FROM -( -SELECT drn_pk, ST_MULTI((ST_Dump(b.plg_gm)).geom) as clp_gm -FROM -( -SELECT max(drn_pk) as drn_pk, ST_Polygonize(drn_gm) as plg_gm -FROM -( -SELECT drn_pk, (st_dump(drn_gm)).geom AS drn_gm -FROM pghydro.pghft_drainage_line -) as a -) as b -) as c; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - - --------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numDrainageLineLoops() --------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineLoops() -RETURNS bigint AS -$$ -SELECT count(plg_pk) -FROM -( -SELECT (pghfn_DrainageLineLoops).plg_pk_ as plg_pk -FROM pgh_consistency.pghfn_DrainageLineLoops() -) as c; -$$ -LANGUAGE SQL; - - ----------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_DrainageLineHaveGeometryEmpty() ----------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineHaveGeometryEmpty() -RETURNS TABLE(drn_pk_ integer, drn_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT drn_pk, drn_gm -FROM pghydro.pghft_drainage_line -WHERE drn_gm is null -OR ST_IsEmpty(drn_gm) = true -OR ST_length(drn_gm) = 0; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - - ---SELECT pgh_consistency.pghfn_DrainageLineHaveGeometryEmpty() - -------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numDrainageLineHaveGeometryEmpty() -------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineHaveGeometryEmpty() -RETURNS bigint AS -$$ -SELECT count(drn_pk) -FROM -( -SELECT (pghfn_DrainageLineHaveGeometryEmpty).drn_pk_ as drn_pk -FROM pgh_consistency.pghfn_DrainageLineHaveGeometryEmpty() -) as b; -$$ -LANGUAGE SQL; - - ------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_DeleteDrainageLineGeometryEmpty() ------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DeleteDrainageLineGeometryEmpty() -RETURNS character varying AS -$$ -BEGIN - -DELETE FROM pghydro.pghft_drainage_line -WHERE drn_pk in -( -SELECT drn_pk -FROM -( -SELECT (pghfn_DrainageLineHaveGeometryEmpty).drn_pk_ as drn_pk -FROM pgh_consistency.pghfn_DrainageLineHaveGeometryEmpty() -) as b -); - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ------------------------------------------------------ ---FUNCTION pgh_consistency.pghfn_PointValenceValue2() ------------------------------------------------------ - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_PointValenceValue2() -RETURNS TABLE(drp_pk_ integer, drp_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT drp_pk, ST_MULTI(drp_gm) as drp_gm -FROM pghydro.pghft_drainage_point -WHERE drp_nu_valence = 2; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - - --------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numPointValenceValue2() --------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numPointValenceValue2() -RETURNS bigint AS -$$ -SELECT count(drp_pk) -FROM -( -SELECT (pghfn_PointValenceValue2).drp_pk_ as drp_pk -FROM pgh_consistency.pghfn_PointValenceValue2() -) as a; -$$ -LANGUAGE SQL; - - ------------------------------------------------------------ ---FUNCTION pgh_consistency.pghfn_unionDrainageLine(integer) ------------------------------------------------------------ - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_unionDrainageLine(integer) -RETURNS character varying AS -$$ -DECLARE - -time_ timestamp; - -BEGIN - -INSERT INTO pghydro.pghft_drainage_line (drn_gm) -SELECT ST_Multi(ST_LineMerge(ST_Union(a.drn_gm))) as drn_gm -FROM -( -SELECT drn_pk, drn_gm -FROM pghydro.pghft_drainage_line -WHERE drn_drp_pk_targetnode = $1 -OR drn_drp_pk_sourcenode = $1 -) as a; - -DELETE -FROM pghydro.pghft_drainage_line -WHERE drn_pk in -( -SELECT drn_pk -FROM pghydro.pghft_drainage_line -WHERE drn_drp_pk_targetnode = $1 -OR drn_drp_pk_sourcenode = $1 -); - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - - --------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_unionDrainageLine(integer, integer) --------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_unionDrainageLine(integer, integer) -RETURNS character varying AS -$$ -DECLARE - -time_ timestamp; - -BEGIN - -INSERT INTO pghydro.pghft_drainage_line (drn_gm) -SELECT ST_Multi(ST_LineMerge(ST_Union(a.drn_gm))) as drn_gm -FROM -( -SELECT drn_pk, drn_gm -FROM pghydro.pghft_drainage_line -WHERE drn_pk = $1 -OR drn_pk = $2 -) as a; - -DELETE -FROM pghydro.pghft_drainage_line -WHERE drn_pk in -( -SELECT drn_pk -FROM pghydro.pghft_drainage_line -WHERE drn_pk = $1 -OR drn_pk = $2 -); - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - - ------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_unionDrainageLinevalence2() ------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_unionDrainageLinevalence2() -RETURNS varchar AS -$$ -DECLARE - -_r record; -time_ timestamp; -max_pseudo_node integer; -i integer; - -BEGIN - -DROP INDEX IF EXISTS pghydro.drp_pk_idx; - -DROP INDEX IF EXISTS pghydro.drp_nu_valence_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -CREATE INDEX drp_pk_idx ON pghydro.pghft_drainage_point(drp_pk); - -CREATE INDEX drp_nu_valence_idx ON pghydro.pghft_drainage_point(drp_nu_valence); - -CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); - -CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); - -SELECT INTO max_pseudo_node count(drp_pk) FROM pghydro.pghft_drainage_point WHERE drp_nu_valence = 2; - -i := 1; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - - - FOR _r IN SELECT drp_pk FROM pghydro.pghft_drainage_point WHERE drp_nu_valence = 2 - - LOOP - - PERFORM pgh_consistency.pghfn_unionDrainageLine(_r.drp_pk); - - RAISE NOTICE 'PSEUDO-NODE %/%', i, max_pseudo_node; - - i := i + 1; - - END LOOP; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -DROP INDEX IF EXISTS pghydro.drp_pk_idx; - -DROP INDEX IF EXISTS pghydro.drp_nu_valence_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -DELETE FROM pghydro.pghft_drainage_line -WHERE drn_gm is null; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - - ------------------------------------------------------ ---FUNCTION pgh_consistency.pghfn_PointValenceValue4() ------------------------------------------------------ - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_PointValenceValue4() -RETURNS TABLE(drp_pk_ integer, drp_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT drp_pk, ST_MULTI(drp_gm) as drp_gm -FROM pghydro.pghft_drainage_point -WHERE drp_nu_valence = 4; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - - --------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numPointValenceValue4() --------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numPointValenceValue4() -RETURNS bigint AS -$$ -SELECT count(drp_pk) -FROM -( -SELECT (pghfn_PointValenceValue4).drp_pk_ as drp_pk -FROM pgh_consistency.pghfn_PointValenceValue4() -) as a; -$$ -LANGUAGE SQL; - -------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_DrainageLineIsDisconnected() -------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineIsDisconnected() -RETURNS TABLE(drn_pk_ integer, drn_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT drn_pk, drn_gm -FROM pghydro.pghft_drainage_line -WHERE drn_bo_flowdirection is null; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - - ----------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numDrainageLineIsDisconnected() ----------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineIsDisconnected() -RETURNS bigint AS -$$ -SELECT count(drn_pk) -FROM -( -SELECT (pghfn_DrainageLineIsDisconnected).drn_pk_ as drn_pk -FROM pgh_consistency.pghfn_DrainageLineIsDisconnected() -) as a; -$$ -LANGUAGE SQL; - -------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_PointDivergent() -------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_PointDivergent() -RETURNS TABLE(drp_pk_ integer, drp_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT a.drp_pk, ST_MULTI(drp.drp_gm) as drp_gm -FROM -( -SELECT drn_drp_pk_targetnode as drp_pk -FROM -( -SELECT drn_drp_pk_targetnode, count(drn_drp_pk_targetnode) -FROM -( -SELECT drn_drp_pk_targetnode, drn_drp_pk_sourcenode -FROM pghydro.pghft_drainage_line -) as a -GROUP BY drn_drp_pk_targetnode -HAVING count(drn_drp_pk_targetnode) = 1 -) as b, pghydro.pghft_shoreline_ending_point as c -WHERE c.sep_drp_pk <> b.drn_drp_pk_targetnode -) as a, pghydro.pghft_drainage_point drp -WHERE a.drp_pk = drp.drp_pk; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - ----------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numPointDivergent() ----------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numPointDivergent() -RETURNS bigint AS -$$ -SELECT count(drp_pk) -FROM -( -SELECT (pghfn_PointDivergent).drp_pk_ as drp_pk -FROM pgh_consistency.pghfn_PointDivergent() -) as a; -$$ -LANGUAGE SQL; - ----------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_DrainageAreaIsNotSingle() ----------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageAreaIsNotSingle() -RETURNS TABLE(dra_pk_ integer, dra_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT dra_pk, dra_gm -FROM pghydro.pghft_drainage_area -WHERE ST_NumGeometries(dra_gm) > 1; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - - -------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numDrainageAreaIsNotSingle() -------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageAreaIsNotSingle() -RETURNS bigint AS -$$ -SELECT count(dra_pk) -FROM -( -SELECT (pghfn_DrainageAreaIsNotSingle).dra_pk_ as dra_pk -FROM pgh_consistency.pghfn_DrainageAreaIsNotSingle() -) as a; -$$ -LANGUAGE SQL; - - ----------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_DrainageAreaIsNotSimple() ----------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageAreaIsNotSimple() -RETURNS TABLE(dra_pk_ integer, dra_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT dra_pk, dra_gm -FROM pghydro.pghft_drainage_area -WHERE ST_IsSimple(dra_gm) <> 't'; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - - -------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numDrainageAreaIsNotSimple() -------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageAreaIsNotSimple() -RETURNS bigint AS -$$ -SELECT count(dra_pk) -FROM -( -SELECT (pghfn_DrainageAreaIsNotSimple).dra_pk_ as dra_pk -FROM pgh_consistency.pghfn_DrainageAreaIsNotSimple() -) as a; -$$ -LANGUAGE SQL; - - ---------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_DrainageAreaIsNotValid() ---------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageAreaIsNotValid() -RETURNS TABLE(dra_pk_ integer, dra_gm_ geometry, dra_gm_point_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT dra_pk, dra_gm, ST_MULTI(ST_SETSRID(location(ST_IsValidDetail(dra_gm)), ST_SRID(dra_gm))) as dra_gm_point -FROM pghydro.pghft_drainage_area -WHERE ST_IsValidReason(dra_gm) <> 'Valid Geometry'; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - - ------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numDrainageAreaIsNotValid() ------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageAreaIsNotValid() -RETURNS bigint AS -$$ -SELECT count(dra_pk) -FROM -( -SELECT (pghfn_DrainageAreaIsNotValid).dra_pk_ as dra_pk -FROM pgh_consistency.pghfn_DrainageAreaIsNotValid() -) as a; -$$ -LANGUAGE SQL; - - ------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_DrainageAreaOverlapDrainageArea() ------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageAreaOverlapDrainageArea() -RETURNS TABLE(int_pk_ bigint, dra_pk_a_ integer, dra_pk_b_ integer, dra_gm_a_ geometry, dra_gm_b_ geometry, int_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT row_number() over() as int_pk, dra_pk_a, dra_pk_b, dra_gm_a, dra_gm_b, int_gm -FROM -( -SELECT a.dra_pk as dra_pk_a, b.dra_pk as dra_pk_b, a.dra_gm as dra_gm_a, b.dra_gm as dra_gm_b, ST_Multi((ST_Dump(ST_Intersection(a.dra_gm, b.dra_gm))).geom) as int_gm -FROM pghydro.pghft_drainage_area AS a, pghydro.pghft_drainage_area AS b -WHERE (a.dra_gm && b.dra_gm) -AND ST_OVERLAPS(a.dra_gm, b.dra_gm) = true -AND a.dra_pk < b.dra_pk -) as a -WHERE st_geometrytype(int_gm) = 'ST_MultiPolygon'; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_DrainageAreaOverlapDrainageArea(); - ---------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numDrainageAreaOverlapDrainageArea() ---------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageAreaOverlapDrainageArea() -RETURNS bigint AS -$$ -SELECT count(int_pk) -FROM -( -SELECT (pghfn_DrainageAreaOverlapDrainageArea).int_pk_ as int_pk -FROM pgh_consistency.pghfn_DrainageAreaOverlapDrainageArea() -) as a; -$$ -LANGUAGE SQL; - - ---SELECT pgh_consistency.pghfn_numDrainageAreaOverlapDrainageArea(); - ------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_RemoveDrainageAreaOverlap() ------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_RemoveDrainageAreaOverlap() -RETURNS character varying AS -$$ -DECLARE - -_r record; -time_ timestamp; -max_id integer; -i integer; - -BEGIN - -SELECT INTO max_id count(id) FROM pgh_consistency.pghft_drainageareaoverlapdrainagearea; - -i := 1; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - - FOR _r IN SELECT id FROM pgh_consistency.pghft_drainageareaoverlapdrainagearea - - LOOP - - PERFORM pgh_consistency.pghfn_removedrainageareaoverlaps(_r.id::integer); - - RAISE NOTICE 'Overlap %/%', i, max_id; - - i := i + 1; - - END LOOP; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_RemoveDrainageAreaOverlap(); - -------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_RemoveDrainageAreaOverlaps() -------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_removedrainageareaoverlaps(integer) -RETURNS void AS -$$ -DECLARE - -BEGIN - -UPDATE pghydro.pghft_drainage_area dra -SET dra_gm = ST_MULTI(ST_CollectionExtract(ST_Difference(dra.dra_gm, a.dra_gm), 3)) -FROM -( -SELECT dra_pk_a, dra_gm_b as dra_gm -FROM pgh_consistency.pghft_drainageareaoverlapdrainagearea -WHERE id = $1 -) as a -WHERE a.dra_pk_a = dra.dra_pk; - -END; -$$ -LANGUAGE PLPGSQL; - ------------------------------------------------------------------ ---FUNCTION pgh_consistency.pghfn_DrainageAreaWithinDrainageArea() ------------------------------------------------------------------ - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageAreaWithinDrainageArea() -RETURNS TABLE(dra_pk_ integer, dra_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT a.dra_pk, a.dra_gm -FROM pghydro.pghft_drainage_area a, pghydro.pghft_drainage_area b -WHERE ST_RELATE(a.dra_gm, b.dra_gm) IN -( ---WITHIN -'2FF11F212', -'2FF10F212', -'2FF1FF212' ---'2FFF1FFF2' -) -AND (a.dra_gm && b.dra_gm) - -UNION ALL - -SELECT a.dra_pk, a.dra_gm -FROM pghydro.pghft_drainage_area a, pghydro.pghft_drainage_area b -WHERE ST_RELATE(a.dra_gm, b.dra_gm) IN -( ---WITHIN ---'2FF11F212', ---'2FF10F212', ---'2FF1FF212', -'2FFF1FFF2' -) -AND (a.dra_gm && b.dra_gm) -AND a.dra_pk <> b.dra_pk -AND a.dra_pk < b.dra_pk; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - --------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numDrainageAreaWithinDrainageArea() --------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageAreaWithinDrainageArea() -RETURNS bigint AS -$$ -SELECT count(dra_pk) -FROM -( -SELECT (pghfn_DrainageAreaWithinDrainageArea).dra_pk_ as dra_pk -FROM pgh_consistency.pghfn_DrainageAreaWithinDrainageArea() -) as b; -$$ -LANGUAGE SQL; - - ------------------------------------------------------------------------ ---FUNCTION pgh_consistency.pghfn_DeleteDrainageAreaWithinDrainageArea() ------------------------------------------------------------------------ - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DeleteDrainageAreaWithinDrainageArea() -RETURNS character varying AS -$$ -BEGIN - -DELETE FROM pghydro.pghft_drainage_area -WHERE dra_pk IN -( -SELECT dra_pk -FROM pgh_consistency.pghft_drainageareawithindrainagearea -); - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_DeleteDrainageAreaWithinDrainageArea(); - ----------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_DrainageAreaHaveGeometryEmpty() ----------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageAreaHaveGeometryEmpty() -RETURNS TABLE(dra_pk_ integer, dra_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT dra_pk, dra_gm -FROM pghydro.pghft_drainage_area -WHERE dra_gm is null -OR ST_IsEmpty(dra_gm) = true -OR ST_AREA(dra_gm) = 0; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - - -------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numDrainageAreaHaveGeometryEmpty() -------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageAreaHaveGeometryEmpty() -RETURNS bigint AS -$$ -SELECT count(dra_pk) -FROM -( -SELECT (pghfn_DrainageAreaHaveGeometryEmpty).dra_pk_ as dra_pk -FROM pgh_consistency.pghfn_DrainageAreaHaveGeometryEmpty() -) as b; -$$ -LANGUAGE SQL; - - ------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_DeleteDrainageAreaGeometryEmpty() ------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DeleteDrainageAreaGeometryEmpty() -RETURNS character varying AS -$$ -BEGIN - -DELETE FROM pghydro.pghft_drainage_area -WHERE dra_pk in -( -SELECT dra_pk -FROM -( -SELECT (pghfn_DrainageAreaHaveGeometryEmpty).dra_pk_ as dra_pk -FROM pgh_consistency.pghfn_DrainageAreaHaveGeometryEmpty() -) as b -); - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - -------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_DrainageAreaNoDrainageLine() -------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageAreaNoDrainageLine() -RETURNS TABLE(dra_pk_ integer, dra_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT hin.hin_dra_pk as dra_pk, dra.dra_gm as dra_gm -FROM pghydro.pghft_hydro_intel hin, pghydro.pghft_drainage_area dra -WHERE hin.hin_drn_pk isnull -AND hin.hin_dra_pk = dra.dra_pk; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - - ----------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numDrainageAreaNoDrainageLine() ----------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageAreaNoDrainageLine() -RETURNS bigint AS -$$ -SELECT count(dra_pk) -FROM -( -SELECT (pghfn_DrainageAreaNoDrainageLine).dra_pk_ as dra_pk -FROM pgh_consistency.pghfn_DrainageAreaNoDrainageLine() -) as a; -$$ -LANGUAGE SQL; - - -------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_DrainageLineNoDrainageArea() -------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineNoDrainageArea() -RETURNS TABLE(drn_pk_ integer, drn_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT hin.hin_drn_pk as drn_pk, drn.drn_gm as drn_gm -FROM pghydro.pghft_hydro_intel hin, pghydro.pghft_drainage_line drn -WHERE hin.hin_dra_pk isnull -AND hin.hin_drn_pk = drn.drn_pk; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - - ----------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numDrainageLineNoDrainageArea() ----------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineNoDrainageArea() -RETURNS bigint AS -$$ -SELECT count(drn_pk) -FROM -( -SELECT (pghfn_DrainageLineNoDrainageArea).drn_pk_ as drn_pk -FROM pgh_consistency.pghfn_DrainageLineNoDrainageArea() -) as a; -$$ -LANGUAGE SQL; - - ------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_DrainageAreaMoreOneDrainageLine() ------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageAreaMoreOneDrainageLine() -RETURNS TABLE(dra_pk_ integer, dra_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT hin.hin_dra_pk as dra_pk, dra.dra_gm as dra_gm -FROM pghydro.pghft_hydro_intel hin, pghydro.pghft_drainage_area dra -WHERE hin.hin_count_dra_pk >=2 -AND hin.hin_dra_pk = dra.dra_pk; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - - ---------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numDrainageAreaMoreOneDrainageLine() ---------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageAreaMoreOneDrainageLine() -RETURNS bigint -AS -$$ - -SELECT count(dra_pk) -FROM -( -SELECT (pghfn_DrainageAreaMoreOneDrainageLine).dra_pk_ as dra_pk -FROM pgh_consistency.pghfn_DrainageAreaMoreOneDrainageLine() -) as a; - -$$ -LANGUAGE SQL; - - ------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_DrainageLineMoreOneDrainageArea() ------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineMoreOneDrainageArea() -RETURNS TABLE(drn_pk_ integer, drn_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT hin.hin_drn_pk as drn_pk, drn.drn_gm as drn_gm -FROM pghydro.pghft_hydro_intel hin, pghydro.pghft_drainage_line drn -WHERE hin.hin_count_drn_pk >=2 -AND hin.hin_drn_pk = drn.drn_pk; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - - ---------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numDrainageLineMoreOneDrainageArea() ---------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineMoreOneDrainageArea() -RETURNS bigint AS -$$ -SELECT count(drn_pk) -FROM -( -SELECT (pghfn_DrainageLineMoreOneDrainageArea).drn_pk_ as drn_pk -FROM pgh_consistency.pghfn_DrainageLineMoreOneDrainageArea() -) as a; -$$ -LANGUAGE SQL; - - ---------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_FillGapsInDrainageArea() ---------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_FillGapsInDrainageArea() -RETURNS varchar AS -$$ -DECLARE - -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -DROP TABLE IF EXISTS pgh_consistency.temp_union_drainage_area; - -CREATE TABLE pgh_consistency.temp_union_drainage_area as -SELECT ST_MemUnion(dra_gm) as geom -FROM pghydro.pghft_drainage_area; - -INSERT INTO pghydro.pghft_drainage_area(dra_gm) -SELECT ST_MULTI(geom) -FROM -( -SELECT path(ST_DumpRings(st_geometryn(geom,1))), (ST_DumpRings(st_geometryn(geom,1))).geom -FROM pgh_consistency.temp_union_drainage_area -) as a -WHERE a.path[1] > 0; - -DROP TABLE IF EXISTS pgh_consistency.temp_union_drainage_area; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - --------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_UnionDrainageArea(integer, integer) --------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_UnionDrainageArea(integer, integer) -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -INSERT INTO pghydro.pghft_drainage_area (dra_gm) -SELECT ST_Multi(ST_Union(a.dra_gm)) as dra_gm -FROM -( -SELECT dra_pk, dra_gm -FROM pghydro.pghft_drainage_area -WHERE dra_pk = $1 -OR dra_pk = $2 -) as a; - -DELETE -FROM pghydro.pghft_drainage_area -WHERE dra_pk in -( -SELECT dra_pk -FROM pghydro.pghft_drainage_area -WHERE dra_pk = $1 -OR dra_pk = $2 -); - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK - RUN AGAIN THE FUNCTION pghydro.pghfn_AssociationDrainageLine_DrainageArea()'; - -END; -$$ -LANGUAGE PLPGSQL; - - ------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_uniondrainageareanodrainageline() ------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_uniondrainageareanodrainageline() -RETURNS varchar AS -$$ -DECLARE -_r record; -time_ timestamp; -numdrainageareanodrainageline integer; -i integer; - -BEGIN - -PERFORM setval(('pghydro.dra_pk_seq'::text)::regclass, a.nextval, false) -FROM -( -SELECT max(dra_pk)+1 as nextval -FROM pghydro.pghft_drainage_area -) as a; - -DROP INDEX IF EXISTS pghydro.dra_pk_idx; - -DROP INDEX IF EXISTS pghydro.dra_gm_idx; - -CREATE INDEX dra_gm_idx ON pghydro.pghft_drainage_area USING GIST(dra_gm); - -CREATE INDEX dra_pk_idx ON pghydro.pghft_drainage_area(dra_pk); - -SELECT INTO numdrainageareanodrainageline pgh_consistency.pghfn_numdrainageareanodrainageline(); - -i := 1; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - - - FOR _r IN - - WITH a AS - ( - SELECT b.dra_pk, dra.dra_pk as dra_pk_touch, ST_LENGTH(ST_INTERSECTION(b.dra_gm, dra.dra_gm)) as length - FROM - ( - SELECT a.dra_pk, dra.dra_gm - FROM pghydro.pghft_drainage_area dra, (SELECT(pghfn_drainageareanodrainageline).dra_pk_ as dra_pk FROM pgh_consistency.pghfn_drainageareanodrainageline()) as a - WHERE dra.dra_pk = a.dra_pk - ) as b, pghydro.pghft_drainage_area as dra - WHERE ST_TOUCHES(b.dra_gm, dra.dra_gm) - AND (b.dra_gm && dra.dra_gm) - ) - SELECT a.dra_pk, a.dra_pk_touch - FROM a, (SELECT dra_pk, max(length) as max_length FROM a GROUP BY dra_pk) as b - WHERE a.length = max_length - AND a.dra_pk = b.dra_pk - ORDER BY a.dra_pk - - LOOP - - PERFORM pgh_consistency.pghfn_UnionDrainageArea(_r.dra_pk, _r.dra_pk_touch); - - RAISE NOTICE 'DRAINAGE AREA NO DRAINAGE LINE %/%', i, numdrainageareanodrainageline; - - i := i + 1; - - END LOOP; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -DROP INDEX IF EXISTS pghydro.dra_pk_idx; - -DROP INDEX IF EXISTS pghydro.dra_gm_idx; - -DELETE FROM pghydro.pghft_drainage_area -WHERE dra_gm is null; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ------------------------------------------------------------------ ---FUNCTION pgh_consistency.pghfn_DrainageLineTouchDrainageLine() ------------------------------------------------------------------ - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineTouchDrainageLine() -RETURNS TABLE(drn_pk_ integer, drn_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT drn_pk, drn_gm -FROM -( -WITH auto_intersect AS ( -SELECT a.drn_pk as drn_pk_a, b.drn_pk as drn_pk_b, a.drn_gm as drn_gm_a, b.drn_gm as drn_gm_b -FROM pghydro.pghft_drainage_line AS a, pghydro.pghft_drainage_line AS b -WHERE (a.drn_gm && b.drn_gm) -AND -ST_Relate(a.drn_gm, b.drn_gm) IN ( ---TOUCH -'F01FF0102', -'F010F0102', ---'FF1F00102', -'F01FF01F2', -'F010F01F2', -'F01F001F2', -'F010FF1F2', ---'FF1F0F1F2', -'F0100F1F2' -) -) -SELECT drn_pk_a as drn_pk, drn_gm_a as drn_gm -FROM auto_intersect aut -UNION ALL -SELECT drn_pk_b as drn_pk, drn_gm_b as drn_gm -FROM auto_intersect aut -) as a; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_DrainageLineTouchDrainageLine() - --------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numDrainageLineTouchDrainageLine() --------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineTouchDrainageLine() -RETURNS bigint AS -$$ -SELECT count(drn_pk) -FROM -( -SELECT (pghfn_DrainageLineTouchDrainageLine).drn_pk_ as drn_pk -FROM pgh_consistency.pghfn_DrainageLineTouchDrainageLine() -) as b; -$$ -LANGUAGE SQL; - - ---SELECT pgh_consistency.pghfn_numDrainageLineTouchDrainageLine(); - ------------------------------------------------------------------ ---FUNCTION pgh_consistency.pghfn_DrainageLineCrossDrainageLine() ------------------------------------------------------------------ - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineCrossDrainageLine() -RETURNS TABLE(drn_pk_ integer, drn_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT drn_pk, drn_gm -FROM -( -WITH auto_intersect AS ( -SELECT a.drn_pk as drn_pk_a, b.drn_pk as drn_pk_b, a.drn_gm as drn_gm_a, b.drn_gm as drn_gm_b -FROM pghydro.pghft_drainage_line AS a, pghydro.pghft_drainage_line AS b -WHERE (a.drn_gm && b.drn_gm) -AND -ST_Relate(a.drn_gm, b.drn_gm) IN ( ---CROSS -'0F1FF0102', -'0010F0102', -'0F1F00102', -'001FF0102', -'0010F01F2', -'001F001F2', -'001FF01F2', -'0F1F0F1F2', -'00100F1F2', -'0010FF1F2' -) -) -SELECT drn_pk_a as drn_pk, drn_gm_a as drn_gm -FROM auto_intersect aut -) as a; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_DrainageLineCrossDrainageLine() - --------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numDrainageLineCrossDrainageLine() --------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineCrossDrainageLine() -RETURNS bigint AS -$$ -SELECT count(drn_pk) -FROM -( -SELECT (pghfn_DrainageLineCrossDrainageLine).drn_pk_ as drn_pk -FROM pgh_consistency.pghfn_DrainageLineCrossDrainageLine() -) as b; -$$ -LANGUAGE SQL; - - ---SELECT pgh_consistency.pghfn_numDrainageLineCrossDrainageLine(); - ------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_DrainageLineOverlapDrainageLine() ------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineOverlapDrainageLine() -RETURNS TABLE(drn_pk_ integer, drn_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT drn_pk, drn_gm -FROM -( -WITH auto_intersect AS ( -SELECT a.drn_pk as drn_pk_a, b.drn_pk as drn_pk_b, a.drn_gm as drn_gm_a, b.drn_gm as drn_gm_b -FROM pghydro.pghft_drainage_line AS a, pghydro.pghft_drainage_line AS b -WHERE (a.drn_gm && b.drn_gm) -AND -ST_Relate(a.drn_gm, b.drn_gm) IN ( ---OVERLAP -'1F1FF0102', -'1010F0102', -'1F1F00102', -'1F10F0102', -'1010FF102', -'1F100F102', -'1F10FF102', -'1F1F0F1F2', -'10100F1F2', -'1010FF1F2' -) -) -SELECT drn_pk_a as drn_pk, drn_gm_a as drn_gm -FROM auto_intersect aut -) as a; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_DrainageLineOverlapDrainageLine() - ---------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numDrainageLineOverlapDrainageLine() ---------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineOverlapDrainageLine() -RETURNS bigint AS -$$ -SELECT count(drn_pk) -FROM -( -SELECT (pghfn_DrainageLineOverlapDrainageLine).drn_pk_ as drn_pk -FROM pgh_consistency.pghfn_DrainageLineOverlapDrainageLine() -) as b; -$$ -LANGUAGE SQL; - ---SELECT pgh_consistency.pghfn_numDrainageLineOverlapDrainageLine(); - ------------------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_UpdateDrainageLineConsistencyGeometryTables() ------------------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_UpdateDrainageLineConsistencyGeometryTables() -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - ---TABLE pgh_consistency.pghft_DrainageLineIsNotSingle - -TRUNCATE pgh_consistency.pghft_DrainageLineIsNotSingle; - -INSERT INTO pgh_consistency.pghft_DrainageLineIsNotSingle -SELECT row_number() OVER () as id, (pghfn_DrainageLineIsNotSingle).drn_pk_ as drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageLineIsNotSingle).drn_gm_ as drn_gm -FROM pgh_consistency.pghfn_DrainageLineIsNotSingle(); - ---TABLE pgh_consistency.pghft_DrainageLineIsNotSimple - -TRUNCATE pgh_consistency.pghft_DrainageLineIsNotSimple; - -INSERT INTO pgh_consistency.pghft_DrainageLineIsNotSimple -SELECT row_number() OVER () as id, (pghfn_DrainageLineIsNotSimple).drn_pk_ as drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageLineIsNotSimple).drn_gm_ as drn_gm -FROM pgh_consistency.pghfn_DrainageLineIsNotSimple(); - ---TABLE pgh_consistency.pghft_DrainageLineIsNotValid - -TRUNCATE pgh_consistency.pghft_DrainageLineIsNotValid; - -INSERT INTO pgh_consistency.pghft_DrainageLineIsNotValid -SELECT row_number() OVER () as id, (pghfn_DrainageLineIsNotValid).drn_pk_ as drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageLineIsNotValid).drn_gm_ as drn_gm -FROM pgh_consistency.pghfn_DrainageLineIsNotValid(); - ---TABLE pgh_consistency.pghft_DrainageLineIsNotValidPoint - -TRUNCATE pgh_consistency.pghft_DrainageLineIsNotValidPoint; - -INSERT INTO pgh_consistency.pghft_DrainageLineIsNotValidPoint -SELECT row_number() OVER () as id, (pghfn_DrainageLineIsNotValid).drn_pk_ as drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageLineIsNotValid).drn_gm_point_ as drn_gm_point -FROM pgh_consistency.pghfn_DrainageLineIsNotValid(); - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_UpdateDrainageLineConsistencyGeometryTables(); - ----------------------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_UpdateDrainageLineConsistencyTopologyTables_1() ----------------------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_UpdateDrainageLineConsistencyTopologyTables_1() -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -/* ---TABLE pgh_consistency.pghft_DrainageLineHaveSelfIntersection - -TRUNCATE pgh_consistency.pghft_DrainageLineHaveSelfIntersection; - -INSERT INTO pgh_consistency.pghft_DrainageLineHaveSelfIntersection -SELECT row_number() OVER () as id, (pghfn_DrainageLineHaveSelfIntersection).drn_pk_ as drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageLineHaveSelfIntersection).drn_gm_ as drn_gm -FROM pgh_consistency.pghfn_DrainageLineHaveSelfIntersection(); -*/ - ---TABLE pgh_consistency.pghft_DrainageLineWithinDrainageLine - -TRUNCATE pgh_consistency.pghft_DrainageLineWithinDrainageLine; - -INSERT INTO pgh_consistency.pghft_DrainageLineWithinDrainageLine -SELECT row_number() OVER () as id, (pghfn_DrainageLineWithinDrainageLine).drn_pk_ as drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageLineWithinDrainageLine).drn_gm_ as drn_gm -FROM pgh_consistency.pghfn_DrainageLineWithinDrainageLine(); - ---TABLE pgh_consistency.pghft_DrainageLineOverlapDrainageLine - -TRUNCATE pgh_consistency.pghft_DrainageLineOverlapDrainageLine; - -INSERT INTO pgh_consistency.pghft_DrainageLineOverlapDrainageLine -SELECT row_number() OVER () as id, (pghfn_DrainageLineOverlapDrainageLine).drn_pk_ as drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageLineOverlapDrainageLine).drn_gm_ as drn_gm -FROM pgh_consistency.pghfn_DrainageLineOverlapDrainageLine(); - ---TABLE pgh_consistency.pghft_DrainageLineLoops - -TRUNCATE pgh_consistency.pghft_DrainageLineLoops; - -INSERT INTO pgh_consistency.pghft_DrainageLineLoops -SELECT row_number() OVER () as id, (pghfn_DrainageLineLoops).plg_pk_ as plg_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageLineLoops).plg_gm_ as plg_gm, ST_AREA((pghfn_DrainageLineLoops).plg_gm_) as area -FROM pgh_consistency.pghfn_DrainageLineLoops(); - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_UpdateDrainageLineConsistencyTopologyTables_1(); - --------------------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_UpdateDrainageLineConsistencyTopologyTables_2() --------------------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_UpdateDrainageLineConsistencyTopologyTables_2() -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - ---TABLE pgh_consistency.pghft_DrainageLineCrossDrainageLine - -TRUNCATE pgh_consistency.pghft_DrainageLineCrossDrainageLine; - -INSERT INTO pgh_consistency.pghft_DrainageLineCrossDrainageLine -SELECT row_number() OVER () as id, (pghfn_DrainageLineCrossDrainageLine).drn_pk_ as drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageLineCrossDrainageLine).drn_gm_ as drn_gm -FROM pgh_consistency.pghfn_DrainageLineCrossDrainageLine(); - ---TABLE pgh_consistency.pghft_DrainageLineTouchDrainageLine - -TRUNCATE pgh_consistency.pghft_DrainageLineTouchDrainageLine; - -INSERT INTO pgh_consistency.pghft_DrainageLineTouchDrainageLine -SELECT row_number() OVER () as id, (pghfn_DrainageLineTouchDrainageLine).drn_pk_ as drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageLineTouchDrainageLine).drn_gm_ as drn_gm -FROM pgh_consistency.pghfn_DrainageLineTouchDrainageLine(); - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_UpdateDrainageLineConsistencyTopologyTables_2(); - ------------------------------------------------------------------------------ ---FUNCTION pgh_consistency.pghfn_UpdateDrainageLineNetworkConsistencyTables() ------------------------------------------------------------------------------ - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_UpdateDrainageLineNetworkConsistencyTables() -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - ---TABLE pgh_consistency.pghft_PointValenceValue2 - -TRUNCATE pgh_consistency.pghft_PointValenceValue2; - -INSERT INTO pgh_consistency.pghft_PointValenceValue2 -SELECT row_number() OVER () as id, (pghfn_PointValenceValue2).drp_pk_ as drp_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_PointValenceValue2).drp_gm_ as drp_gm -FROM pgh_consistency.pghfn_PointValenceValue2(); - ---TABLE pgh_consistency.pghft_PointValenceValue4 - -TRUNCATE pgh_consistency.pghft_PointValenceValue4; - -INSERT INTO pgh_consistency.pghft_PointValenceValue4 -SELECT row_number() OVER () as id, (pghfn_PointValenceValue4).drp_pk_ as drp_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_PointValenceValue4).drp_gm_ as drp_gm -FROM pgh_consistency.pghfn_PointValenceValue4(); - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -END; -$$ -LANGUAGE PLPGSQL; - --------------------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_UpdateDrainageLineConnectionConsistencyTables() --------------------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_UpdateDrainageLineConnectionConsistencyTables() -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - ---TABLE pgh_consistency.pghft_DrainageLineIsDisconnected() - -TRUNCATE pgh_consistency.pghft_DrainageLineIsDisconnected; - -INSERT INTO pgh_consistency.pghft_DrainageLineIsDisconnected -SELECT row_number() OVER () as id, (pghfn_DrainageLineIsDisconnected).drn_pk_ as drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageLineIsDisconnected).drn_gm_ as drn_gm -FROM pgh_consistency.pghfn_DrainageLineIsDisconnected(); - ---TABLE pgh_consistency.pghft_pointdivergent - -TRUNCATE pgh_consistency.pghft_pointdivergent; - -INSERT INTO pgh_consistency.pghft_pointdivergent -SELECT row_number() OVER () as id, (pghfn_PointDivergent).drp_pk_ as drp_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_PointDivergent).drp_gm_ as drp_gm -FROM pgh_consistency.pghfn_PointDivergent(); - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -END; -$$ -LANGUAGE PLPGSQL; - ------------------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_UpdateDrainageAreaConsistencyGeometryTables() ------------------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_UpdateDrainageAreaConsistencyGeometryTables() -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - ---TABLE pgh_consistency.pghft_DrainageAreaIsNotSingle - -TRUNCATE pgh_consistency.pghft_DrainageAreaIsNotSingle; - -INSERT INTO pgh_consistency.pghft_DrainageAreaIsNotSingle -SELECT row_number() OVER () as id, (pghfn_DrainageAreaIsNotSingle).dra_pk_ as dra_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageAreaIsNotSingle).dra_gm_ as dra_gm -FROM pgh_consistency.pghfn_DrainageAreaIsNotSingle(); - ---TABLE pgh_consistency.pghft_DrainageAreaIsNotSimple - -TRUNCATE pgh_consistency.pghft_DrainageAreaIsNotSimple; - -INSERT INTO pgh_consistency.pghft_DrainageAreaIsNotSimple -SELECT row_number() OVER () as id, (pghfn_DrainageAreaIsNotSimple).dra_pk_ as dra_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageAreaIsNotSimple).dra_gm_ as dra_gm -FROM pgh_consistency.pghfn_DrainageAreaIsNotSimple(); - ---TABLE pgh_consistency.pghft_DrainageAreaIsNotValid - -TRUNCATE pgh_consistency.pghft_DrainageAreaIsNotValid; - -INSERT INTO pgh_consistency.pghft_DrainageAreaIsNotValid -SELECT row_number() OVER () as id, (pghfn_DrainageAreaIsNotValid).dra_pk_ as dra_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageAreaIsNotValid).dra_gm_ as dra_gm, (pghfn_DrainageAreaIsNotValid).dra_gm_point_ as dra_gm_point -FROM pgh_consistency.pghfn_DrainageAreaIsNotValid(); - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -END; -$$ -LANGUAGE PLPGSQL; - ------------------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_UpdateDrainageAreaConsistencyTopologyTables() ------------------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_UpdateDrainageAreaConsistencyTopologyTables() -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - ---TABLE pgh_consistency.pghft_DrainageAreaOverlapDrainageArea - -TRUNCATE pgh_consistency.pghft_DrainageAreaOverlapDrainageArea; - -INSERT INTO pgh_consistency.pghft_DrainageAreaOverlapDrainageArea -SELECT row_number() OVER () as id, (pghfn_DrainageAreaOverlapDrainageArea).int_pk_ as int_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageAreaOverlapDrainageArea).dra_pk_a_ as dra_pk_a, (pghfn_DrainageAreaOverlapDrainageArea).dra_pk_b_ as dra_pk_b, (pghfn_DrainageAreaOverlapDrainageArea).int_gm_ as int_gm, (pghfn_DrainageAreaOverlapDrainageArea).dra_gm_a_ as dra_gm_a, (pghfn_DrainageAreaOverlapDrainageArea).dra_gm_b_ as dra_gm_b, ST_AREA((pghfn_DrainageAreaOverlapDrainageArea).int_gm_) as area -FROM pgh_consistency.pghfn_DrainageAreaOverlapDrainageArea(); - ---TABLE pgh_consistency.pghft_DrainageAreaWithinDrainageArea - -TRUNCATE pgh_consistency.pghft_DrainageAreaWithinDrainageArea; - -INSERT INTO pgh_consistency.pghft_DrainageAreaWithinDrainageArea -SELECT row_number() OVER () as id, (pghfn_DrainageAreaWithinDrainageArea).dra_pk_ as dra_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageAreaWithinDrainageArea).dra_gm_ as dra_gm, ST_AREA((pghfn_DrainageAreaWithinDrainageArea).dra_gm_) as area -FROM pgh_consistency.pghfn_DrainageAreaWithinDrainageArea(); - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -END; -$$ -LANGUAGE PLPGSQL; - ----------------------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_UpdateDrainageLineDrainageAreaConsistencyTables() ----------------------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_UpdateDrainageLineDrainageAreaConsistencyTables() -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - ---TABLE pgh_consistency.pghft_DrainageAreaNoDrainageLine - -TRUNCATE pgh_consistency.pghft_DrainageAreaNoDrainageLine; - -INSERT INTO pgh_consistency.pghft_DrainageAreaNoDrainageLine -SELECT row_number() OVER () as id, a.hin_dra_pk as dra_pk, (row_number() OVER () - 1) % 10 + 1 as editor, b.dra_gm as dra_gm, ST_AREA(b.dra_gm) as area -FROM pghydro.pghft_drainage_area b, pghydro.pghft_hydro_intel a -WHERE a.hin_drn_pk isnull -AND a.hin_dra_pk = b.dra_pk; - ---TABLE pgh_consistency.pghft_DrainageLineNoDrainageArea - -TRUNCATE pgh_consistency.pghft_DrainageLineNoDrainageArea; - -INSERT INTO pgh_consistency.pghft_DrainageLineNoDrainageArea -SELECT row_number() OVER () as id, a.hin_drn_pk as drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, b.drn_gm -FROM pghydro.pghft_drainage_line b, pghydro.pghft_hydro_intel a -WHERE a.hin_dra_pk isnull -AND a.hin_drn_pk = b.drn_pk; - ---TABLE pgh_consistency.pghft_DrainageAreaMoreOneDrainageLine - -TRUNCATE pgh_consistency.pghft_DrainageAreaMoreOneDrainageLine; - -INSERT INTO pgh_consistency.pghft_DrainageAreaMoreOneDrainageLine -SELECT row_number() OVER () as id, dra_pk, (row_number() OVER () - 1) % 10 + 1 as editor, dra_gm -FROM -( -SELECT DISTINCT a.hin_dra_pk as dra_pk, b.dra_gm as dra_gm -FROM pghydro.pghft_drainage_area b, pghydro.pghft_hydro_intel a -WHERE hin_count_dra_pk >=2 -AND a.hin_dra_pk = b.dra_pk -)as a; - ---TABLE pgh_consistency.pghft_DrainageLineMoreOneDrainageArea - -TRUNCATE pgh_consistency.pghft_DrainageLineMoreOneDrainageArea; - -INSERT INTO pgh_consistency.pghft_DrainageLineMoreOneDrainageArea -SELECT row_number() OVER () as id, drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, drn_gm -FROM -( -SELECT DISTINCT a.hin_drn_pk as drn_pk, b.drn_gm -FROM pghydro.pghft_drainage_line b, pghydro.pghft_hydro_intel a -WHERE hin_count_drn_pk >=2 -AND a.hin_drn_pk = b.drn_pk -) as a; - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -END; -$$ -LANGUAGE PLPGSQL; - ----------------------------------------------- ---HYDRONYM ----------------------------------------------- - ---CREATE TABLES - ---TABLE pgh_consistency.pghtb_nm_waterbodyoriginal - -DROP TABLE IF EXISTS pgh_consistency.pghtb_nm_waterbodyoriginal; - -CREATE SEQUENCE pgh_consistency.nwo_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - -CREATE TABLE pgh_consistency.pghtb_nm_waterbodyoriginal( -nwo_pk integer NOT NULL DEFAULT nextval('pgh_consistency.nwo_pk_seq'::regclass), -nwo_nm_original varchar, -nwo_nm_generic varchar, -nwo_nm_connection varchar, -nwo_nm_specific varchar -); - -ALTER SEQUENCE pgh_consistency.nwo_pk_seq OWNED BY pgh_consistency.pghtb_nm_waterbodyoriginal.nwo_pk; - ---TABLE pgh_consistency.pghtb_nm_generic - -DROP TABLE IF EXISTS pgh_consistency.pghtb_nm_generic; - -CREATE SEQUENCE pgh_consistency.nmg_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - -CREATE TABLE pgh_consistency.pghtb_nm_generic( -nmg_pk integer NOT NULL DEFAULT nextval('pgh_consistency.nmg_pk_seq'::regclass), -nmg_nwo_nm_generic varchar, -nmg_nm_generic varchar -); - -ALTER SEQUENCE pgh_consistency.nmg_pk_seq OWNED BY pgh_consistency.pghtb_nm_generic.nmg_pk; - -ALTER TABLE ONLY pgh_consistency.pghtb_nm_generic ADD CONSTRAINT nmg_pk_pkey PRIMARY KEY (nmg_pk); - ---TABLE pgh_consistency.pghtb_nm_connection; - -DROP TABLE IF EXISTS pgh_consistency.pghtb_nm_connection; - -CREATE SEQUENCE pgh_consistency.nmc_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - -CREATE TABLE pgh_consistency.pghtb_nm_connection( -nmc_pk integer NOT NULL DEFAULT nextval('pgh_consistency.nmc_pk_seq'::regclass), -nmc_nwo_nm_connection varchar, -nmc_nm_connection varchar -); - -ALTER SEQUENCE pgh_consistency.nmc_pk_seq OWNED BY pgh_consistency.pghtb_nm_connection.nmc_pk; - -ALTER TABLE ONLY pgh_consistency.pghtb_nm_connection ADD CONSTRAINT nmc_pk_pkey PRIMARY KEY (nmc_pk); - ---TABLE pgh_consistency.pghtb_nm_specific; - -DROP TABLE IF EXISTS pgh_consistency.pghtb_nm_specific; - -CREATE SEQUENCE pgh_consistency.nms_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - -CREATE TABLE pgh_consistency.pghtb_nm_specific( -nms_pk integer NOT NULL DEFAULT nextval('pgh_consistency.nms_pk_seq'::regclass), -nms_nwo_nm_specific varchar, -nms_nm_specific varchar -); - -ALTER SEQUENCE pgh_consistency.nms_pk_seq OWNED BY pgh_consistency.pghtb_nm_specific.nms_pk; - -ALTER TABLE ONLY pgh_consistency.pghtb_nm_specific ADD CONSTRAINT nms_pk_pkey PRIMARY KEY (nms_pk); - ---TABLE pgh_consistency.pghtb_nm_complete - -DROP TABLE IF EXISTS pgh_consistency.pghtb_nm_complete; - -CREATE SEQUENCE pgh_consistency.nmp_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - -CREATE TABLE pgh_consistency.pghtb_nm_complete( -nmp_pk integer NOT NULL DEFAULT nextval('pgh_consistency.nmp_pk_seq'::regclass), -nmp_nm_complete varchar, -nmp_nm_generic varchar, -nmp_nm_connection varchar, -nmp_nm_specific varchar -); - -ALTER SEQUENCE pgh_consistency.nmp_pk_seq OWNED BY pgh_consistency.pghtb_nm_complete.nmp_pk; - -CREATE TABLE pgh_consistency.pghft_confluencehydronym -( - id bigint, - cnh_drp_pk integer, - editor bigint, - cnh_gm geometry(MultiPoint), - CONSTRAINT pghft_confluencehydronym_pkey PRIMARY KEY (id) -); - -------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_ConfluenceHydronym() -------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_ConfluenceHydronym() -RETURNS TABLE(cnh_drp_pk_ integer, cnh_gm_ geometry) -AS -$$ -BEGIN - -RETURN QUERY - -SELECT a.drp_pk as cnh_drp_pk, ST_MULTI(drp.drp_gm) as cnh_gm -FROM -( -SELECT DISTINCT drn_drp_pk_targetnode as drp_pk -FROM -( -SELECT a.drn_drp_pk_targetnode -FROM pghydro.pghft_drainage_line a, pghydro.pghft_drainage_line b, pghydro.pghft_drainage_point c -WHERE a.drn_nm = b.drn_nm -AND a.drn_drn_pk_upstreamdrainageline = b.drn_pk -AND a.drn_drp_pk_targetnode = c.drp_pk -) as d -) as a, pghydro.pghft_drainage_point drp -WHERE drp.drp_pk = a.drp_pk; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_ConfluenceHydronym(); - --------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_numConfluenceHydronym() --------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineOverlapDrainageLine() -RETURNS bigint AS -$$ -SELECT count(cnh_drp_pk) -FROM -( -SELECT (pghfn_ConfluenceHydronym).cnh_drp_pk_ as cnh_drp_pk -FROM pgh_consistency.pghfn_ConfluenceHydronym() -) as b; -$$ -LANGUAGE SQL; - ---SELECT pgh_consistency.pghfn_numConfluenceHydronym(); - --------------------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_UpdateConfluenceHydronymConistencyTable() --------------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_UpdateConfluenceHydronymConistencyTable() -RETURNS character varying AS -$$ -BEGIN - ---TABLE pgh_consistency.pghft_ConfluenceHydronym - -TRUNCATE pgh_consistency.pghft_ConfluenceHydronym; - -INSERT INTO pgh_consistency.pghft_ConfluenceHydronym -SELECT row_number() OVER () as id, (pghfn_ConfluenceHydronym).cnh_drp_pk_ as cnh_drp_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_ConfluenceHydronym).cnh_gm_ as cnh_gm -FROM pgh_consistency.pghfn_ConfluenceHydronym(); - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - - -------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_systematize_hydronym() -------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_systematize_hydronym() -RETURNS varchar AS -$$ -DECLARE - -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -TRUNCATE pgh_consistency.pghtb_nm_waterbodyoriginal; - -ALTER SEQUENCE pgh_consistency.nwo_pk_seq RESTART WITH 1; - -INSERT INTO pgh_consistency.pghtb_nm_waterbodyoriginal (nwo_nm_original, nwo_nm_generic, nwo_nm_connection, nwo_nm_specific) -SELECT DISTINCT nm_original, nm_generic, nm_connection, nm_specific -FROM -( -SELECT -drn_pk, -nm_original, -trim(both ' ' from t1) as nm_generic, -trim(both ' ' from t2) as nm_connection, -trim(both ' ' from (t3||' '||t4||' '||t5||' '||t6||' '||t7||' '||t8||' '||t9||' '||t10||' '||t11||' '||t12||' '||t13||' '||t14||' '||t15||' '||t16||' '||t17)) as nm_specific -FROM -( -SELECT -drn_pk, -nm_original, -trim(both ' ' from split_part(nm_original, ' ', 1)) as t1, -trim(both ' ' from lower(split_part(nm_original, ' ', 2))) as t2, -trim(both ' ' from split_part(nm_original, ' ', 3)) as t3, -trim(both ' ' from split_part(nm_original, ' ', 4)) as t4, -trim(both ' ' from split_part(nm_original, ' ', 5)) as t5, -trim(both ' ' from split_part(nm_original, ' ', 6)) as t6, -trim(both ' ' from split_part(nm_original, ' ', 7)) as t7, -trim(both ' ' from split_part(nm_original, ' ', 8)) as t8, -trim(both ' ' from split_part(nm_original, ' ', 9)) as t9, -trim(both ' ' from split_part(nm_original, ' ', 10)) as t10, -trim(both ' ' from split_part(nm_original, ' ', 11)) as t11, -trim(both ' ' from split_part(nm_original, ' ', 12)) as t12, -trim(both ' ' from split_part(nm_original, ' ', 13)) as t13, -trim(both ' ' from split_part(nm_original, ' ', 14)) as t14, -trim(both ' ' from split_part(nm_original, ' ', 15)) as t15, -trim(both ' ' from split_part(nm_original, ' ', 16)) as t16, -trim(both ' ' from split_part(nm_original, ' ', 17)) as t17 -FROM -( -SELECT drn_pk, nm_original -FROM -( -SELECT drn_pk, nm_original -FROM -( -SELECT -drn_pk, -drn_nm as nm_original, -lower(split_part(drn_nm, ' ', 2)) as t2 -FROM pghydro.pghft_drainage_line -WHERE drn_nm is not null -) as a -WHERE t2 = 'de' -OR t2 = 'da' -OR t2 = 'do' -OR t2 = 'das' -OR t2 = 'dos' -OR t2 = 'del' -) as a -WHERE -NOT EXISTS -( -SELECT drn_pk -FROM -( -SELECT drn_pk, nm_original -FROM -( -SELECT -drn_pk, -drn_nm as nm_original, -lower(split_part(drn_nm, ' ', 3)) as t3 -FROM pghydro.pghft_drainage_line -WHERE drn_nm is not null -) as a -WHERE t3 = 'la' -OR t3 = 'las' -OR t3 = 'los' -) as b -WHERE b.drn_pk = a.drn_pk -) -) as a -) as b ---) as c -UNION ALL -SELECT -drn_pk, -nm_original, -trim(both ' ' from t1) as nm_generic, -trim(both ' ' from (t2||' '||t3)) as nm_connection, -trim(both ' ' from (t4||' '||t5||' '||t6||' '||t7||' '||t8||' '||t9||' '||t10||' '||t11||' '||t12||' '||t13||' '||t14||' '||t15||' '||t16||' '||t17)) as nm_specific -FROM -( -SELECT -drn_pk, -nm_original, -trim(both ' ' from split_part(nm_original, ' ', 1)) as t1, -trim(both ' ' from lower(split_part(nm_original, ' ', 2))) as t2, -trim(both ' ' from lower(split_part(nm_original, ' ', 3))) as t3, -trim(both ' ' from split_part(nm_original, ' ', 4)) as t4, -trim(both ' ' from split_part(nm_original, ' ', 5)) as t5, -trim(both ' ' from split_part(nm_original, ' ', 6)) as t6, -trim(both ' ' from split_part(nm_original, ' ', 7)) as t7, -trim(both ' ' from split_part(nm_original, ' ', 8)) as t8, -trim(both ' ' from split_part(nm_original, ' ', 9)) as t9, -trim(both ' ' from split_part(nm_original, ' ', 10)) as t10, -trim(both ' ' from split_part(nm_original, ' ', 11)) as t11, -trim(both ' ' from split_part(nm_original, ' ', 12)) as t12, -trim(both ' ' from split_part(nm_original, ' ', 13)) as t13, -trim(both ' ' from split_part(nm_original, ' ', 14)) as t14, -trim(both ' ' from split_part(nm_original, ' ', 15)) as t15, -trim(both ' ' from split_part(nm_original, ' ', 16)) as t16, -trim(both ' ' from split_part(nm_original, ' ', 17)) as t17 -FROM -( -SELECT drn_pk, nm_original -FROM -( -SELECT -drn_pk, -drn_nm as nm_original, -lower(split_part(drn_nm, ' ', 3)) as t3 -FROM pghydro.pghft_drainage_line -WHERE drn_nm is not null -) as a -WHERE t3 = 'la' -OR t3 = 'las' -OR t3 = 'los' -) as b -) as c ---) as d -UNION ALL -SELECT DISTINCT -drn_pk, -nm_original, -trim(both ' ' from t1) as nm_generic, -null as nm_connection, -trim(both ' ' from (t2||' '||t3||' '||t4||' '||t5||' '||t6||' '||t7||' '||t8||' '||t9||' '||t10||' '||t11||' '||t12||' '||t13||' '||t14||' '||t15||' '||t16||' '||t17)) as nm_specific -FROM -( -SELECT -drn_pk, -nm_original, -trim(both ' ' from split_part(nm_original, ' ', 1)) as t1, -trim(both ' ' from split_part(nm_original, ' ', 2)) as t2, -trim(both ' ' from split_part(nm_original, ' ', 3)) as t3, -trim(both ' ' from split_part(nm_original, ' ', 4)) as t4, -trim(both ' ' from split_part(nm_original, ' ', 5)) as t5, -trim(both ' ' from split_part(nm_original, ' ', 6)) as t6, -trim(both ' ' from split_part(nm_original, ' ', 7)) as t7, -trim(both ' ' from split_part(nm_original, ' ', 8)) as t8, -trim(both ' ' from split_part(nm_original, ' ', 9)) as t9, -trim(both ' ' from split_part(nm_original, ' ', 10)) as t10, -trim(both ' ' from split_part(nm_original, ' ', 11)) as t11, -trim(both ' ' from split_part(nm_original, ' ', 12)) as t12, -trim(both ' ' from split_part(nm_original, ' ', 13)) as t13, -trim(both ' ' from split_part(nm_original, ' ', 14)) as t14, -trim(both ' ' from split_part(nm_original, ' ', 15)) as t15, -trim(both ' ' from split_part(nm_original, ' ', 16)) as t16, -trim(both ' ' from split_part(nm_original, ' ', 17)) as t17 -FROM -( -SELECT drn_pk, nm_original -FROM -( -SELECT -drn_pk, -drn_nm as nm_original, -lower(split_part(drn_nm, ' ', 2)) as t2, -lower(split_part(drn_nm, ' ', 3)) as t3 -FROM pghydro.pghft_drainage_line -WHERE drn_nm is not null -) as a -WHERE t2 <> 'de' -AND t2 <> 'da' -AND t2 <> 'do' -AND t2 <> 'das' -AND t2 <> 'dos' -AND t2 <> 'del' -AND t2||' '||t3 <> 'de la' -AND t2||' '||t3 <> 'de las' -AND t2||' '||t3 <> 'de los' -) as a -) as c -) as d -ORDER BY nm_original; - -UPDATE pgh_consistency.pghtb_nm_waterbodyoriginal -SET nwo_nm_connection = ' ' -WHERE nwo_nm_connection is null; - -UPDATE pgh_consistency.pghtb_nm_waterbodyoriginal -SET nwo_nm_specific = ' ' -WHERE nwo_nm_specific = ''; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -TRUNCATE pgh_consistency.pghtb_nm_generic; - -ALTER SEQUENCE pgh_consistency.nmg_pk_seq RESTART WITH 1; - -INSERT INTO pgh_consistency.pghtb_nm_generic (nmg_nwo_nm_generic, nmg_nm_generic) -SELECT DISTINCT nwo_nm_generic, nwo_nm_generic -FROM pgh_consistency.pghtb_nm_waterbodyoriginal -ORDER BY nwo_nm_generic; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -TRUNCATE pgh_consistency.pghtb_nm_connection; - -ALTER SEQUENCE pgh_consistency.nmc_pk_seq RESTART WITH 1; - -INSERT INTO pgh_consistency.pghtb_nm_connection (nmc_nwo_nm_connection, nmc_nm_connection) -SELECT DISTINCT nwo_nm_connection, nwo_nm_connection -FROM pgh_consistency.pghtb_nm_waterbodyoriginal -ORDER BY nwo_nm_connection; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -TRUNCATE pgh_consistency.pghtb_nm_specific; - -ALTER SEQUENCE pgh_consistency.nms_pk_seq RESTART WITH 1; - -INSERT INTO pgh_consistency.pghtb_nm_specific (nms_nwo_nm_specific, nms_nm_specific) -SELECT DISTINCT nwo_nm_specific, nwo_nm_specific -FROM pgh_consistency.pghtb_nm_waterbodyoriginal -ORDER BY nwo_nm_specific; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -TRUNCATE pgh_consistency.pghtb_nm_complete; - -ALTER SEQUENCE pgh_consistency.nmp_pk_seq RESTART WITH 1; - -INSERT INTO pgh_consistency.pghtb_nm_complete(nmp_nm_complete, nmp_nm_generic, nmp_nm_connection, nmp_nm_specific) -SELECT nmp_nm_complete, nmg_nm_generic, nmc_nm_connection, nms_nm_specific -FROM -( -SELECT DISTINCT nmg_nm_generic||' '||nmc_nm_connection||' '||nms_nm_specific as nmp_nm_complete, nmg_nm_generic, nmc_nm_connection, nms_nm_specific -FROM pgh_consistency.pghtb_nm_generic nmg, pgh_consistency.pghtb_nm_connection nmc, pgh_consistency.pghtb_nm_specific nms, pgh_consistency.pghtb_nm_waterbodyoriginal nwo -WHERE nmg.nmg_nwo_nm_generic = nwo.nwo_nm_generic -AND nmc.nmc_nwo_nm_connection = nwo.nwo_nm_connection -AND nms.nms_nwo_nm_specific = nwo.nwo_nm_specific -AND nmc.nmc_nm_connection <> ' ' -UNION ALL -SELECT DISTINCT CASE WHEN nms.nms_nm_specific = ' ' THEN nmg.nmg_nm_generic ELSE nmg.nmg_nm_generic||' '||nms.nms_nm_specific END as nmp_nm_complete, nmg_nm_generic, nmc_nm_connection, nms_nm_specific -FROM pgh_consistency.pghtb_nm_generic nmg, pgh_consistency.pghtb_nm_connection nmc, pgh_consistency.pghtb_nm_specific nms, pgh_consistency.pghtb_nm_waterbodyoriginal nwo -WHERE nmg.nmg_nwo_nm_generic = nwo.nwo_nm_generic -AND nmc.nmc_nwo_nm_connection = nwo.nwo_nm_connection -AND nms.nms_nwo_nm_specific = nwo.nwo_nm_specific -AND nmc.nmc_nm_connection = ' ' -) as a -ORDER BY nmg_nm_generic, nms_nm_specific; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -TRUNCATE pghydro.pghtb_type_name_generic; - -INSERT INTO pghydro.pghtb_type_name_generic (tng_pk, tng_ds) -SELECT nmg_pk, nmg_nm_generic -FROM pgh_consistency.pghtb_nm_generic; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - -TRUNCATE pghydro.pghtb_type_name_connection; - -INSERT INTO pghydro.pghtb_type_name_connection (tcn_pk, tcn_ds) -SELECT nmc_pk, nmc_nm_connection -FROM pgh_consistency.pghtb_nm_connection; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; - -TRUNCATE pghydro.pghtb_type_name_specific; - -INSERT INTO pghydro.pghtb_type_name_specific (tns_pk, tns_ds) -SELECT nms_pk, nms_nm_specific -FROM pgh_consistency.pghtb_nm_specific; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; - -TRUNCATE pghydro.pghtb_type_name_complete; - -DROP INDEX IF EXISTS pgh_consistency.nmg_nm_generic_idx; - -DROP INDEX IF EXISTS pgh_consistency.nmp_nm_generic_idx; - -DROP INDEX IF EXISTS pgh_consistency.nmc_nm_connection_idx; - -DROP INDEX IF EXISTS pgh_consistency.nmp_nm_connection_idx; - -DROP INDEX IF EXISTS pgh_consistency.nms_nm_specific_idx; - -DROP INDEX IF EXISTS pgh_consistency.nmp_nm_specific_idx; - -CREATE INDEX nmg_nm_generic_idx ON pgh_consistency.pghtb_nm_generic(nmg_nm_generic); - -CREATE INDEX nmp_nm_generic_idx ON pgh_consistency.pghtb_nm_complete(nmp_nm_generic); - -CREATE INDEX nmc_nm_connection_idx ON pgh_consistency.pghtb_nm_connection(nmc_nm_connection); - -CREATE INDEX nmp_nm_connection_idx ON pgh_consistency.pghtb_nm_complete(nmp_nm_connection); - -CREATE INDEX nms_nm_specific_idx ON pgh_consistency.pghtb_nm_specific(nms_nm_specific); - -CREATE INDEX nmp_nm_specific_idx ON pgh_consistency.pghtb_nm_complete(nmp_nm_specific); - -INSERT INTO pghydro.pghtb_type_name_complete (tnc_pk, tnc_ds, tnc_tng_pk, tnc_tcn_pk, tnc_tns_pk) -SELECT nmp.nmp_pk, nmp.nmp_nm_complete, nmg.nmg_pk, nmc.nmc_pk, nms.nms_pk -FROM pgh_consistency.pghtb_nm_complete nmp, pgh_consistency.pghtb_nm_generic nmg, pgh_consistency.pghtb_nm_connection nmc, pgh_consistency.pghtb_nm_specific nms -WHERE nmg.nmg_nm_generic = nmp.nmp_nm_generic -AND nmc.nmc_nm_connection = nmp.nmp_nm_connection -AND nms.nms_nm_specific = nmp.nmp_nm_specific; - -DROP INDEX IF EXISTS pgh_consistency.nmg_nm_generic_idx; - -DROP INDEX IF EXISTS pgh_consistency.nmp_nm_generic_idx; - -DROP INDEX IF EXISTS pgh_consistency.nmc_nm_connection_idx; - -DROP INDEX IF EXISTS pgh_consistency.nmp_nm_connection_idx; - -DROP INDEX IF EXISTS pgh_consistency.nms_nm_specific_idx; - -DROP INDEX IF EXISTS pgh_consistency.nmp_nm_specific_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; - ---UPDATE pghydro.pghft_drainage_line.drn_tnc_pk - -DROP INDEX IF EXISTS pghydro.tnc_pk_idx; - -DROP INDEX IF EXISTS pghydro.drn_nm_idx; - -DROP INDEX IF EXISTS pghydro.tnc_ds_idx; - -UPDATE pghydro.pghft_drainage_line drn -SET drn_tnc_pk = NULL; - -CREATE INDEX tnc_pk_idx ON pghydro.pghtb_type_name_complete(tnc_pk); - -CREATE INDEX drn_nm_idx ON pghydro.pghft_drainage_line(drn_nm); - -CREATE INDEX tnc_ds_idx ON pghydro.pghtb_type_name_complete(tnc_ds); - -UPDATE pghydro.pghft_drainage_line drn -SET drn_tnc_pk = tnc.tnc_pk -FROM pghydro.pghtb_type_name_complete tnc -WHERE drn.drn_nm = tnc.tnc_ds; - -DROP INDEX IF EXISTS pghydro.tnc_pk_idx; - -DROP INDEX IF EXISTS pghydro.drn_nm_idx; - -DROP INDEX IF EXISTS pghydro.tnc_ds_idx; - -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_systematize_hydronym(); - ----------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_update_drn_nm() ----------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_update_drn_nm() -RETURNS varchar AS -$$ -DECLARE - -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -TRUNCATE pgh_consistency.pghtb_nm_complete; - -ALTER SEQUENCE pgh_consistency.nmp_pk_seq RESTART WITH 1; - -INSERT INTO pgh_consistency.pghtb_nm_complete(nmp_nm_complete, nmp_nm_generic, nmp_nm_connection, nmp_nm_specific) -SELECT nmp_nm_complete, nmg_nm_generic, nmc_nm_connection, nms_nm_specific -FROM -( -SELECT DISTINCT nmg_nm_generic||' '||nmc_nm_connection||' '||nms_nm_specific as nmp_nm_complete, nmg_nm_generic, nmc_nm_connection, nms_nm_specific -FROM pgh_consistency.pghtb_nm_generic nmg, pgh_consistency.pghtb_nm_connection nmc, pgh_consistency.pghtb_nm_specific nms, pgh_consistency.pghtb_nm_waterbodyoriginal nwo -WHERE nmg.nmg_nwo_nm_generic = nwo.nwo_nm_generic -AND nmc.nmc_nwo_nm_connection = nwo.nwo_nm_connection -AND nms.nms_nwo_nm_specific = nwo.nwo_nm_specific -AND nmc.nmc_nm_connection <> ' ' -UNION ALL -SELECT DISTINCT CASE WHEN nms.nms_nm_specific = ' ' THEN nmg.nmg_nm_generic ELSE nmg.nmg_nm_generic||' '||nms.nms_nm_specific END as nmp_nm_complete, nmg_nm_generic, nmc_nm_connection, nms_nm_specific -FROM pgh_consistency.pghtb_nm_generic nmg, pgh_consistency.pghtb_nm_connection nmc, pgh_consistency.pghtb_nm_specific nms, pgh_consistency.pghtb_nm_waterbodyoriginal nwo -WHERE nmg.nmg_nwo_nm_generic = nwo.nwo_nm_generic -AND nmc.nmc_nwo_nm_connection = nwo.nwo_nm_connection -AND nms.nms_nwo_nm_specific = nwo.nwo_nm_specific -AND nmc.nmc_nm_connection = ' ' -) as a -ORDER BY nmg_nm_generic, nms_nm_specific; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -UPDATE pghydro.pghft_drainage_line drn -SET drn_nm = b.nmp_nm_complete -FROM -( -SELECT drn_pk, drn_nm, nmp_nm_complete -FROM -( -SELECT drn.drn_pk, drn.drn_nm, nmp.nmp_nm_complete -FROM -pghydro.pghft_drainage_line drn, -pgh_consistency.pghtb_nm_complete nmp, -pgh_consistency.pghtb_nm_generic nmg, -pgh_consistency.pghtb_nm_connection nmc, -pgh_consistency.pghtb_nm_specific nms, -pgh_consistency.pghtb_nm_waterbodyoriginal nwo -WHERE drn.drn_nm = nwo.nwo_nm_original -AND nmg.nmg_nwo_nm_generic = nwo.nwo_nm_generic -AND nmc.nmc_nwo_nm_connection = nwo.nwo_nm_connection -AND nms.nms_nwo_nm_specific = nwo.nwo_nm_specific -AND nmg.nmg_nm_generic = nmp.nmp_nm_generic -AND nmc.nmc_nm_connection = nmp.nmp_nm_connection -AND nms.nms_nm_specific = nmp.nmp_nm_specific -) as a -WHERE drn_nm <> nmp_nm_complete -) as b -WHERE b.drn_pk = drn.drn_pk; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pgh_consistency.pghfn_update_drn_nm(); - ----------------------------------------------- ---CREATE BACKUP TABLES ----------------------------------------------- - -CREATE TABLE pgh_consistency.pghft_backup_drainage_line( - ads_operation char(1), - ads_stamp timestamp, - ads_userid text, - ads_drn_pk integer, - ads_drn_nm text, - ads_drn_nm_old text, - ads_drn_gm geometry(MultiLineString) -); - -CREATE TABLE pgh_consistency.pghft_backup_drainage_area( - adh_operation char(1), - adh_stamp timestamp, - adh_userid text, - adh_dra_pk integer, - adh_dra_gm geometry(MultiPolygon) -); - -------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_Backup_Drainage_Line() -------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_backup_drainage_line() RETURNS TRIGGER AS $pghft_backup_drainage_line$ - BEGIN - -- - -- Create a row in emp_backup to reflect the operation performed on emp, - -- make use of the special variable TG_OP to work out the operation. - -- - IF (TG_OP = 'DELETE') THEN - INSERT INTO pgh_consistency.pghft_backup_drainage_line(ads_operation, ads_stamp, ads_userid, ads_drn_pk, ads_drn_nm, ads_drn_gm) - SELECT 'D', now(), user, OLD.drn_pk, OLD.drn_nm, OLD.drn_gm; - RETURN OLD; - ELSIF (TG_OP = 'UPDATE') THEN - INSERT INTO pgh_consistency.pghft_backup_drainage_line(ads_operation, ads_stamp, ads_userid, ads_drn_pk, ads_drn_nm, ads_drn_nm_old, ads_drn_gm) - SELECT 'U', now(), user, NEW.drn_pk, NEW.drn_nm, OLD.drn_nm, NEW.drn_gm; - RETURN NEW; - ELSIF (TG_OP = 'INSERT') THEN - INSERT INTO pgh_consistency.pghft_backup_drainage_line(ads_operation, ads_stamp, ads_userid, ads_drn_pk, ads_drn_nm, ads_drn_gm) - SELECT 'I', now(), user, NEW.drn_pk, NEW.drn_nm, NEW.drn_gm; - RETURN NEW; - END IF; - RETURN NULL; -- result is ignored since this is an AFTER trigger - END; -$pghft_backup_drainage_line$ LANGUAGE plpgsql; - -------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_Backup_Drainage_Area() -------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_backup_drainage_area() RETURNS TRIGGER AS $pghft_backup_drainage_area$ - BEGIN - -- - -- Create a row in emp_backup to reflect the operation performed on emp, - -- make use of the special variable TG_OP to work out the operation. - -- - IF (TG_OP = 'DELETE') THEN - INSERT INTO pgh_consistency.pghft_backup_drainage_area SELECT 'D', now(), user, OLD.dra_pk, OLD.dra_gm; - RETURN OLD; - ELSIF (TG_OP = 'UPDATE') THEN - INSERT INTO pgh_consistency.pghft_backup_drainage_area SELECT 'U', now(), user, NEW.dra_pk, NEW.dra_gm; - RETURN NEW; - ELSIF (TG_OP = 'INSERT') THEN - INSERT INTO pgh_consistency.pghft_backup_drainage_area SELECT 'I', now(), user, NEW.dra_pk, NEW.dra_gm; - RETURN NEW; - END IF; - RETURN NULL; -- result is ignored since this is an AFTER trigger - END; -$pghft_backup_drainage_area$ LANGUAGE plpgsql; - ----------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_TurnOnBackup() ----------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_turnonbackup() -RETURNS varchar AS -$$ -DECLARE - -time_ timestamp; - -BEGIN - -DROP TRIGGER IF EXISTS pghft_backup_drainage_line ON pghydro.pghft_drainage_line; - -CREATE TRIGGER pghft_backup_drainage_line -AFTER INSERT OR UPDATE OR DELETE ON pghydro.pghft_drainage_line - FOR EACH ROW EXECUTE PROCEDURE pgh_consistency.pghfn_backup_drainage_line(); - -DROP TRIGGER IF EXISTS pghft_backup_drainage_area ON pghydro.pghft_drainage_area; - -CREATE TRIGGER pghft_backup_drainage_area -AFTER INSERT OR UPDATE OR DELETE ON pghydro.pghft_drainage_area - FOR EACH ROW EXECUTE PROCEDURE pgh_consistency.pghfn_backup_drainage_area(); - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ----------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_TurnOffBackup() ----------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_turnoffbackup() -RETURNS varchar AS -$$ -DECLARE - -time_ timestamp; - -BEGIN - -DROP TRIGGER IF EXISTS pghft_backup_drainage_line ON pghydro.pghft_drainage_line; - -DROP TRIGGER IF EXISTS pghft_backup_drainage_area ON pghydro.pghft_drainage_area; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ----------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_CleanDrainageLineBackupTables() ----------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_CleanDrainageLineBackupTables() -RETURNS varchar AS -$$ -DECLARE - -time_ timestamp; - -BEGIN - -TRUNCATE TABLE pgh_consistency.pghft_backup_drainage_line; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ----------------------------------------------------------------- ---FUNCTION pgh_consistency.pghfn_CleanDrainageAreaBackupTables() ----------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_CleanDrainageAreaBackupTables() -RETURNS varchar AS -$$ -DECLARE - -time_ timestamp; - -BEGIN - -TRUNCATE TABLE pgh_consistency.pghft_backup_drainage_area; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ------------------------------------------ ---UpdateGeometrySRID ------------------------------------------ - +-- +-- Copyright (c) 2016 Alexandre de Amorim Teixeira, pghydro.project@gmail.com +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 2 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program; if not, write to the Free Software +-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +--REQUIREMENTS + +--Postgresql version 9.1+ +--PostGIS version 2.0+ +--PgHydro version 6.2 + +--------------------------------------------------------------------------------- +--Pfafstetter Consistency Extension Version 6.2 of 17/01/2018 +--------------------------------------------------------------------------------- + +------------------------------------- +--CREATE SCHEMA, TABLES AND SEQUENCES +------------------------------------- + +DROP SCHEMA IF EXISTS pgh_consistency CASCADE; + +CREATE SCHEMA pgh_consistency; + +----------------------------- +--CREATE CONSISTENCY TABLES +----------------------------- + +CREATE TABLE pgh_consistency.pghft_drainageareaoverlapdrainagearea +( + id bigint NOT NULL, + int_pk bigint, + editor bigint, + dra_pk_a integer, + dra_pk_b integer, + cn01_gm geometry(MultiPolygon), + dra_gm_a geometry(MultiPolygon), + dra_gm_b geometry(MultiPolygon), + area numeric, + CONSTRAINT pghft_drainageareaoverlapdrainagearea_pkey PRIMARY KEY (id) +); + +CREATE TABLE pgh_consistency.pghft_drainageareaisnotsimple +( + id bigint NOT NULL, + dra_pk integer, + editor bigint, + cn02_gm geometry(MultiPolygon), + CONSTRAINT pghft_drainageareaisnotsimple_pkey PRIMARY KEY (id) +); + +CREATE TABLE pgh_consistency.pghft_drainageareaisnotsingle +( + id bigint NOT NULL, + dra_pk integer, + editor bigint, + cn03_gm geometry(MultiPolygon), + CONSTRAINT pghft_drainageareaisnotsingle_pkey PRIMARY KEY (id) +); + +CREATE TABLE pgh_consistency.pghft_drainageareaisnotvalid +( + id bigint NOT NULL, + dra_pk integer, + editor bigint, + cn04_gm geometry(MultiPolygon), + cn05_gm_point geometry(MultiPoint), + CONSTRAINT pghft_drainageareaisnotvalid_pkey PRIMARY KEY (id) +); + +CREATE TABLE pgh_consistency.pghft_drainageareamoreonedrainageline +( + id bigint NOT NULL, + dra_pk integer, + editor bigint, + cn06_gm geometry(MultiPolygon), + CONSTRAINT pghft_drainageareamoreonedrainageline_pkey PRIMARY KEY (id) +); + +CREATE TABLE pgh_consistency.pghft_drainageareanodrainageline +( + id bigint NOT NULL, + dra_pk integer, + editor bigint, + cn07_gm geometry(MultiPolygon), + area numeric, + CONSTRAINT pghft_drainageareanodrainageline_pkey PRIMARY KEY (id) +); + +CREATE TABLE pgh_consistency.pghft_drainageareawithindrainagearea +( + id bigint NOT NULL, + dra_pk integer, + editor bigint, + cn08_gm geometry(MultiPolygon), + area numeric, + CONSTRAINT pghft_drainageareawithindrainagearea_pkey PRIMARY KEY (id) +); + +CREATE TABLE pgh_consistency.pghft_drainagelinecrossdrainageline +( + id bigint NOT NULL, + drn_pk integer, + editor bigint, + cn09_gm geometry(MultiLineString), + CONSTRAINT pghft_drainagelinecrossdrainageline_pkey PRIMARY KEY (id) +); + +CREATE TABLE pgh_consistency.pghft_drainagelinehaveselfintersection +( + id bigint NOT NULL, + drn_pk integer, + editor bigint, + cn10_gm geometry(MultiLineString), + CONSTRAINT pghft_drainagelinehaveselfintersection_pkey PRIMARY KEY (id) +); + +CREATE TABLE pgh_consistency.pghft_drainagelineisdisconnected +( + id bigint NOT NULL, + drn_pk integer, + editor bigint, + cn11_gm geometry(MultiLineString), + CONSTRAINT pghft_drainagelineisdisconnected_pkey PRIMARY KEY (id) +); + +CREATE TABLE pgh_consistency.pghft_drainagelineisnotsimple +( + id bigint NOT NULL, + drn_pk integer, + editor bigint, + cn12_gm geometry(MultiLineString), + CONSTRAINT pghft_drainagelineisnotsimple_pkey PRIMARY KEY (id) +); + +CREATE TABLE pgh_consistency.pghft_drainagelineisnotsingle +( + id bigint NOT NULL, + drn_pk integer, + editor bigint, + cn13_gm geometry(MultiLineString), + CONSTRAINT pghft_drainagelineisnotsingle_pkey PRIMARY KEY (id) +); + +CREATE TABLE pgh_consistency.pghft_drainagelineisnotvalid +( + id bigint NOT NULL, + drn_pk integer, + editor bigint, + cn14_gm geometry(MultiLineString), + CONSTRAINT pghft_drainagelineisnotvalid_pkey PRIMARY KEY (id) +); + +CREATE TABLE pgh_consistency.pghft_drainagelineisnotvalidpoint +( + id bigint NOT NULL, + drn_pk integer, + editor bigint, + cn15_gm_point geometry(MultiLineString), + CONSTRAINT pghft_drainagelineisnotvalidpoint_pkey PRIMARY KEY (id) +); + +CREATE TABLE pgh_consistency.pghft_drainagelineloops +( + id bigint NOT NULL, + plg_pk integer, + editor bigint, + cn16_gm geometry(MultiPolygon), + area numeric, + CONSTRAINT pghft_drainagelineloops_pkey PRIMARY KEY (id) +); + +CREATE TABLE pgh_consistency.pghft_drainagelinemoreonedrainagearea +( + id bigint NOT NULL, + drn_pk integer, + editor bigint, + cn17_gm geometry(MultiLineString), + CONSTRAINT pghft_drainagelinemoreonedrainagearea_pkey PRIMARY KEY (id) +); + +CREATE TABLE pgh_consistency.pghft_drainagelinenodrainagearea +( + id bigint NOT NULL, + drn_pk integer, + editor bigint, + cn18_gm geometry(MultiLineString), + CONSTRAINT pghft_drainagelinenodrainagearea_pkey PRIMARY KEY (id) +); + +CREATE TABLE pgh_consistency.pghft_drainagelineoverlapdrainageline +( + id bigint NOT NULL, + drn_pk integer, + editor bigint, + cn19_gm geometry(MultiLineString), + CONSTRAINT pghft_drainagelineoverlapdrainageline_pkey PRIMARY KEY (id) +); + +CREATE TABLE pgh_consistency.pghft_drainagelinetouchdrainageline +( + id bigint NOT NULL, + drn_pk integer, + editor bigint, + cn20_gm geometry(MultiLineString), + CONSTRAINT pghft_drainagelinetouchdrainageline_pkey PRIMARY KEY (id) +); + +CREATE TABLE pgh_consistency.pghft_drainagelinewithindrainageline +( + id bigint NOT NULL, + drn_pk integer, + editor bigint, + cn21_gm geometry(MultiLineString), + CONSTRAINT pghft_drainagelinewithindrainageline_pkey PRIMARY KEY (id) +); + +CREATE TABLE pgh_consistency.pghft_pointvalencevalue2 +( + id bigint NOT NULL, + drp_pk integer, + editor bigint, + cn22_gm geometry(MultiPoint), + CONSTRAINT pghft_pointvalencevalue2_pkey PRIMARY KEY (id) +); + +CREATE TABLE pgh_consistency.pghft_pointvalencevalue4 +( + id bigint NOT NULL, + drp_pk integer, + editor bigint, + cn23_gm geometry(MultiPoint), + CONSTRAINT pghft_pointvalencevalue4_pkey PRIMARY KEY (id) +); + +CREATE TABLE pgh_consistency.pghft_pointdivergent +( + id bigint NOT NULL, + drp_pk integer, + editor bigint, + cn24_gm geometry(MultiPoint), + CONSTRAINT pghft_pointdivergent_pkey PRIMARY KEY (id) +); + +------------------------------------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_SplitDrainagelineMultipoint(input_geom geometry, blade geometry) +------------------------------------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_SplitDrainagelineMultipoint(input_geom geometry, blade geometry) + RETURNS geometry AS +$$ + -- this function is a wrapper around the function ST_Split + -- to allow splitting multilines with multipoints + -- + DECLARE + result geometry; + simple_blade geometry; + blade_geometry_type text := GeometryType(blade); + geom_geometry_type text := GeometryType(input_geom); + BEGIN + IF blade_geometry_type NOT ILIKE 'MULTI%' THEN + RETURN ST_Split(input_geom, blade); + ELSIF blade_geometry_type NOT ILIKE '%POINT' THEN + RAISE NOTICE 'Need a Point/MultiPoint blade'; + RETURN NULL; + END IF; + + IF geom_geometry_type NOT ILIKE '%LINESTRING' THEN + RAISE NOTICE 'Need a LineString/MultiLineString input_geom'; + RETURN NULL; + END IF; + + result := input_geom; + -- Loop on all the points in the blade + FOR simple_blade IN SELECT (ST_Dump(ST_CollectionExtract(blade, 1))).geom + LOOP + -- keep splitting the previous result + result := ST_CollectionExtract(ST_Split(result, simple_blade), 2); + END LOOP; + RETURN result; + END; +$$ +LANGUAGE PLPGSQL; + +--------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_MakeSnapToGridDrainageLine(numeric) +--------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_MakeSnapToGridDrainageLine(numeric) +RETURNS character varying AS +$$ +BEGIN + +UPDATE pghydro.pghft_drainage_line +SET drn_gm = ST_SNAPTOGRID(drn_gm, $1); + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_MakeSnapToGridDrainageLine(0.000000000001); + +------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_RemoveReapetedPointsDrainageLine() +------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_RemoveReapetedPointsDrainageLine() +RETURNS character varying AS +$$ +BEGIN + +UPDATE pghydro.pghft_drainage_line +SET drn_gm = ST_RemoveRepeatedPoints(drn_gm); + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_RemoveReapetedPointsDrainageLine(); + +------------------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_CreateDrainageLineVertexIntersections(numeric) +------------------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_CreateDrainageLineVertexIntersections(numeric) +RETURNS character varying AS +$$ +DECLARE + +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +--Create Vertex on intersection lines + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_gm_idx; + +CREATE INDEX drn_gm_idx ON pghydro.pghft_drainage_line USING GIST(drn_gm); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +UPDATE pghydro.pghft_drainage_line drn +SET drn_gm = ST_MULTI(ST_SNAP(drn.drn_gm, a.drp_gm, $1)) +FROM +( +SELECT drn_pk_a, ST_MULTI(ST_UNION(drp_gm)) as drp_gm +FROM +( +SELECT a.drn_pk as drn_pk_a, b.drn_pk as drn_pk_b, ST_INTERSECTION(a.drn_gm, b.drn_gm) as drp_gm --row_number() over() +FROM pghydro.pghft_drainage_line AS a, pghydro.pghft_drainage_line AS b +WHERE (a.drn_gm && b.drn_gm) +AND +ST_Relate(a.drn_gm, b.drn_gm) IN ( +--TOUCH +'F01FF0102', +'F010F0102', +--'FF1F00102', +'F01FF01F2', +'F010F01F2', +'F01F001F2', +'F010FF1F2', +--'FF1F0F1F2', +'F0100F1F2', +--CROSS +'0F1FF0102', +'0010F0102', +'0F1F00102', +'001FF0102', +'0010F01F2', +'001F001F2', +'001FF01F2', +'0F1F0F1F2', +'00100F1F2', +'0010FF1F2' +) +) as a +GROUP BY drn_pk_a +) as a +WHERE a.drn_pk_a = drn.drn_pk; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_gm_idx; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_CreateDrainageLineVertexIntersections(0.000000000001); + +---------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_BreakDrainageLine() +---------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_BreakDrainageLine() +RETURNS character varying AS +$$ +DECLARE + +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +--Break Lines + +DROP INDEX IF EXISTS pghydro.drn_gm_idx; + +CREATE INDEX drn_gm_idx ON pghydro.pghft_drainage_line USING GIST(drn_gm); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +UPDATE pghydro.pghft_drainage_line drn +SET drn_gm = pgh_consistency.pghfn_SplitDrainagelineMultipoint(drn.drn_gm, a.drp_gm) +FROM +( +SELECT drn_pk_a, ST_MULTI(ST_UNION(drp_gm)) as drp_gm +FROM +( +SELECT a.drn_pk as drn_pk_a, b.drn_pk as drn_pk_b, ST_INTERSECTION(a.drn_gm, b.drn_gm) as drp_gm --row_number() over() +FROM pghydro.pghft_drainage_line AS a, pghydro.pghft_drainage_line AS b +WHERE (a.drn_gm && b.drn_gm) +AND +( +ST_Relate(a.drn_gm, b.drn_gm) IN ( +--TOUCH +'F01FF0102', +'F010F0102', +--'FF1F00102', +'F01FF01F2', +'F010F01F2', +'F01F001F2', +'F010FF1F2', +--'FF1F0F1F2', +'F0100F1F2', +--CROSS +'0F1FF0102', +'0010F0102', +'0F1F00102', +'001FF0102', +'0010F01F2', +'001F001F2', +'001FF01F2', +'0F1F0F1F2', +'00100F1F2', +'0010FF1F2' +) +) +) as a +GROUP BY drn_pk_a +) as a +WHERE a.drn_pk_a = drn.drn_pk; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_gm_idx; + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_BreakDrainageLine(); + +--SELECT pgh_consistency.pghfn_ExplodeDrainageLine(); + +-------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_MakeSnapToGridDrainageArea(numeric) +-------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_MakeSnapToGridDrainageArea(numeric) +RETURNS character varying AS +$$ +BEGIN + +UPDATE pghydro.pghft_drainage_area +SET dra_gm = ST_SNAPTOGRID(dra_gm, $1); + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_MakeSnapToGridDrainageArea(numeric); + +------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_RemoveReapetedPointsDrainageArea() +------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_RemoveReapetedPointsDrainageArea() +RETURNS character varying AS +$$ +BEGIN + +UPDATE pghydro.pghft_drainage_area +SET dra_gm = ST_RemoveRepeatedPoints(dra_gm); + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_RemoveReapetedPointsDrainageArea(); + +--------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_MakeDrainageAreaSimple() +--------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_MakeDrainageAreaSimple() +RETURNS character varying AS +$$ +BEGIN + +UPDATE pghydro.pghft_drainage_area +SET dra_gm = st_multi(st_buildarea(st_union(st_multi(st_boundary(dra_gm)),st_pointn(st_boundary(dra_gm),1)))) +WHERE ST_IsSimple(dra_gm) = 'f'; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_MakeDrainageAreaSimple(); + +-------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_MakeDrainageAreaValid() +-------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_MakeDrainageAreaValid() +RETURNS character varying AS +$$ +BEGIN + +UPDATE pghydro.pghft_drainage_area +SET dra_gm = ST_CollectionExtract(ST_MakeValid(dra_gm),3) +WHERE ST_IsValid(dra_gm) = false; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_MakeDrainageAreaValid(); + +------------------------------------------------------------------ +--FUNCTION pgh_consistency.pghfn_RemoveDrainageAreaInteriorRings() +------------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_RemoveDrainageAreaInteriorRings() +RETURNS character varying AS +$$ +BEGIN + +UPDATE pghydro.pghft_drainage_area +SET dra_gm = ST_Multi(ST_MakePolygon(ST_ExteriorRing((ST_Dump(dra_gm)).geom))) +WHERE ST_NumInteriorRings(dra_gm) > 0; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_RemoveDrainageAreaInteriorRings(); + +-------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_RemoveWatershedInteriorRings() +-------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_RemoveWatershedInteriorRings() +RETURNS character varying AS +$$ +BEGIN + +UPDATE pghydro.pghft_watershed +SET wts_gm = ST_Multi(ST_MakePolygon(ST_ExteriorRing((ST_Dump(wts_gm)).geom))) +WHERE ST_NumInteriorRings(wts_gm) > 0; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_RemoveWatershedInteriorRings(); + +------------------------------------------------------ +--FUNCTION pgh_consistency.pghfn_ExplodeDrainageArea() +------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_ExplodeDrainageArea() +RETURNS varchar AS +$$ +DECLARE + +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +DROP INDEX IF EXISTS pghydro.sqc; + +CREATE SEQUENCE pghydro.sqc; + +PERFORM setval(('pghydro.sqc'::text)::regclass, a.nextval::bigint, false) +FROM +( +SELECT max(dra_pk)+1 as nextval +FROM pghydro.pghft_drainage_area +) as a; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +DROP TABLE IF EXISTS pghydro.pghft_drainage_area_temp; + +CREATE TABLE pghydro.pghft_drainage_area_temp +AS SELECT dra_gm +FROM +( +SELECT (ST_Dump(dra_gm)).geom AS dra_gm +FROM +( + +SELECT (pghfn_DrainageAreaIsNotSingle).dra_gm_ as dra_gm +FROM pgh_consistency.pghfn_DrainageAreaIsNotSingle() + +) as b +) as a; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +ALTER TABLE pghydro.pghft_drainage_area_temp +ADD COLUMN dra_pk INTEGER PRIMARY KEY DEFAULT nextval('pghydro.sqc'); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +DROP INDEX IF EXISTS pghydro.dra_pk_idx; + +CREATE INDEX dra_pk_idx ON pghydro.pghft_drainage_area(dra_pk); + +DELETE FROM pghydro.pghft_drainage_area +WHERE dra_pk in +( +SELECT dra_pk +FROM +( + +SELECT (pghfn_DrainageAreaIsNotSingle).dra_pk_ as dra_pk +FROM pgh_consistency.pghfn_DrainageAreaIsNotSingle() + +) as b +); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +INSERT INTO pghydro.pghft_drainage_area (dra_pk, dra_gm) +SELECT dra_pk, ST_Multi(dra_gm) +FROM pghydro.pghft_drainage_area_temp; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +DROP TABLE IF EXISTS pghydro.pghft_drainage_area_temp; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +DROP SEQUENCE IF EXISTS pghydro.sqc; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; + +DROP INDEX IF EXISTS pghydro.dra_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_ExplodeDrainageArea(); + +----------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_RemoveInteriorRingDrainageArea() +----------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_RemoveInteriorRingDrainageArea() +RETURNS character varying AS +$$ +BEGIN + +UPDATE pghydro.pghft_drainage_area +SET dra_gm = ST_Multi(ST_MakePolygon(ST_ExteriorRing((ST_Dump(dra_gm)).geom))); + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_RemoveInteriorRingDrainageArea(); + +---------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_DrainageLineIsNotSingle() +---------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineIsNotSingle() +RETURNS TABLE(drn_pk_ integer, drn_nm_ character varying, drn_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT drn_pk, drn_nm, drn_gm +FROM pghydro.pghft_drainage_line +WHERE ST_NumGeometries(drn_gm) > 1; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + + +------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numDrainageLineIsNotSingle() +------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineIsNotSingle() +RETURNS bigint AS +$$ +SELECT count(drn_pk) +FROM +( +SELECT (pghfn_DrainageLineIsNotSingle).drn_pk_ as drn_pk +FROM pgh_consistency.pghfn_DrainageLineIsNotSingle() +) as a; +$$ +LANGUAGE SQL; + + +------------------------------------------------------ +--FUNCTION pgh_consistency.pghfn_ExplodeDrainageLine() +------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_ExplodeDrainageLine() +RETURNS varchar AS +$$ +DECLARE + +time_ timestamp; + +BEGIN + +DROP SEQUENCE IF EXISTS pghydro.sqc; + +CREATE SEQUENCE pghydro.sqc; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +PERFORM setval(('pghydro.sqc'::text)::regclass, a.nextval::bigint, false) +FROM +( +SELECT max(drn_pk)+1 as nextval +FROM pghydro.pghft_drainage_line +) as a; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_gm_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +DROP TABLE IF EXISTS pghydro.pghft_drainage_line_temp; + +CREATE TABLE pghydro.pghft_drainage_line_temp +AS SELECT drn_nm, drn_gm +FROM +( +SELECT drn_nm, (ST_Dump(drn_gm)).geom AS drn_gm +FROM +( +SELECT (pghfn_DrainageLineIsNotSingle).drn_nm_ as drn_nm, (pghfn_DrainageLineIsNotSingle).drn_gm_ as drn_gm +FROM pgh_consistency.pghfn_DrainageLineIsNotSingle() +) as b +) as a; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +ALTER TABLE pghydro.pghft_drainage_line_temp +ADD COLUMN drn_pk INTEGER PRIMARY KEY DEFAULT nextval('pghydro.sqc'); + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +DELETE FROM pghydro.pghft_drainage_line +WHERE drn_pk in +( +SELECT drn_pk +FROM +( +SELECT (pghfn_DrainageLineIsNotSingle).drn_pk_ as drn_pk +FROM pgh_consistency.pghfn_DrainageLineIsNotSingle() +) as b +); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +INSERT INTO pghydro.pghft_drainage_line (drn_pk, drn_nm, drn_gm) +SELECT drn_pk, drn_nm, ST_Multi(drn_gm) +FROM pghydro.pghft_drainage_line_temp; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +DROP TABLE pghydro.pghft_drainage_line_temp; + +DROP SEQUENCE pghydro.sqc; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; + +PERFORM setval(('pghydro.drn_pk_seq'::text)::regclass, a.nextval::bigint, false) +FROM +( +SELECT max(drn_pk)+1 as nextval +FROM pghydro.pghft_drainage_line +) as a; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +---------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_DrainageLineIsNotSimple() +---------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineIsNotSimple() +RETURNS TABLE(drn_pk_ integer, drn_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT drn_pk, drn_gm +FROM pghydro.pghft_drainage_line +WHERE ST_IsSimple(drn_gm) <> 't'; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + +------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numDrainageLineIsNotSimple() +------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineIsNotSimple() +RETURNS bigint AS +$$ +SELECT count(drn_pk) +FROM +( +SELECT (pghfn_DrainageLineIsNotSimple).drn_pk_ as drn_pk +FROM pgh_consistency.pghfn_DrainageLineIsNotSimple() +) as a; +$$ +LANGUAGE SQL; + +--------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_MakeDrainageLineSimple() +--------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_MakeDrainageLineSimple() +RETURNS character varying AS +$$ +BEGIN + +UPDATE pghydro.pghft_drainage_line drn +SET drn_gm = st_multi(st_union(drn.drn_gm,st_pointN(st_geometryN(drn.drn_gm, 1), 1))) +FROM +( +SELECT (pghfn_DrainageLineIsNotSimple).drn_pk_ as drn_pk +FROM pgh_consistency.pghfn_DrainageLineIsNotSimple() +) as a +WHERE a.drn_pk = drn.drn_pk; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_MakeDrainageLineSimple(); + +--------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_DrainageLineIsNotValid() +--------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineIsNotValid() +RETURNS TABLE(drn_pk_ integer, drn_gm_ geometry, drn_gm_point_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT drn_pk, drn_gm, location(ST_IsValidDetail(drn_gm)) as drn_gm_point +FROM pghydro.pghft_drainage_line +WHERE ST_IsValidReason(drn_gm) <> 'Valid Geometry'; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + + +------------------------------------------------------------ +--FUNCTION pgh_consistency.pghfn_numDrainageLineIsNotValid() +------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineIsNotValid() +RETURNS bigint AS +$$ +SELECT count(drn_pk) +FROM +( +SELECT (pghfn_DrainageLineIsNotValid).drn_pk_ as drn_pk +FROM pgh_consistency.pghfn_DrainageLineIsNotValid() +) as a; +$$ +LANGUAGE SQL; + + +-------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_MakeDrainageLineValid() +-------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_MakeDrainageLineValid() +RETURNS character varying AS +$$ +BEGIN + +UPDATE pghydro.pghft_drainage_line drn +SET drn_gm = ST_CollectionExtract(ST_MakeValid(drn.drn_gm),2) +FROM +( +SELECT (pghfn_DrainageLineIsNotValid).drn_pk_ as drn_pk +FROM pgh_consistency.pghfn_DrainageLineIsNotValid() +) as a +WHERE a.drn_pk = drn.drn_pk; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_MakeDrainageLineValid(); + +------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_DrainageLineHaveSelfIntersection() +------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineHaveSelfIntersection() +RETURNS TABLE(drn_pk_ integer, drn_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT drn_pk, drn_gm +FROM +( +WITH auto_intersect AS ( +SELECT a.drn_pk as drn_pk_a, b.drn_pk as drn_pk_b, a.drn_gm as drn_gm_a, b.drn_gm as drn_gm_b +FROM pghydro.pghft_drainage_line AS a, pghydro.pghft_drainage_line AS b +WHERE (a.drn_gm && b.drn_gm) +AND +ST_Relate(a.drn_gm, b.drn_gm) IN ( +--TOUCH +'F01FF0102', +'F010F0102', +--'FF1F00102', +'F01FF01F2', +'F010F01F2', +'F01F001F2', +'F010FF1F2', +--'FF1F0F1F2', +'F0100F1F2', +--CROSS +'0F1FF0102', +'0010F0102', +'0F1F00102', +'001FF0102', +'0010F01F2', +'001F001F2', +'001FF01F2', +'0F1F0F1F2', +'00100F1F2', +'0010FF1F2', +--OVERLAP +'1F1FF0102', +'1010F0102', +'1F1F00102', +'1F10F0102', +'1010FF102', +'1F100F102', +'1F10FF102', +'1F1F0F1F2', +'10100F1F2', +'1010FF1F2', +--WITHIN +'1FF00F102', +'1FF0FF102' +--'1FFF0FFF2' +) +) +SELECT drn_pk_a as drn_pk, drn_gm_a as drn_gm +FROM auto_intersect aut +UNION ALL +SELECT drn_pk_b as drn_pk, drn_gm_b as drn_gm +FROM auto_intersect aut +) as a; + + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_DrainageLineHaveSelfIntersection() + +---------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numDrainageLineHaveSelfIntersection() +---------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineHaveSelfIntersection() +RETURNS bigint AS +$$ +SELECT count(drn_pk) +FROM +( +SELECT (pghfn_DrainageLineHaveSelfIntersection).drn_pk_ as drn_pk +FROM pgh_consistency.pghfn_DrainageLineHaveSelfIntersection() +) as a; +$$ +LANGUAGE SQL; + + +--SELECT pgh_consistency.pghfn_numDrainageLineHaveSelfIntersection(); + +----------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_DrainageLineWithinDrainageLine() +----------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineWithinDrainageLine() +RETURNS TABLE(drn_pk_ integer, drn_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT a.drn_pk, a.drn_gm +FROM pghydro.pghft_drainage_line a, pghydro.pghft_drainage_line b +WHERE ST_RELATE(a.drn_gm, b.drn_gm) IN +( +'1FF00F102', +'1FF0FF102' +--'1FFF0FFF2' +) +AND (a.drn_gm && b.drn_gm) + +UNION ALL + +SELECT a.drn_pk, a.drn_gm +FROM pghydro.pghft_drainage_line a, pghydro.pghft_drainage_line b +WHERE ST_RELATE(a.drn_gm, b.drn_gm) IN +( +--'1FF00F102', +--'1FF0FF102', +'1FFF0FFF2' +) +AND (a.drn_gm && b.drn_gm) +AND a.drn_pk <> b.drn_pk +AND a.drn_pk < b.drn_pk; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_DrainageLineWithinDrainageLine() + +-------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numDrainageLineWithinDrainageLine() +-------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineWithinDrainageLine() +RETURNS bigint AS +$$ +SELECT count(drn_pk) +FROM +( +SELECT (pghfn_DrainageLineWithinDrainageLine).drn_pk_ as drn_pk +FROM pgh_consistency.pghfn_DrainageLineWithinDrainageLine() +) as b; +$$ +LANGUAGE SQL; + + +----------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_DeleteDrainageLineWithinDrainageLine() +----------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DeleteDrainageLineWithinDrainageLine() +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +DELETE FROM pghydro.pghft_drainage_line +WHERE drn_pk IN +( +SELECT drn_pk +FROM pgh_consistency.pghft_drainagelinewithindrainageline +); + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_DeleteDrainageLineWithinDrainageLine(); + +---------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_DrainageLineLoops() +---------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineLoops() +RETURNS TABLE(plg_pk_ integer, plg_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + + +SELECT (ROW_NUMBER() OVER ())::integer AS plg_pk, clp_gm as plg_gm +FROM +( +SELECT drn_pk, ST_MULTI((ST_Dump(b.plg_gm)).geom) as clp_gm +FROM +( +SELECT max(drn_pk) as drn_pk, ST_Polygonize(drn_gm) as plg_gm +FROM +( +SELECT drn_pk, (st_dump(drn_gm)).geom AS drn_gm +FROM pghydro.pghft_drainage_line +) as a +) as b +) as c; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + + +-------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numDrainageLineLoops() +-------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineLoops() +RETURNS bigint AS +$$ +SELECT count(plg_pk) +FROM +( +SELECT (pghfn_DrainageLineLoops).plg_pk_ as plg_pk +FROM pgh_consistency.pghfn_DrainageLineLoops() +) as c; +$$ +LANGUAGE SQL; + + +---------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_DrainageLineHaveGeometryEmpty() +---------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineHaveGeometryEmpty() +RETURNS TABLE(drn_pk_ integer, drn_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT drn_pk, drn_gm +FROM pghydro.pghft_drainage_line +WHERE drn_gm is null +OR ST_IsEmpty(drn_gm) = true +OR ST_length(drn_gm) = 0; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + + +--SELECT pgh_consistency.pghfn_DrainageLineHaveGeometryEmpty() + +------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numDrainageLineHaveGeometryEmpty() +------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineHaveGeometryEmpty() +RETURNS bigint AS +$$ +SELECT count(drn_pk) +FROM +( +SELECT (pghfn_DrainageLineHaveGeometryEmpty).drn_pk_ as drn_pk +FROM pgh_consistency.pghfn_DrainageLineHaveGeometryEmpty() +) as b; +$$ +LANGUAGE SQL; + + +------------------------------------------------------------------ +--FUNCTION pgh_consistency.pghfn_DeleteDrainageLineGeometryEmpty() +------------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DeleteDrainageLineGeometryEmpty() +RETURNS character varying AS +$$ +BEGIN + +DELETE FROM pghydro.pghft_drainage_line +WHERE drn_pk in +( +SELECT drn_pk +FROM +( +SELECT (pghfn_DrainageLineHaveGeometryEmpty).drn_pk_ as drn_pk +FROM pgh_consistency.pghfn_DrainageLineHaveGeometryEmpty() +) as b +); + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +----------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_PointValenceValue2() +----------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_PointValenceValue2() +RETURNS TABLE(drp_pk_ integer, drp_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT drp_pk, ST_MULTI(drp_gm) as drp_gm +FROM pghydro.pghft_drainage_point +WHERE drp_nu_valence = 2; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + + +-------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numPointValenceValue2() +-------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numPointValenceValue2() +RETURNS bigint AS +$$ +SELECT count(drp_pk) +FROM +( +SELECT (pghfn_PointValenceValue2).drp_pk_ as drp_pk +FROM pgh_consistency.pghfn_PointValenceValue2() +) as a; +$$ +LANGUAGE SQL; + + +----------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_unionDrainageLine(integer) +----------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_unionDrainageLine(integer) +RETURNS character varying AS +$$ +DECLARE + +time_ timestamp; + +BEGIN + +INSERT INTO pghydro.pghft_drainage_line (drn_gm) +SELECT ST_Multi(ST_LineMerge(ST_Union(a.drn_gm))) as drn_gm +FROM +( +SELECT drn_pk, drn_gm +FROM pghydro.pghft_drainage_line +WHERE drn_drp_pk_targetnode = $1 +OR drn_drp_pk_sourcenode = $1 +) as a; + +DELETE +FROM pghydro.pghft_drainage_line +WHERE drn_pk in +( +SELECT drn_pk +FROM pghydro.pghft_drainage_line +WHERE drn_drp_pk_targetnode = $1 +OR drn_drp_pk_sourcenode = $1 +); + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + + +-------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_unionDrainageLine(integer, integer) +-------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_unionDrainageLine(integer, integer) +RETURNS character varying AS +$$ +DECLARE + +time_ timestamp; + +BEGIN + +INSERT INTO pghydro.pghft_drainage_line (drn_gm) +SELECT ST_Multi(ST_LineMerge(ST_Union(a.drn_gm))) as drn_gm +FROM +( +SELECT drn_pk, drn_gm +FROM pghydro.pghft_drainage_line +WHERE drn_pk = $1 +OR drn_pk = $2 +) as a; + +DELETE +FROM pghydro.pghft_drainage_line +WHERE drn_pk in +( +SELECT drn_pk +FROM pghydro.pghft_drainage_line +WHERE drn_pk = $1 +OR drn_pk = $2 +); + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + + +------------------------------------------------------------ +--FUNCTION pgh_consistency.pghfn_unionDrainageLinevalence2() +------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_unionDrainageLinevalence2() +RETURNS varchar AS +$$ +DECLARE + +_r record; +time_ timestamp; +max_pseudo_node integer; +i integer; + +BEGIN + +DROP INDEX IF EXISTS pghydro.drp_pk_idx; + +DROP INDEX IF EXISTS pghydro.drp_nu_valence_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +CREATE INDEX drp_pk_idx ON pghydro.pghft_drainage_point(drp_pk); + +CREATE INDEX drp_nu_valence_idx ON pghydro.pghft_drainage_point(drp_nu_valence); + +CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); + +CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); + +SELECT INTO max_pseudo_node count(drp_pk) FROM pghydro.pghft_drainage_point WHERE drp_nu_valence = 2; + +i := 1; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + + + FOR _r IN SELECT drp_pk FROM pghydro.pghft_drainage_point WHERE drp_nu_valence = 2 + + LOOP + + PERFORM pgh_consistency.pghfn_unionDrainageLine(_r.drp_pk); + + RAISE NOTICE 'PSEUDO-NODE %/%', i, max_pseudo_node; + + i := i + 1; + + END LOOP; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +DROP INDEX IF EXISTS pghydro.drp_pk_idx; + +DROP INDEX IF EXISTS pghydro.drp_nu_valence_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +DELETE FROM pghydro.pghft_drainage_line +WHERE drn_gm is null; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + + +----------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_PointValenceValue4() +----------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_PointValenceValue4() +RETURNS TABLE(drp_pk_ integer, drp_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT drp_pk, ST_MULTI(drp_gm) as drp_gm +FROM pghydro.pghft_drainage_point +WHERE drp_nu_valence = 4; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + + +-------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numPointValenceValue4() +-------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numPointValenceValue4() +RETURNS bigint AS +$$ +SELECT count(drp_pk) +FROM +( +SELECT (pghfn_PointValenceValue4).drp_pk_ as drp_pk +FROM pgh_consistency.pghfn_PointValenceValue4() +) as a; +$$ +LANGUAGE SQL; + +------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_DrainageLineIsDisconnected() +------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineIsDisconnected() +RETURNS TABLE(drn_pk_ integer, drn_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT drn_pk, drn_gm +FROM pghydro.pghft_drainage_line +WHERE drn_bo_flowdirection is null; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + + +---------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numDrainageLineIsDisconnected() +---------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineIsDisconnected() +RETURNS bigint AS +$$ +SELECT count(drn_pk) +FROM +( +SELECT (pghfn_DrainageLineIsDisconnected).drn_pk_ as drn_pk +FROM pgh_consistency.pghfn_DrainageLineIsDisconnected() +) as a; +$$ +LANGUAGE SQL; + +------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_PointDivergent() +------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_PointDivergent() +RETURNS TABLE(drp_pk_ integer, drp_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT a.drp_pk, ST_MULTI(drp.drp_gm) as drp_gm +FROM +( +SELECT drn_drp_pk_targetnode as drp_pk +FROM +( +SELECT drn_drp_pk_targetnode, count(drn_drp_pk_targetnode) +FROM +( +SELECT drn_drp_pk_targetnode, drn_drp_pk_sourcenode +FROM pghydro.pghft_drainage_line +) as a +GROUP BY drn_drp_pk_targetnode +HAVING count(drn_drp_pk_targetnode) = 1 +) as b, pghydro.pghft_shoreline_ending_point as c +WHERE c.sep_drp_pk <> b.drn_drp_pk_targetnode +) as a, pghydro.pghft_drainage_point drp +WHERE a.drp_pk = drp.drp_pk; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + +---------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numPointDivergent() +---------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numPointDivergent() +RETURNS bigint AS +$$ +SELECT count(drp_pk) +FROM +( +SELECT (pghfn_PointDivergent).drp_pk_ as drp_pk +FROM pgh_consistency.pghfn_PointDivergent() +) as a; +$$ +LANGUAGE SQL; + +---------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_DrainageAreaIsNotSingle() +---------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageAreaIsNotSingle() +RETURNS TABLE(dra_pk_ integer, dra_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT dra_pk, dra_gm +FROM pghydro.pghft_drainage_area +WHERE ST_NumGeometries(dra_gm) > 1; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + + +------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numDrainageAreaIsNotSingle() +------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageAreaIsNotSingle() +RETURNS bigint AS +$$ +SELECT count(dra_pk) +FROM +( +SELECT (pghfn_DrainageAreaIsNotSingle).dra_pk_ as dra_pk +FROM pgh_consistency.pghfn_DrainageAreaIsNotSingle() +) as a; +$$ +LANGUAGE SQL; + + +---------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_DrainageAreaIsNotSimple() +---------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageAreaIsNotSimple() +RETURNS TABLE(dra_pk_ integer, dra_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT dra_pk, dra_gm +FROM pghydro.pghft_drainage_area +WHERE ST_IsSimple(dra_gm) <> 't'; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + + +------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numDrainageAreaIsNotSimple() +------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageAreaIsNotSimple() +RETURNS bigint AS +$$ +SELECT count(dra_pk) +FROM +( +SELECT (pghfn_DrainageAreaIsNotSimple).dra_pk_ as dra_pk +FROM pgh_consistency.pghfn_DrainageAreaIsNotSimple() +) as a; +$$ +LANGUAGE SQL; + + +--------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_DrainageAreaIsNotValid() +--------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageAreaIsNotValid() +RETURNS TABLE(dra_pk_ integer, dra_gm_ geometry, dra_gm_point_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT dra_pk, dra_gm, ST_MULTI(ST_SETSRID(location(ST_IsValidDetail(dra_gm)), ST_SRID(dra_gm))) as dra_gm_point +FROM pghydro.pghft_drainage_area +WHERE ST_IsValidReason(dra_gm) <> 'Valid Geometry'; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + + +------------------------------------------------------------ +--FUNCTION pgh_consistency.pghfn_numDrainageAreaIsNotValid() +------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageAreaIsNotValid() +RETURNS bigint AS +$$ +SELECT count(dra_pk) +FROM +( +SELECT (pghfn_DrainageAreaIsNotValid).dra_pk_ as dra_pk +FROM pgh_consistency.pghfn_DrainageAreaIsNotValid() +) as a; +$$ +LANGUAGE SQL; + + +------------------------------------------------------------------ +--FUNCTION pgh_consistency.pghfn_DrainageAreaOverlapDrainageArea() +------------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageAreaOverlapDrainageArea() +RETURNS TABLE(int_pk_ bigint, dra_pk_a_ integer, dra_pk_b_ integer, dra_gm_a_ geometry, dra_gm_b_ geometry, int_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT row_number() over() as int_pk, dra_pk_a, dra_pk_b, dra_gm_a, dra_gm_b, int_gm +FROM +( +SELECT a.dra_pk as dra_pk_a, b.dra_pk as dra_pk_b, a.dra_gm as dra_gm_a, b.dra_gm as dra_gm_b, ST_Multi((ST_Dump(ST_Intersection(a.dra_gm, b.dra_gm))).geom) as int_gm +FROM pghydro.pghft_drainage_area AS a, pghydro.pghft_drainage_area AS b +WHERE (a.dra_gm && b.dra_gm) +AND ST_OVERLAPS(a.dra_gm, b.dra_gm) = true +AND a.dra_pk < b.dra_pk +) as a +WHERE st_geometrytype(int_gm) = 'ST_MultiPolygon'; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_DrainageAreaOverlapDrainageArea(); + +--------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numDrainageAreaOverlapDrainageArea() +--------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageAreaOverlapDrainageArea() +RETURNS bigint AS +$$ +SELECT count(int_pk) +FROM +( +SELECT (pghfn_DrainageAreaOverlapDrainageArea).int_pk_ as int_pk +FROM pgh_consistency.pghfn_DrainageAreaOverlapDrainageArea() +) as a; +$$ +LANGUAGE SQL; + + +--SELECT pgh_consistency.pghfn_numDrainageAreaOverlapDrainageArea(); + +------------------------------------------------------------ +--FUNCTION pgh_consistency.pghfn_RemoveDrainageAreaOverlap() +------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_RemoveDrainageAreaOverlap() +RETURNS character varying AS +$$ +DECLARE + +_r record; +time_ timestamp; +max_id integer; +i integer; + +BEGIN + +SELECT INTO max_id count(id) FROM pgh_consistency.pghft_drainageareaoverlapdrainagearea; + +i := 1; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + + FOR _r IN SELECT id FROM pgh_consistency.pghft_drainageareaoverlapdrainagearea + + LOOP + + PERFORM pgh_consistency.pghfn_removedrainageareaoverlaps(_r.id::integer); + + RAISE NOTICE 'Overlap %/%', i, max_id; + + i := i + 1; + + END LOOP; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_RemoveDrainageAreaOverlap(); + +------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_RemoveDrainageAreaOverlaps() +------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_removedrainageareaoverlaps(integer) +RETURNS void AS +$$ +DECLARE + +BEGIN + +UPDATE pghydro.pghft_drainage_area dra +SET dra_gm = ST_MULTI(ST_CollectionExtract(ST_Difference(dra.dra_gm, a.dra_gm), 3)) +FROM +( +SELECT dra_pk_a, dra_gm_b as dra_gm +FROM pgh_consistency.pghft_drainageareaoverlapdrainagearea +WHERE id = $1 +) as a +WHERE a.dra_pk_a = dra.dra_pk; + +END; +$$ +LANGUAGE PLPGSQL; + +----------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_DrainageAreaWithinDrainageArea() +----------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageAreaWithinDrainageArea() +RETURNS TABLE(dra_pk_ integer, dra_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT a.dra_pk, a.dra_gm +FROM pghydro.pghft_drainage_area a, pghydro.pghft_drainage_area b +WHERE ST_RELATE(a.dra_gm, b.dra_gm) IN +( +--WITHIN +'2FF11F212', +'2FF10F212', +'2FF1FF212' +--'2FFF1FFF2' +) +AND (a.dra_gm && b.dra_gm) + +UNION ALL + +SELECT a.dra_pk, a.dra_gm +FROM pghydro.pghft_drainage_area a, pghydro.pghft_drainage_area b +WHERE ST_RELATE(a.dra_gm, b.dra_gm) IN +( +--WITHIN +--'2FF11F212', +--'2FF10F212', +--'2FF1FF212', +'2FFF1FFF2' +) +AND (a.dra_gm && b.dra_gm) +AND a.dra_pk <> b.dra_pk +AND a.dra_pk < b.dra_pk; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + +-------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numDrainageAreaWithinDrainageArea() +-------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageAreaWithinDrainageArea() +RETURNS bigint AS +$$ +SELECT count(dra_pk) +FROM +( +SELECT (pghfn_DrainageAreaWithinDrainageArea).dra_pk_ as dra_pk +FROM pgh_consistency.pghfn_DrainageAreaWithinDrainageArea() +) as b; +$$ +LANGUAGE SQL; + + +----------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_DeleteDrainageAreaWithinDrainageArea() +----------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DeleteDrainageAreaWithinDrainageArea() +RETURNS character varying AS +$$ +BEGIN + +DELETE FROM pghydro.pghft_drainage_area +WHERE dra_pk IN +( +SELECT dra_pk +FROM pgh_consistency.pghft_drainageareawithindrainagearea +); + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_DeleteDrainageAreaWithinDrainageArea(); + +---------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_DrainageAreaHaveGeometryEmpty() +---------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageAreaHaveGeometryEmpty() +RETURNS TABLE(dra_pk_ integer, dra_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT dra_pk, dra_gm +FROM pghydro.pghft_drainage_area +WHERE dra_gm is null +OR ST_IsEmpty(dra_gm) = true +OR ST_AREA(dra_gm) = 0; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + + +------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numDrainageAreaHaveGeometryEmpty() +------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageAreaHaveGeometryEmpty() +RETURNS bigint AS +$$ +SELECT count(dra_pk) +FROM +( +SELECT (pghfn_DrainageAreaHaveGeometryEmpty).dra_pk_ as dra_pk +FROM pgh_consistency.pghfn_DrainageAreaHaveGeometryEmpty() +) as b; +$$ +LANGUAGE SQL; + + +------------------------------------------------------------------ +--FUNCTION pgh_consistency.pghfn_DeleteDrainageAreaGeometryEmpty() +------------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DeleteDrainageAreaGeometryEmpty() +RETURNS character varying AS +$$ +BEGIN + +DELETE FROM pghydro.pghft_drainage_area +WHERE dra_pk in +( +SELECT dra_pk +FROM +( +SELECT (pghfn_DrainageAreaHaveGeometryEmpty).dra_pk_ as dra_pk +FROM pgh_consistency.pghfn_DrainageAreaHaveGeometryEmpty() +) as b +); + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_DrainageAreaNoDrainageLine() +------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageAreaNoDrainageLine() +RETURNS TABLE(dra_pk_ integer, dra_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT hin.hin_dra_pk as dra_pk, dra.dra_gm as dra_gm +FROM pghydro.pghft_hydro_intel hin, pghydro.pghft_drainage_area dra +WHERE hin.hin_drn_pk isnull +AND hin.hin_dra_pk = dra.dra_pk; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + + +---------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numDrainageAreaNoDrainageLine() +---------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageAreaNoDrainageLine() +RETURNS bigint AS +$$ +SELECT count(dra_pk) +FROM +( +SELECT (pghfn_DrainageAreaNoDrainageLine).dra_pk_ as dra_pk +FROM pgh_consistency.pghfn_DrainageAreaNoDrainageLine() +) as a; +$$ +LANGUAGE SQL; + + +------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_DrainageLineNoDrainageArea() +------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineNoDrainageArea() +RETURNS TABLE(drn_pk_ integer, drn_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT hin.hin_drn_pk as drn_pk, drn.drn_gm as drn_gm +FROM pghydro.pghft_hydro_intel hin, pghydro.pghft_drainage_line drn +WHERE hin.hin_dra_pk isnull +AND hin.hin_drn_pk = drn.drn_pk; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + + +---------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numDrainageLineNoDrainageArea() +---------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineNoDrainageArea() +RETURNS bigint AS +$$ +SELECT count(drn_pk) +FROM +( +SELECT (pghfn_DrainageLineNoDrainageArea).drn_pk_ as drn_pk +FROM pgh_consistency.pghfn_DrainageLineNoDrainageArea() +) as a; +$$ +LANGUAGE SQL; + + +------------------------------------------------------------------ +--FUNCTION pgh_consistency.pghfn_DrainageAreaMoreOneDrainageLine() +------------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageAreaMoreOneDrainageLine() +RETURNS TABLE(dra_pk_ integer, dra_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT hin.hin_dra_pk as dra_pk, dra.dra_gm as dra_gm +FROM pghydro.pghft_hydro_intel hin, pghydro.pghft_drainage_area dra +WHERE hin.hin_count_dra_pk >=2 +AND hin.hin_dra_pk = dra.dra_pk; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + + +--------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numDrainageAreaMoreOneDrainageLine() +--------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageAreaMoreOneDrainageLine() +RETURNS bigint +AS +$$ + +SELECT count(dra_pk) +FROM +( +SELECT (pghfn_DrainageAreaMoreOneDrainageLine).dra_pk_ as dra_pk +FROM pgh_consistency.pghfn_DrainageAreaMoreOneDrainageLine() +) as a; + +$$ +LANGUAGE SQL; + + +------------------------------------------------------------------ +--FUNCTION pgh_consistency.pghfn_DrainageLineMoreOneDrainageArea() +------------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineMoreOneDrainageArea() +RETURNS TABLE(drn_pk_ integer, drn_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT hin.hin_drn_pk as drn_pk, drn.drn_gm as drn_gm +FROM pghydro.pghft_hydro_intel hin, pghydro.pghft_drainage_line drn +WHERE hin.hin_count_drn_pk >=2 +AND hin.hin_drn_pk = drn.drn_pk; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + + +--------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numDrainageLineMoreOneDrainageArea() +--------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineMoreOneDrainageArea() +RETURNS bigint AS +$$ +SELECT count(drn_pk) +FROM +( +SELECT (pghfn_DrainageLineMoreOneDrainageArea).drn_pk_ as drn_pk +FROM pgh_consistency.pghfn_DrainageLineMoreOneDrainageArea() +) as a; +$$ +LANGUAGE SQL; + + +--------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_FillGapsInDrainageArea() +--------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_FillGapsInDrainageArea() +RETURNS varchar AS +$$ +DECLARE + +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +DROP TABLE IF EXISTS pgh_consistency.temp_union_drainage_area; + +CREATE TABLE pgh_consistency.temp_union_drainage_area as +SELECT ST_MemUnion(dra_gm) as geom +FROM pghydro.pghft_drainage_area; + +INSERT INTO pghydro.pghft_drainage_area(dra_gm) +SELECT ST_MULTI(geom) +FROM +( +SELECT path(ST_DumpRings(st_geometryn(geom,1))), (ST_DumpRings(st_geometryn(geom,1))).geom +FROM pgh_consistency.temp_union_drainage_area +) as a +WHERE a.path[1] > 0; + +DROP TABLE IF EXISTS pgh_consistency.temp_union_drainage_area; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +-------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_UnionDrainageArea(integer, integer) +-------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_UnionDrainageArea(integer, integer) +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +INSERT INTO pghydro.pghft_drainage_area (dra_gm) +SELECT ST_Multi(ST_Union(a.dra_gm)) as dra_gm +FROM +( +SELECT dra_pk, dra_gm +FROM pghydro.pghft_drainage_area +WHERE dra_pk = $1 +OR dra_pk = $2 +) as a; + +DELETE +FROM pghydro.pghft_drainage_area +WHERE dra_pk in +( +SELECT dra_pk +FROM pghydro.pghft_drainage_area +WHERE dra_pk = $1 +OR dra_pk = $2 +); + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK - RUN AGAIN THE FUNCTION pghydro.pghfn_AssociationDrainageLine_DrainageArea()'; + +END; +$$ +LANGUAGE PLPGSQL; + + +------------------------------------------------------------------ +--FUNCTION pgh_consistency.pghfn_uniondrainageareanodrainageline() +------------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_uniondrainageareanodrainageline() +RETURNS varchar AS +$$ +DECLARE +_r record; +time_ timestamp; +numdrainageareanodrainageline integer; +i integer; + +BEGIN + +PERFORM setval(('pghydro.dra_pk_seq'::text)::regclass, a.nextval, false) +FROM +( +SELECT max(dra_pk)+1 as nextval +FROM pghydro.pghft_drainage_area +) as a; + +DROP INDEX IF EXISTS pghydro.dra_pk_idx; + +DROP INDEX IF EXISTS pghydro.dra_gm_idx; + +CREATE INDEX dra_gm_idx ON pghydro.pghft_drainage_area USING GIST(dra_gm); + +CREATE INDEX dra_pk_idx ON pghydro.pghft_drainage_area(dra_pk); + +SELECT INTO numdrainageareanodrainageline pgh_consistency.pghfn_numdrainageareanodrainageline(); + +i := 1; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + + + FOR _r IN + + WITH a AS + ( + SELECT b.dra_pk, dra.dra_pk as dra_pk_touch, ST_LENGTH(ST_INTERSECTION(b.dra_gm, dra.dra_gm)) as length + FROM + ( + SELECT a.dra_pk, dra.dra_gm + FROM pghydro.pghft_drainage_area dra, (SELECT(pghfn_drainageareanodrainageline).dra_pk_ as dra_pk FROM pgh_consistency.pghfn_drainageareanodrainageline()) as a + WHERE dra.dra_pk = a.dra_pk + ) as b, pghydro.pghft_drainage_area as dra + WHERE ST_TOUCHES(b.dra_gm, dra.dra_gm) + AND (b.dra_gm && dra.dra_gm) + ) + SELECT a.dra_pk, a.dra_pk_touch + FROM a, (SELECT dra_pk, max(length) as max_length FROM a GROUP BY dra_pk) as b + WHERE a.length = max_length + AND a.dra_pk = b.dra_pk + ORDER BY a.dra_pk + + LOOP + + PERFORM pgh_consistency.pghfn_UnionDrainageArea(_r.dra_pk, _r.dra_pk_touch); + + RAISE NOTICE 'DRAINAGE AREA NO DRAINAGE LINE %/%', i, numdrainageareanodrainageline; + + i := i + 1; + + END LOOP; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +DROP INDEX IF EXISTS pghydro.dra_pk_idx; + +DROP INDEX IF EXISTS pghydro.dra_gm_idx; + +DELETE FROM pghydro.pghft_drainage_area +WHERE dra_gm is null; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +----------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_DrainageLineTouchDrainageLine() +----------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineTouchDrainageLine() +RETURNS TABLE(drn_pk_ integer, drn_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT drn_pk, drn_gm +FROM +( +WITH auto_intersect AS ( +SELECT a.drn_pk as drn_pk_a, b.drn_pk as drn_pk_b, a.drn_gm as drn_gm_a, b.drn_gm as drn_gm_b +FROM pghydro.pghft_drainage_line AS a, pghydro.pghft_drainage_line AS b +WHERE (a.drn_gm && b.drn_gm) +AND +ST_Relate(a.drn_gm, b.drn_gm) IN ( +--TOUCH +'F01FF0102', +'F010F0102', +--'FF1F00102', +'F01FF01F2', +'F010F01F2', +'F01F001F2', +'F010FF1F2', +--'FF1F0F1F2', +'F0100F1F2' +) +) +SELECT drn_pk_a as drn_pk, drn_gm_a as drn_gm +FROM auto_intersect aut +UNION ALL +SELECT drn_pk_b as drn_pk, drn_gm_b as drn_gm +FROM auto_intersect aut +) as a; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_DrainageLineTouchDrainageLine() + +-------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numDrainageLineTouchDrainageLine() +-------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineTouchDrainageLine() +RETURNS bigint AS +$$ +SELECT count(drn_pk) +FROM +( +SELECT (pghfn_DrainageLineTouchDrainageLine).drn_pk_ as drn_pk +FROM pgh_consistency.pghfn_DrainageLineTouchDrainageLine() +) as b; +$$ +LANGUAGE SQL; + + +--SELECT pgh_consistency.pghfn_numDrainageLineTouchDrainageLine(); + +----------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_DrainageLineCrossDrainageLine() +----------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineCrossDrainageLine() +RETURNS TABLE(drn_pk_ integer, drn_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT drn_pk, drn_gm +FROM +( +WITH auto_intersect AS ( +SELECT a.drn_pk as drn_pk_a, b.drn_pk as drn_pk_b, a.drn_gm as drn_gm_a, b.drn_gm as drn_gm_b +FROM pghydro.pghft_drainage_line AS a, pghydro.pghft_drainage_line AS b +WHERE (a.drn_gm && b.drn_gm) +AND +ST_Relate(a.drn_gm, b.drn_gm) IN ( +--CROSS +'0F1FF0102', +'0010F0102', +'0F1F00102', +'001FF0102', +'0010F01F2', +'001F001F2', +'001FF01F2', +'0F1F0F1F2', +'00100F1F2', +'0010FF1F2' +) +) +SELECT drn_pk_a as drn_pk, drn_gm_a as drn_gm +FROM auto_intersect aut +) as a; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_DrainageLineCrossDrainageLine() + +-------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numDrainageLineCrossDrainageLine() +-------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineCrossDrainageLine() +RETURNS bigint AS +$$ +SELECT count(drn_pk) +FROM +( +SELECT (pghfn_DrainageLineCrossDrainageLine).drn_pk_ as drn_pk +FROM pgh_consistency.pghfn_DrainageLineCrossDrainageLine() +) as b; +$$ +LANGUAGE SQL; + + +--SELECT pgh_consistency.pghfn_numDrainageLineCrossDrainageLine(); + +------------------------------------------------------------------ +--FUNCTION pgh_consistency.pghfn_DrainageLineOverlapDrainageLine() +------------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_DrainageLineOverlapDrainageLine() +RETURNS TABLE(drn_pk_ integer, drn_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT drn_pk, drn_gm +FROM +( +WITH auto_intersect AS ( +SELECT a.drn_pk as drn_pk_a, b.drn_pk as drn_pk_b, a.drn_gm as drn_gm_a, b.drn_gm as drn_gm_b +FROM pghydro.pghft_drainage_line AS a, pghydro.pghft_drainage_line AS b +WHERE (a.drn_gm && b.drn_gm) +AND +ST_Relate(a.drn_gm, b.drn_gm) IN ( +--OVERLAP +'1F1FF0102', +'1010F0102', +'1F1F00102', +'1F10F0102', +'1010FF102', +'1F100F102', +'1F10FF102', +'1F1F0F1F2', +'10100F1F2', +'1010FF1F2' +) +) +SELECT drn_pk_a as drn_pk, drn_gm_a as drn_gm +FROM auto_intersect aut +) as a; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_DrainageLineOverlapDrainageLine() + +--------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numDrainageLineOverlapDrainageLine() +--------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineOverlapDrainageLine() +RETURNS bigint AS +$$ +SELECT count(drn_pk) +FROM +( +SELECT (pghfn_DrainageLineOverlapDrainageLine).drn_pk_ as drn_pk +FROM pgh_consistency.pghfn_DrainageLineOverlapDrainageLine() +) as b; +$$ +LANGUAGE SQL; + +--SELECT pgh_consistency.pghfn_numDrainageLineOverlapDrainageLine(); + +------------------------------------------------------------------------------ +--FUNCTION pgh_consistency.pghfn_UpdateDrainageLineConsistencyGeometryTables() +------------------------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_UpdateDrainageLineConsistencyGeometryTables() +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +--TABLE pgh_consistency.pghft_DrainageLineIsNotSingle + +TRUNCATE pgh_consistency.pghft_DrainageLineIsNotSingle; + +INSERT INTO pgh_consistency.pghft_DrainageLineIsNotSingle +SELECT row_number() OVER () as id, (pghfn_DrainageLineIsNotSingle).drn_pk_ as drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageLineIsNotSingle).drn_gm_ as drn_gm +FROM pgh_consistency.pghfn_DrainageLineIsNotSingle(); + +--TABLE pgh_consistency.pghft_DrainageLineIsNotSimple + +TRUNCATE pgh_consistency.pghft_DrainageLineIsNotSimple; + +INSERT INTO pgh_consistency.pghft_DrainageLineIsNotSimple +SELECT row_number() OVER () as id, (pghfn_DrainageLineIsNotSimple).drn_pk_ as drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageLineIsNotSimple).drn_gm_ as drn_gm +FROM pgh_consistency.pghfn_DrainageLineIsNotSimple(); + +--TABLE pgh_consistency.pghft_DrainageLineIsNotValid + +TRUNCATE pgh_consistency.pghft_DrainageLineIsNotValid; + +INSERT INTO pgh_consistency.pghft_DrainageLineIsNotValid +SELECT row_number() OVER () as id, (pghfn_DrainageLineIsNotValid).drn_pk_ as drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageLineIsNotValid).drn_gm_ as drn_gm +FROM pgh_consistency.pghfn_DrainageLineIsNotValid(); + +--TABLE pgh_consistency.pghft_DrainageLineIsNotValidPoint + +TRUNCATE pgh_consistency.pghft_DrainageLineIsNotValidPoint; + +INSERT INTO pgh_consistency.pghft_DrainageLineIsNotValidPoint +SELECT row_number() OVER () as id, (pghfn_DrainageLineIsNotValid).drn_pk_ as drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageLineIsNotValid).drn_gm_point_ as drn_gm_point +FROM pgh_consistency.pghfn_DrainageLineIsNotValid(); + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_UpdateDrainageLineConsistencyGeometryTables(); + +---------------------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_UpdateDrainageLineConsistencyTopologyTables_1() +---------------------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_UpdateDrainageLineConsistencyTopologyTables_1() +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +/* +--TABLE pgh_consistency.pghft_DrainageLineHaveSelfIntersection + +TRUNCATE pgh_consistency.pghft_DrainageLineHaveSelfIntersection; + +INSERT INTO pgh_consistency.pghft_DrainageLineHaveSelfIntersection +SELECT row_number() OVER () as id, (pghfn_DrainageLineHaveSelfIntersection).drn_pk_ as drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageLineHaveSelfIntersection).drn_gm_ as drn_gm +FROM pgh_consistency.pghfn_DrainageLineHaveSelfIntersection(); +*/ + +--TABLE pgh_consistency.pghft_DrainageLineWithinDrainageLine + +TRUNCATE pgh_consistency.pghft_DrainageLineWithinDrainageLine; + +INSERT INTO pgh_consistency.pghft_DrainageLineWithinDrainageLine +SELECT row_number() OVER () as id, (pghfn_DrainageLineWithinDrainageLine).drn_pk_ as drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageLineWithinDrainageLine).drn_gm_ as drn_gm +FROM pgh_consistency.pghfn_DrainageLineWithinDrainageLine(); + +--TABLE pgh_consistency.pghft_DrainageLineOverlapDrainageLine + +TRUNCATE pgh_consistency.pghft_DrainageLineOverlapDrainageLine; + +INSERT INTO pgh_consistency.pghft_DrainageLineOverlapDrainageLine +SELECT row_number() OVER () as id, (pghfn_DrainageLineOverlapDrainageLine).drn_pk_ as drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageLineOverlapDrainageLine).drn_gm_ as drn_gm +FROM pgh_consistency.pghfn_DrainageLineOverlapDrainageLine(); + +--TABLE pgh_consistency.pghft_DrainageLineLoops + +TRUNCATE pgh_consistency.pghft_DrainageLineLoops; + +INSERT INTO pgh_consistency.pghft_DrainageLineLoops +SELECT row_number() OVER () as id, (pghfn_DrainageLineLoops).plg_pk_ as plg_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageLineLoops).plg_gm_ as plg_gm, ST_AREA((pghfn_DrainageLineLoops).plg_gm_) as area +FROM pgh_consistency.pghfn_DrainageLineLoops(); + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_UpdateDrainageLineConsistencyTopologyTables_1(); + +-------------------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_UpdateDrainageLineConsistencyTopologyTables_2() +-------------------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_UpdateDrainageLineConsistencyTopologyTables_2() +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +--TABLE pgh_consistency.pghft_DrainageLineCrossDrainageLine + +TRUNCATE pgh_consistency.pghft_DrainageLineCrossDrainageLine; + +INSERT INTO pgh_consistency.pghft_DrainageLineCrossDrainageLine +SELECT row_number() OVER () as id, (pghfn_DrainageLineCrossDrainageLine).drn_pk_ as drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageLineCrossDrainageLine).drn_gm_ as drn_gm +FROM pgh_consistency.pghfn_DrainageLineCrossDrainageLine(); + +--TABLE pgh_consistency.pghft_DrainageLineTouchDrainageLine + +TRUNCATE pgh_consistency.pghft_DrainageLineTouchDrainageLine; + +INSERT INTO pgh_consistency.pghft_DrainageLineTouchDrainageLine +SELECT row_number() OVER () as id, (pghfn_DrainageLineTouchDrainageLine).drn_pk_ as drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageLineTouchDrainageLine).drn_gm_ as drn_gm +FROM pgh_consistency.pghfn_DrainageLineTouchDrainageLine(); + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_UpdateDrainageLineConsistencyTopologyTables_2(); + +----------------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_UpdateDrainageLineNetworkConsistencyTables() +----------------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_UpdateDrainageLineNetworkConsistencyTables() +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +--TABLE pgh_consistency.pghft_PointValenceValue2 + +TRUNCATE pgh_consistency.pghft_PointValenceValue2; + +INSERT INTO pgh_consistency.pghft_PointValenceValue2 +SELECT row_number() OVER () as id, (pghfn_PointValenceValue2).drp_pk_ as drp_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_PointValenceValue2).drp_gm_ as drp_gm +FROM pgh_consistency.pghfn_PointValenceValue2(); + +--TABLE pgh_consistency.pghft_PointValenceValue4 + +TRUNCATE pgh_consistency.pghft_PointValenceValue4; + +INSERT INTO pgh_consistency.pghft_PointValenceValue4 +SELECT row_number() OVER () as id, (pghfn_PointValenceValue4).drp_pk_ as drp_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_PointValenceValue4).drp_gm_ as drp_gm +FROM pgh_consistency.pghfn_PointValenceValue4(); + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +END; +$$ +LANGUAGE PLPGSQL; + +-------------------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_UpdateDrainageLineConnectionConsistencyTables() +-------------------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_UpdateDrainageLineConnectionConsistencyTables() +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +--TABLE pgh_consistency.pghft_DrainageLineIsDisconnected() + +TRUNCATE pgh_consistency.pghft_DrainageLineIsDisconnected; + +INSERT INTO pgh_consistency.pghft_DrainageLineIsDisconnected +SELECT row_number() OVER () as id, (pghfn_DrainageLineIsDisconnected).drn_pk_ as drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageLineIsDisconnected).drn_gm_ as drn_gm +FROM pgh_consistency.pghfn_DrainageLineIsDisconnected(); + +--TABLE pgh_consistency.pghft_pointdivergent + +TRUNCATE pgh_consistency.pghft_pointdivergent; + +INSERT INTO pgh_consistency.pghft_pointdivergent +SELECT row_number() OVER () as id, (pghfn_PointDivergent).drp_pk_ as drp_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_PointDivergent).drp_gm_ as drp_gm +FROM pgh_consistency.pghfn_PointDivergent(); + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +END; +$$ +LANGUAGE PLPGSQL; + +------------------------------------------------------------------------------ +--FUNCTION pgh_consistency.pghfn_UpdateDrainageAreaConsistencyGeometryTables() +------------------------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_UpdateDrainageAreaConsistencyGeometryTables() +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +--TABLE pgh_consistency.pghft_DrainageAreaIsNotSingle + +TRUNCATE pgh_consistency.pghft_DrainageAreaIsNotSingle; + +INSERT INTO pgh_consistency.pghft_DrainageAreaIsNotSingle +SELECT row_number() OVER () as id, (pghfn_DrainageAreaIsNotSingle).dra_pk_ as dra_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageAreaIsNotSingle).dra_gm_ as dra_gm +FROM pgh_consistency.pghfn_DrainageAreaIsNotSingle(); + +--TABLE pgh_consistency.pghft_DrainageAreaIsNotSimple + +TRUNCATE pgh_consistency.pghft_DrainageAreaIsNotSimple; + +INSERT INTO pgh_consistency.pghft_DrainageAreaIsNotSimple +SELECT row_number() OVER () as id, (pghfn_DrainageAreaIsNotSimple).dra_pk_ as dra_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageAreaIsNotSimple).dra_gm_ as dra_gm +FROM pgh_consistency.pghfn_DrainageAreaIsNotSimple(); + +--TABLE pgh_consistency.pghft_DrainageAreaIsNotValid + +TRUNCATE pgh_consistency.pghft_DrainageAreaIsNotValid; + +INSERT INTO pgh_consistency.pghft_DrainageAreaIsNotValid +SELECT row_number() OVER () as id, (pghfn_DrainageAreaIsNotValid).dra_pk_ as dra_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageAreaIsNotValid).dra_gm_ as dra_gm, (pghfn_DrainageAreaIsNotValid).dra_gm_point_ as dra_gm_point +FROM pgh_consistency.pghfn_DrainageAreaIsNotValid(); + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +END; +$$ +LANGUAGE PLPGSQL; + +------------------------------------------------------------------------------ +--FUNCTION pgh_consistency.pghfn_UpdateDrainageAreaConsistencyTopologyTables() +------------------------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_UpdateDrainageAreaConsistencyTopologyTables() +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +--TABLE pgh_consistency.pghft_DrainageAreaOverlapDrainageArea + +TRUNCATE pgh_consistency.pghft_DrainageAreaOverlapDrainageArea; + +INSERT INTO pgh_consistency.pghft_DrainageAreaOverlapDrainageArea +SELECT row_number() OVER () as id, (pghfn_DrainageAreaOverlapDrainageArea).int_pk_ as int_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageAreaOverlapDrainageArea).dra_pk_a_ as dra_pk_a, (pghfn_DrainageAreaOverlapDrainageArea).dra_pk_b_ as dra_pk_b, (pghfn_DrainageAreaOverlapDrainageArea).int_gm_ as int_gm, (pghfn_DrainageAreaOverlapDrainageArea).dra_gm_a_ as dra_gm_a, (pghfn_DrainageAreaOverlapDrainageArea).dra_gm_b_ as dra_gm_b, ST_AREA((pghfn_DrainageAreaOverlapDrainageArea).int_gm_) as area +FROM pgh_consistency.pghfn_DrainageAreaOverlapDrainageArea(); + +--TABLE pgh_consistency.pghft_DrainageAreaWithinDrainageArea + +TRUNCATE pgh_consistency.pghft_DrainageAreaWithinDrainageArea; + +INSERT INTO pgh_consistency.pghft_DrainageAreaWithinDrainageArea +SELECT row_number() OVER () as id, (pghfn_DrainageAreaWithinDrainageArea).dra_pk_ as dra_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_DrainageAreaWithinDrainageArea).dra_gm_ as dra_gm, ST_AREA((pghfn_DrainageAreaWithinDrainageArea).dra_gm_) as area +FROM pgh_consistency.pghfn_DrainageAreaWithinDrainageArea(); + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +END; +$$ +LANGUAGE PLPGSQL; + +---------------------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_UpdateDrainageLineDrainageAreaConsistencyTables() +---------------------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_UpdateDrainageLineDrainageAreaConsistencyTables() +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +--TABLE pgh_consistency.pghft_DrainageAreaNoDrainageLine + +TRUNCATE pgh_consistency.pghft_DrainageAreaNoDrainageLine; + +INSERT INTO pgh_consistency.pghft_DrainageAreaNoDrainageLine +SELECT row_number() OVER () as id, a.hin_dra_pk as dra_pk, (row_number() OVER () - 1) % 10 + 1 as editor, b.dra_gm as dra_gm, ST_AREA(b.dra_gm) as area +FROM pghydro.pghft_drainage_area b, pghydro.pghft_hydro_intel a +WHERE a.hin_drn_pk isnull +AND a.hin_dra_pk = b.dra_pk; + +--TABLE pgh_consistency.pghft_DrainageLineNoDrainageArea + +TRUNCATE pgh_consistency.pghft_DrainageLineNoDrainageArea; + +INSERT INTO pgh_consistency.pghft_DrainageLineNoDrainageArea +SELECT row_number() OVER () as id, a.hin_drn_pk as drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, b.drn_gm +FROM pghydro.pghft_drainage_line b, pghydro.pghft_hydro_intel a +WHERE a.hin_dra_pk isnull +AND a.hin_drn_pk = b.drn_pk; + +--TABLE pgh_consistency.pghft_DrainageAreaMoreOneDrainageLine + +TRUNCATE pgh_consistency.pghft_DrainageAreaMoreOneDrainageLine; + +INSERT INTO pgh_consistency.pghft_DrainageAreaMoreOneDrainageLine +SELECT row_number() OVER () as id, dra_pk, (row_number() OVER () - 1) % 10 + 1 as editor, dra_gm +FROM +( +SELECT DISTINCT a.hin_dra_pk as dra_pk, b.dra_gm as dra_gm +FROM pghydro.pghft_drainage_area b, pghydro.pghft_hydro_intel a +WHERE hin_count_dra_pk >=2 +AND a.hin_dra_pk = b.dra_pk +)as a; + +--TABLE pgh_consistency.pghft_DrainageLineMoreOneDrainageArea + +TRUNCATE pgh_consistency.pghft_DrainageLineMoreOneDrainageArea; + +INSERT INTO pgh_consistency.pghft_DrainageLineMoreOneDrainageArea +SELECT row_number() OVER () as id, drn_pk, (row_number() OVER () - 1) % 10 + 1 as editor, drn_gm +FROM +( +SELECT DISTINCT a.hin_drn_pk as drn_pk, b.drn_gm +FROM pghydro.pghft_drainage_line b, pghydro.pghft_hydro_intel a +WHERE hin_count_drn_pk >=2 +AND a.hin_drn_pk = b.drn_pk +) as a; + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +END; +$$ +LANGUAGE PLPGSQL; + +---------------------------------------------- +--HYDRONYM +---------------------------------------------- + +--CREATE TABLES + +--TABLE pgh_consistency.pghtb_nm_waterbodyoriginal + +DROP TABLE IF EXISTS pgh_consistency.pghtb_nm_waterbodyoriginal; + +CREATE SEQUENCE pgh_consistency.nwo_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + +CREATE TABLE pgh_consistency.pghtb_nm_waterbodyoriginal( +nwo_pk integer NOT NULL DEFAULT nextval('pgh_consistency.nwo_pk_seq'::regclass), +nwo_nm_original varchar, +nwo_nm_generic varchar, +nwo_nm_connection varchar, +nwo_nm_specific varchar +); + +ALTER SEQUENCE pgh_consistency.nwo_pk_seq OWNED BY pgh_consistency.pghtb_nm_waterbodyoriginal.nwo_pk; + +--TABLE pgh_consistency.pghtb_nm_generic + +DROP TABLE IF EXISTS pgh_consistency.pghtb_nm_generic; + +CREATE SEQUENCE pgh_consistency.nmg_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + +CREATE TABLE pgh_consistency.pghtb_nm_generic( +nmg_pk integer NOT NULL DEFAULT nextval('pgh_consistency.nmg_pk_seq'::regclass), +nmg_nwo_nm_generic varchar, +nmg_nm_generic varchar +); + +ALTER SEQUENCE pgh_consistency.nmg_pk_seq OWNED BY pgh_consistency.pghtb_nm_generic.nmg_pk; + +ALTER TABLE ONLY pgh_consistency.pghtb_nm_generic ADD CONSTRAINT nmg_pk_pkey PRIMARY KEY (nmg_pk); + +--TABLE pgh_consistency.pghtb_nm_connection; + +DROP TABLE IF EXISTS pgh_consistency.pghtb_nm_connection; + +CREATE SEQUENCE pgh_consistency.nmc_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + +CREATE TABLE pgh_consistency.pghtb_nm_connection( +nmc_pk integer NOT NULL DEFAULT nextval('pgh_consistency.nmc_pk_seq'::regclass), +nmc_nwo_nm_connection varchar, +nmc_nm_connection varchar +); + +ALTER SEQUENCE pgh_consistency.nmc_pk_seq OWNED BY pgh_consistency.pghtb_nm_connection.nmc_pk; + +ALTER TABLE ONLY pgh_consistency.pghtb_nm_connection ADD CONSTRAINT nmc_pk_pkey PRIMARY KEY (nmc_pk); + +--TABLE pgh_consistency.pghtb_nm_specific; + +DROP TABLE IF EXISTS pgh_consistency.pghtb_nm_specific; + +CREATE SEQUENCE pgh_consistency.nms_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + +CREATE TABLE pgh_consistency.pghtb_nm_specific( +nms_pk integer NOT NULL DEFAULT nextval('pgh_consistency.nms_pk_seq'::regclass), +nms_nwo_nm_specific varchar, +nms_nm_specific varchar +); + +ALTER SEQUENCE pgh_consistency.nms_pk_seq OWNED BY pgh_consistency.pghtb_nm_specific.nms_pk; + +ALTER TABLE ONLY pgh_consistency.pghtb_nm_specific ADD CONSTRAINT nms_pk_pkey PRIMARY KEY (nms_pk); + +--TABLE pgh_consistency.pghtb_nm_complete + +DROP TABLE IF EXISTS pgh_consistency.pghtb_nm_complete; + +CREATE SEQUENCE pgh_consistency.nmp_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + +CREATE TABLE pgh_consistency.pghtb_nm_complete( +nmp_pk integer NOT NULL DEFAULT nextval('pgh_consistency.nmp_pk_seq'::regclass), +nmp_nm_complete varchar, +nmp_nm_generic varchar, +nmp_nm_connection varchar, +nmp_nm_specific varchar +); + +ALTER SEQUENCE pgh_consistency.nmp_pk_seq OWNED BY pgh_consistency.pghtb_nm_complete.nmp_pk; + +CREATE TABLE pgh_consistency.pghft_confluencehydronym +( + id bigint, + cnh_drp_pk integer, + editor bigint, + cnh_gm geometry(MultiPoint), + CONSTRAINT pghft_confluencehydronym_pkey PRIMARY KEY (id) +); + +------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_ConfluenceHydronym() +------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_ConfluenceHydronym() +RETURNS TABLE(cnh_drp_pk_ integer, cnh_gm_ geometry) +AS +$$ +BEGIN + +RETURN QUERY + +SELECT a.drp_pk as cnh_drp_pk, ST_MULTI(drp.drp_gm) as cnh_gm +FROM +( +SELECT DISTINCT drn_drp_pk_targetnode as drp_pk +FROM +( +SELECT a.drn_drp_pk_targetnode +FROM pghydro.pghft_drainage_line a, pghydro.pghft_drainage_line b, pghydro.pghft_drainage_point c +WHERE a.drn_nm = b.drn_nm +AND a.drn_drn_pk_upstreamdrainageline = b.drn_pk +AND a.drn_drp_pk_targetnode = c.drp_pk +) as d +) as a, pghydro.pghft_drainage_point drp +WHERE drp.drp_pk = a.drp_pk; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_ConfluenceHydronym(); + +-------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_numConfluenceHydronym() +-------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_numDrainageLineOverlapDrainageLine() +RETURNS bigint AS +$$ +SELECT count(cnh_drp_pk) +FROM +( +SELECT (pghfn_ConfluenceHydronym).cnh_drp_pk_ as cnh_drp_pk +FROM pgh_consistency.pghfn_ConfluenceHydronym() +) as b; +$$ +LANGUAGE SQL; + +--SELECT pgh_consistency.pghfn_numConfluenceHydronym(); + +-------------------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_UpdateConfluenceHydronymConistencyTable() +-------------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_UpdateConfluenceHydronymConistencyTable() +RETURNS character varying AS +$$ +BEGIN + +--TABLE pgh_consistency.pghft_ConfluenceHydronym + +TRUNCATE pgh_consistency.pghft_ConfluenceHydronym; + +INSERT INTO pgh_consistency.pghft_ConfluenceHydronym +SELECT row_number() OVER () as id, (pghfn_ConfluenceHydronym).cnh_drp_pk_ as cnh_drp_pk, (row_number() OVER () - 1) % 10 + 1 as editor, (pghfn_ConfluenceHydronym).cnh_gm_ as cnh_gm +FROM pgh_consistency.pghfn_ConfluenceHydronym(); + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + + +------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_systematize_hydronym() +------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_systematize_hydronym() +RETURNS varchar AS +$$ +DECLARE + +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +TRUNCATE pgh_consistency.pghtb_nm_waterbodyoriginal; + +ALTER SEQUENCE pgh_consistency.nwo_pk_seq RESTART WITH 1; + +INSERT INTO pgh_consistency.pghtb_nm_waterbodyoriginal (nwo_nm_original, nwo_nm_generic, nwo_nm_connection, nwo_nm_specific) +SELECT DISTINCT nm_original, nm_generic, nm_connection, nm_specific +FROM +( +SELECT +drn_pk, +nm_original, +trim(both ' ' from t1) as nm_generic, +trim(both ' ' from t2) as nm_connection, +trim(both ' ' from (t3||' '||t4||' '||t5||' '||t6||' '||t7||' '||t8||' '||t9||' '||t10||' '||t11||' '||t12||' '||t13||' '||t14||' '||t15||' '||t16||' '||t17)) as nm_specific +FROM +( +SELECT +drn_pk, +nm_original, +trim(both ' ' from split_part(nm_original, ' ', 1)) as t1, +trim(both ' ' from lower(split_part(nm_original, ' ', 2))) as t2, +trim(both ' ' from split_part(nm_original, ' ', 3)) as t3, +trim(both ' ' from split_part(nm_original, ' ', 4)) as t4, +trim(both ' ' from split_part(nm_original, ' ', 5)) as t5, +trim(both ' ' from split_part(nm_original, ' ', 6)) as t6, +trim(both ' ' from split_part(nm_original, ' ', 7)) as t7, +trim(both ' ' from split_part(nm_original, ' ', 8)) as t8, +trim(both ' ' from split_part(nm_original, ' ', 9)) as t9, +trim(both ' ' from split_part(nm_original, ' ', 10)) as t10, +trim(both ' ' from split_part(nm_original, ' ', 11)) as t11, +trim(both ' ' from split_part(nm_original, ' ', 12)) as t12, +trim(both ' ' from split_part(nm_original, ' ', 13)) as t13, +trim(both ' ' from split_part(nm_original, ' ', 14)) as t14, +trim(both ' ' from split_part(nm_original, ' ', 15)) as t15, +trim(both ' ' from split_part(nm_original, ' ', 16)) as t16, +trim(both ' ' from split_part(nm_original, ' ', 17)) as t17 +FROM +( +SELECT drn_pk, nm_original +FROM +( +SELECT drn_pk, nm_original +FROM +( +SELECT +drn_pk, +drn_nm as nm_original, +lower(split_part(drn_nm, ' ', 2)) as t2 +FROM pghydro.pghft_drainage_line +WHERE drn_nm is not null +) as a +WHERE t2 = 'de' +OR t2 = 'da' +OR t2 = 'do' +OR t2 = 'das' +OR t2 = 'dos' +OR t2 = 'del' +) as a +WHERE +NOT EXISTS +( +SELECT drn_pk +FROM +( +SELECT drn_pk, nm_original +FROM +( +SELECT +drn_pk, +drn_nm as nm_original, +lower(split_part(drn_nm, ' ', 3)) as t3 +FROM pghydro.pghft_drainage_line +WHERE drn_nm is not null +) as a +WHERE t3 = 'la' +OR t3 = 'las' +OR t3 = 'los' +) as b +WHERE b.drn_pk = a.drn_pk +) +) as a +) as b +--) as c +UNION ALL +SELECT +drn_pk, +nm_original, +trim(both ' ' from t1) as nm_generic, +trim(both ' ' from (t2||' '||t3)) as nm_connection, +trim(both ' ' from (t4||' '||t5||' '||t6||' '||t7||' '||t8||' '||t9||' '||t10||' '||t11||' '||t12||' '||t13||' '||t14||' '||t15||' '||t16||' '||t17)) as nm_specific +FROM +( +SELECT +drn_pk, +nm_original, +trim(both ' ' from split_part(nm_original, ' ', 1)) as t1, +trim(both ' ' from lower(split_part(nm_original, ' ', 2))) as t2, +trim(both ' ' from lower(split_part(nm_original, ' ', 3))) as t3, +trim(both ' ' from split_part(nm_original, ' ', 4)) as t4, +trim(both ' ' from split_part(nm_original, ' ', 5)) as t5, +trim(both ' ' from split_part(nm_original, ' ', 6)) as t6, +trim(both ' ' from split_part(nm_original, ' ', 7)) as t7, +trim(both ' ' from split_part(nm_original, ' ', 8)) as t8, +trim(both ' ' from split_part(nm_original, ' ', 9)) as t9, +trim(both ' ' from split_part(nm_original, ' ', 10)) as t10, +trim(both ' ' from split_part(nm_original, ' ', 11)) as t11, +trim(both ' ' from split_part(nm_original, ' ', 12)) as t12, +trim(both ' ' from split_part(nm_original, ' ', 13)) as t13, +trim(both ' ' from split_part(nm_original, ' ', 14)) as t14, +trim(both ' ' from split_part(nm_original, ' ', 15)) as t15, +trim(both ' ' from split_part(nm_original, ' ', 16)) as t16, +trim(both ' ' from split_part(nm_original, ' ', 17)) as t17 +FROM +( +SELECT drn_pk, nm_original +FROM +( +SELECT +drn_pk, +drn_nm as nm_original, +lower(split_part(drn_nm, ' ', 3)) as t3 +FROM pghydro.pghft_drainage_line +WHERE drn_nm is not null +) as a +WHERE t3 = 'la' +OR t3 = 'las' +OR t3 = 'los' +) as b +) as c +--) as d +UNION ALL +SELECT DISTINCT +drn_pk, +nm_original, +trim(both ' ' from t1) as nm_generic, +null as nm_connection, +trim(both ' ' from (t2||' '||t3||' '||t4||' '||t5||' '||t6||' '||t7||' '||t8||' '||t9||' '||t10||' '||t11||' '||t12||' '||t13||' '||t14||' '||t15||' '||t16||' '||t17)) as nm_specific +FROM +( +SELECT +drn_pk, +nm_original, +trim(both ' ' from split_part(nm_original, ' ', 1)) as t1, +trim(both ' ' from split_part(nm_original, ' ', 2)) as t2, +trim(both ' ' from split_part(nm_original, ' ', 3)) as t3, +trim(both ' ' from split_part(nm_original, ' ', 4)) as t4, +trim(both ' ' from split_part(nm_original, ' ', 5)) as t5, +trim(both ' ' from split_part(nm_original, ' ', 6)) as t6, +trim(both ' ' from split_part(nm_original, ' ', 7)) as t7, +trim(both ' ' from split_part(nm_original, ' ', 8)) as t8, +trim(both ' ' from split_part(nm_original, ' ', 9)) as t9, +trim(both ' ' from split_part(nm_original, ' ', 10)) as t10, +trim(both ' ' from split_part(nm_original, ' ', 11)) as t11, +trim(both ' ' from split_part(nm_original, ' ', 12)) as t12, +trim(both ' ' from split_part(nm_original, ' ', 13)) as t13, +trim(both ' ' from split_part(nm_original, ' ', 14)) as t14, +trim(both ' ' from split_part(nm_original, ' ', 15)) as t15, +trim(both ' ' from split_part(nm_original, ' ', 16)) as t16, +trim(both ' ' from split_part(nm_original, ' ', 17)) as t17 +FROM +( +SELECT drn_pk, nm_original +FROM +( +SELECT +drn_pk, +drn_nm as nm_original, +lower(split_part(drn_nm, ' ', 2)) as t2, +lower(split_part(drn_nm, ' ', 3)) as t3 +FROM pghydro.pghft_drainage_line +WHERE drn_nm is not null +) as a +WHERE t2 <> 'de' +AND t2 <> 'da' +AND t2 <> 'do' +AND t2 <> 'das' +AND t2 <> 'dos' +AND t2 <> 'del' +AND t2||' '||t3 <> 'de la' +AND t2||' '||t3 <> 'de las' +AND t2||' '||t3 <> 'de los' +) as a +) as c +) as d +ORDER BY nm_original; + +UPDATE pgh_consistency.pghtb_nm_waterbodyoriginal +SET nwo_nm_connection = ' ' +WHERE nwo_nm_connection is null; + +UPDATE pgh_consistency.pghtb_nm_waterbodyoriginal +SET nwo_nm_specific = ' ' +WHERE nwo_nm_specific = ''; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +TRUNCATE pgh_consistency.pghtb_nm_generic; + +ALTER SEQUENCE pgh_consistency.nmg_pk_seq RESTART WITH 1; + +INSERT INTO pgh_consistency.pghtb_nm_generic (nmg_nwo_nm_generic, nmg_nm_generic) +SELECT DISTINCT nwo_nm_generic, nwo_nm_generic +FROM pgh_consistency.pghtb_nm_waterbodyoriginal +ORDER BY nwo_nm_generic; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +TRUNCATE pgh_consistency.pghtb_nm_connection; + +ALTER SEQUENCE pgh_consistency.nmc_pk_seq RESTART WITH 1; + +INSERT INTO pgh_consistency.pghtb_nm_connection (nmc_nwo_nm_connection, nmc_nm_connection) +SELECT DISTINCT nwo_nm_connection, nwo_nm_connection +FROM pgh_consistency.pghtb_nm_waterbodyoriginal +ORDER BY nwo_nm_connection; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +TRUNCATE pgh_consistency.pghtb_nm_specific; + +ALTER SEQUENCE pgh_consistency.nms_pk_seq RESTART WITH 1; + +INSERT INTO pgh_consistency.pghtb_nm_specific (nms_nwo_nm_specific, nms_nm_specific) +SELECT DISTINCT nwo_nm_specific, nwo_nm_specific +FROM pgh_consistency.pghtb_nm_waterbodyoriginal +ORDER BY nwo_nm_specific; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +TRUNCATE pgh_consistency.pghtb_nm_complete; + +ALTER SEQUENCE pgh_consistency.nmp_pk_seq RESTART WITH 1; + +INSERT INTO pgh_consistency.pghtb_nm_complete(nmp_nm_complete, nmp_nm_generic, nmp_nm_connection, nmp_nm_specific) +SELECT nmp_nm_complete, nmg_nm_generic, nmc_nm_connection, nms_nm_specific +FROM +( +SELECT DISTINCT nmg_nm_generic||' '||nmc_nm_connection||' '||nms_nm_specific as nmp_nm_complete, nmg_nm_generic, nmc_nm_connection, nms_nm_specific +FROM pgh_consistency.pghtb_nm_generic nmg, pgh_consistency.pghtb_nm_connection nmc, pgh_consistency.pghtb_nm_specific nms, pgh_consistency.pghtb_nm_waterbodyoriginal nwo +WHERE nmg.nmg_nwo_nm_generic = nwo.nwo_nm_generic +AND nmc.nmc_nwo_nm_connection = nwo.nwo_nm_connection +AND nms.nms_nwo_nm_specific = nwo.nwo_nm_specific +AND nmc.nmc_nm_connection <> ' ' +UNION ALL +SELECT DISTINCT CASE WHEN nms.nms_nm_specific = ' ' THEN nmg.nmg_nm_generic ELSE nmg.nmg_nm_generic||' '||nms.nms_nm_specific END as nmp_nm_complete, nmg_nm_generic, nmc_nm_connection, nms_nm_specific +FROM pgh_consistency.pghtb_nm_generic nmg, pgh_consistency.pghtb_nm_connection nmc, pgh_consistency.pghtb_nm_specific nms, pgh_consistency.pghtb_nm_waterbodyoriginal nwo +WHERE nmg.nmg_nwo_nm_generic = nwo.nwo_nm_generic +AND nmc.nmc_nwo_nm_connection = nwo.nwo_nm_connection +AND nms.nms_nwo_nm_specific = nwo.nwo_nm_specific +AND nmc.nmc_nm_connection = ' ' +) as a +ORDER BY nmg_nm_generic, nms_nm_specific; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +TRUNCATE pghydro.pghtb_type_name_generic; + +INSERT INTO pghydro.pghtb_type_name_generic (tng_pk, tng_ds) +SELECT nmg_pk, nmg_nm_generic +FROM pgh_consistency.pghtb_nm_generic; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +TRUNCATE pghydro.pghtb_type_name_connection; + +INSERT INTO pghydro.pghtb_type_name_connection (tcn_pk, tcn_ds) +SELECT nmc_pk, nmc_nm_connection +FROM pgh_consistency.pghtb_nm_connection; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; + +TRUNCATE pghydro.pghtb_type_name_specific; + +INSERT INTO pghydro.pghtb_type_name_specific (tns_pk, tns_ds) +SELECT nms_pk, nms_nm_specific +FROM pgh_consistency.pghtb_nm_specific; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; + +TRUNCATE pghydro.pghtb_type_name_complete; + +DROP INDEX IF EXISTS pgh_consistency.nmg_nm_generic_idx; + +DROP INDEX IF EXISTS pgh_consistency.nmp_nm_generic_idx; + +DROP INDEX IF EXISTS pgh_consistency.nmc_nm_connection_idx; + +DROP INDEX IF EXISTS pgh_consistency.nmp_nm_connection_idx; + +DROP INDEX IF EXISTS pgh_consistency.nms_nm_specific_idx; + +DROP INDEX IF EXISTS pgh_consistency.nmp_nm_specific_idx; + +CREATE INDEX nmg_nm_generic_idx ON pgh_consistency.pghtb_nm_generic(nmg_nm_generic); + +CREATE INDEX nmp_nm_generic_idx ON pgh_consistency.pghtb_nm_complete(nmp_nm_generic); + +CREATE INDEX nmc_nm_connection_idx ON pgh_consistency.pghtb_nm_connection(nmc_nm_connection); + +CREATE INDEX nmp_nm_connection_idx ON pgh_consistency.pghtb_nm_complete(nmp_nm_connection); + +CREATE INDEX nms_nm_specific_idx ON pgh_consistency.pghtb_nm_specific(nms_nm_specific); + +CREATE INDEX nmp_nm_specific_idx ON pgh_consistency.pghtb_nm_complete(nmp_nm_specific); + +INSERT INTO pghydro.pghtb_type_name_complete (tnc_pk, tnc_ds, tnc_tng_pk, tnc_tcn_pk, tnc_tns_pk) +SELECT nmp.nmp_pk, nmp.nmp_nm_complete, nmg.nmg_pk, nmc.nmc_pk, nms.nms_pk +FROM pgh_consistency.pghtb_nm_complete nmp, pgh_consistency.pghtb_nm_generic nmg, pgh_consistency.pghtb_nm_connection nmc, pgh_consistency.pghtb_nm_specific nms +WHERE nmg.nmg_nm_generic = nmp.nmp_nm_generic +AND nmc.nmc_nm_connection = nmp.nmp_nm_connection +AND nms.nms_nm_specific = nmp.nmp_nm_specific; + +DROP INDEX IF EXISTS pgh_consistency.nmg_nm_generic_idx; + +DROP INDEX IF EXISTS pgh_consistency.nmp_nm_generic_idx; + +DROP INDEX IF EXISTS pgh_consistency.nmc_nm_connection_idx; + +DROP INDEX IF EXISTS pgh_consistency.nmp_nm_connection_idx; + +DROP INDEX IF EXISTS pgh_consistency.nms_nm_specific_idx; + +DROP INDEX IF EXISTS pgh_consistency.nmp_nm_specific_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; + +--UPDATE pghydro.pghft_drainage_line.drn_tnc_pk + +DROP INDEX IF EXISTS pghydro.tnc_pk_idx; + +DROP INDEX IF EXISTS pghydro.drn_nm_idx; + +DROP INDEX IF EXISTS pghydro.tnc_ds_idx; + +UPDATE pghydro.pghft_drainage_line drn +SET drn_tnc_pk = NULL; + +CREATE INDEX tnc_pk_idx ON pghydro.pghtb_type_name_complete(tnc_pk); + +CREATE INDEX drn_nm_idx ON pghydro.pghft_drainage_line(drn_nm); + +CREATE INDEX tnc_ds_idx ON pghydro.pghtb_type_name_complete(tnc_ds); + +UPDATE pghydro.pghft_drainage_line drn +SET drn_tnc_pk = tnc.tnc_pk +FROM pghydro.pghtb_type_name_complete tnc +WHERE drn.drn_nm = tnc.tnc_ds; + +DROP INDEX IF EXISTS pghydro.tnc_pk_idx; + +DROP INDEX IF EXISTS pghydro.drn_nm_idx; + +DROP INDEX IF EXISTS pghydro.tnc_ds_idx; + +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_systematize_hydronym(); + +---------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_update_drn_nm() +---------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_update_drn_nm() +RETURNS varchar AS +$$ +DECLARE + +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +TRUNCATE pgh_consistency.pghtb_nm_complete; + +ALTER SEQUENCE pgh_consistency.nmp_pk_seq RESTART WITH 1; + +INSERT INTO pgh_consistency.pghtb_nm_complete(nmp_nm_complete, nmp_nm_generic, nmp_nm_connection, nmp_nm_specific) +SELECT nmp_nm_complete, nmg_nm_generic, nmc_nm_connection, nms_nm_specific +FROM +( +SELECT DISTINCT nmg_nm_generic||' '||nmc_nm_connection||' '||nms_nm_specific as nmp_nm_complete, nmg_nm_generic, nmc_nm_connection, nms_nm_specific +FROM pgh_consistency.pghtb_nm_generic nmg, pgh_consistency.pghtb_nm_connection nmc, pgh_consistency.pghtb_nm_specific nms, pgh_consistency.pghtb_nm_waterbodyoriginal nwo +WHERE nmg.nmg_nwo_nm_generic = nwo.nwo_nm_generic +AND nmc.nmc_nwo_nm_connection = nwo.nwo_nm_connection +AND nms.nms_nwo_nm_specific = nwo.nwo_nm_specific +AND nmc.nmc_nm_connection <> ' ' +UNION ALL +SELECT DISTINCT CASE WHEN nms.nms_nm_specific = ' ' THEN nmg.nmg_nm_generic ELSE nmg.nmg_nm_generic||' '||nms.nms_nm_specific END as nmp_nm_complete, nmg_nm_generic, nmc_nm_connection, nms_nm_specific +FROM pgh_consistency.pghtb_nm_generic nmg, pgh_consistency.pghtb_nm_connection nmc, pgh_consistency.pghtb_nm_specific nms, pgh_consistency.pghtb_nm_waterbodyoriginal nwo +WHERE nmg.nmg_nwo_nm_generic = nwo.nwo_nm_generic +AND nmc.nmc_nwo_nm_connection = nwo.nwo_nm_connection +AND nms.nms_nwo_nm_specific = nwo.nwo_nm_specific +AND nmc.nmc_nm_connection = ' ' +) as a +ORDER BY nmg_nm_generic, nms_nm_specific; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +UPDATE pghydro.pghft_drainage_line drn +SET drn_nm = b.nmp_nm_complete +FROM +( +SELECT drn_pk, drn_nm, nmp_nm_complete +FROM +( +SELECT drn.drn_pk, drn.drn_nm, nmp.nmp_nm_complete +FROM +pghydro.pghft_drainage_line drn, +pgh_consistency.pghtb_nm_complete nmp, +pgh_consistency.pghtb_nm_generic nmg, +pgh_consistency.pghtb_nm_connection nmc, +pgh_consistency.pghtb_nm_specific nms, +pgh_consistency.pghtb_nm_waterbodyoriginal nwo +WHERE drn.drn_nm = nwo.nwo_nm_original +AND nmg.nmg_nwo_nm_generic = nwo.nwo_nm_generic +AND nmc.nmc_nwo_nm_connection = nwo.nwo_nm_connection +AND nms.nms_nwo_nm_specific = nwo.nwo_nm_specific +AND nmg.nmg_nm_generic = nmp.nmp_nm_generic +AND nmc.nmc_nm_connection = nmp.nmp_nm_connection +AND nms.nms_nm_specific = nmp.nmp_nm_specific +) as a +WHERE drn_nm <> nmp_nm_complete +) as b +WHERE b.drn_pk = drn.drn_pk; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pgh_consistency.pghfn_update_drn_nm(); + +---------------------------------------------- +--CREATE BACKUP TABLES +---------------------------------------------- + +CREATE TABLE pgh_consistency.pghft_backup_drainage_line( + ads_operation char(1), + ads_stamp timestamp, + ads_userid text, + ads_drn_pk integer, + ads_drn_nm text, + ads_drn_nm_old text, + ads_drn_gm geometry(MultiLineString) +); + +CREATE TABLE pgh_consistency.pghft_backup_drainage_area( + adh_operation char(1), + adh_stamp timestamp, + adh_userid text, + adh_dra_pk integer, + adh_dra_gm geometry(MultiPolygon) +); + +------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_Backup_Drainage_Line() +------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_backup_drainage_line() RETURNS TRIGGER AS $pghft_backup_drainage_line$ + BEGIN + -- + -- Create a row in emp_backup to reflect the operation performed on emp, + -- make use of the special variable TG_OP to work out the operation. + -- + IF (TG_OP = 'DELETE') THEN + INSERT INTO pgh_consistency.pghft_backup_drainage_line(ads_operation, ads_stamp, ads_userid, ads_drn_pk, ads_drn_nm, ads_drn_gm) + SELECT 'D', now(), user, OLD.drn_pk, OLD.drn_nm, OLD.drn_gm; + RETURN OLD; + ELSIF (TG_OP = 'UPDATE') THEN + INSERT INTO pgh_consistency.pghft_backup_drainage_line(ads_operation, ads_stamp, ads_userid, ads_drn_pk, ads_drn_nm, ads_drn_nm_old, ads_drn_gm) + SELECT 'U', now(), user, NEW.drn_pk, NEW.drn_nm, OLD.drn_nm, NEW.drn_gm; + RETURN NEW; + ELSIF (TG_OP = 'INSERT') THEN + INSERT INTO pgh_consistency.pghft_backup_drainage_line(ads_operation, ads_stamp, ads_userid, ads_drn_pk, ads_drn_nm, ads_drn_gm) + SELECT 'I', now(), user, NEW.drn_pk, NEW.drn_nm, NEW.drn_gm; + RETURN NEW; + END IF; + RETURN NULL; -- result is ignored since this is an AFTER trigger + END; +$pghft_backup_drainage_line$ LANGUAGE plpgsql; + +------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_Backup_Drainage_Area() +------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_backup_drainage_area() RETURNS TRIGGER AS $pghft_backup_drainage_area$ + BEGIN + -- + -- Create a row in emp_backup to reflect the operation performed on emp, + -- make use of the special variable TG_OP to work out the operation. + -- + IF (TG_OP = 'DELETE') THEN + INSERT INTO pgh_consistency.pghft_backup_drainage_area SELECT 'D', now(), user, OLD.dra_pk, OLD.dra_gm; + RETURN OLD; + ELSIF (TG_OP = 'UPDATE') THEN + INSERT INTO pgh_consistency.pghft_backup_drainage_area SELECT 'U', now(), user, NEW.dra_pk, NEW.dra_gm; + RETURN NEW; + ELSIF (TG_OP = 'INSERT') THEN + INSERT INTO pgh_consistency.pghft_backup_drainage_area SELECT 'I', now(), user, NEW.dra_pk, NEW.dra_gm; + RETURN NEW; + END IF; + RETURN NULL; -- result is ignored since this is an AFTER trigger + END; +$pghft_backup_drainage_area$ LANGUAGE plpgsql; + +---------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_TurnOnBackup() +---------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_turnonbackup() +RETURNS varchar AS +$$ +DECLARE + +time_ timestamp; + +BEGIN + +DROP TRIGGER IF EXISTS pghft_backup_drainage_line ON pghydro.pghft_drainage_line; + +CREATE TRIGGER pghft_backup_drainage_line +AFTER INSERT OR UPDATE OR DELETE ON pghydro.pghft_drainage_line + FOR EACH ROW EXECUTE PROCEDURE pgh_consistency.pghfn_backup_drainage_line(); + +DROP TRIGGER IF EXISTS pghft_backup_drainage_area ON pghydro.pghft_drainage_area; + +CREATE TRIGGER pghft_backup_drainage_area +AFTER INSERT OR UPDATE OR DELETE ON pghydro.pghft_drainage_area + FOR EACH ROW EXECUTE PROCEDURE pgh_consistency.pghfn_backup_drainage_area(); + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +---------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_TurnOffBackup() +---------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_turnoffbackup() +RETURNS varchar AS +$$ +DECLARE + +time_ timestamp; + +BEGIN + +DROP TRIGGER IF EXISTS pghft_backup_drainage_line ON pghydro.pghft_drainage_line; + +DROP TRIGGER IF EXISTS pghft_backup_drainage_area ON pghydro.pghft_drainage_area; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +---------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_CleanDrainageLineBackupTables() +---------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_CleanDrainageLineBackupTables() +RETURNS varchar AS +$$ +DECLARE + +time_ timestamp; + +BEGIN + +TRUNCATE TABLE pgh_consistency.pghft_backup_drainage_line; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +---------------------------------------------------------------- +--FUNCTION pgh_consistency.pghfn_CleanDrainageAreaBackupTables() +---------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_consistency.pghfn_CleanDrainageAreaBackupTables() +RETURNS varchar AS +$$ +DECLARE + +time_ timestamp; + +BEGIN + +TRUNCATE TABLE pgh_consistency.pghft_backup_drainage_area; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +----------------------------------------- +--UpdateGeometrySRID +----------------------------------------- + SELECT pghydro.pghfn_UpdateGeometrySRID(); \ No newline at end of file diff --git a/pgh_consistency.control b/pgh_consistency.control index d7e4fd3..0cb4429 100644 --- a/pgh_consistency.control +++ b/pgh_consistency.control @@ -1,6 +1,6 @@ # pghydro consistency extension comment = 'pghydro consistency extension' -default_version = '6.0' +default_version = '6.2' encoding = 'latin1' requires = 'plpgsql' requires = 'postgis' diff --git a/pgh_output--6.0.sql b/pgh_output--6.2.sql similarity index 95% rename from pgh_output--6.0.sql rename to pgh_output--6.2.sql index c24b69f..21a481d 100644 --- a/pgh_output--6.0.sql +++ b/pgh_output--6.2.sql @@ -1,376 +1,376 @@ --- --- Copyright (c) 2016 Alexandre de Amorim Teixeira, pghydro.project@gmail.com --- --- This program is free software; you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation; either version 2 of the License, or --- (at your option) any later version. --- --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. --- --- You should have received a copy of the GNU General Public License --- along with this program; if not, write to the Free Software --- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - ---REQUIREMENTS - ---Postgresql version 9.1+ ---PostGIS version 2.0+ ---PgHydro version 6.0.1 - ---------------------------------------------------------------------------------- ---PgHydro Output Extension Version 6.0.1 of xx/xx/xxxx ---------------------------------------------------------------------------------- - -------------------------------------- ---CREATE SCHEMA, TABLES AND SEQUENCES -------------------------------------- - -DROP SCHEMA IF EXISTS pgh_output CASCADE; - -CREATE SCHEMA pgh_output; - ----------------------- ---CREATE OUTPUT TABLES ----------------------- -DROP TABLE IF EXISTS pgh_output.geoft_bho_trecho_drenagem; - -CREATE TABLE pgh_output.geoft_bho_trecho_drenagem -( - drn_pk integer, - cotrecho integer, - noorigem integer, - nodestino integer, - cocursodag character varying, - cobacia character varying, - nucomptrec numeric, - nudistbact numeric, - nudistcdag numeric, - nuareacont numeric, - nuareamont numeric, - nogenerico character varying, - noligacao character varying, - noespecif character varying, - noriocomp character varying, - nooriginal character varying, - cocdadesag character varying, - nutrjus integer, - nudistbacc numeric, - nuareabacc numeric, - nuordemcda smallint, - nucompcda numeric, - nunivotto smallint, - nunivotcda smallint, - nustrahler integer, - dedominial character varying, - dsversao text, - drn_gm geometry(MultiLineString) -); - -DROP TABLE IF EXISTS pgh_output.geoft_bho_area_drenagem; - -CREATE TABLE pgh_output.geoft_bho_area_drenagem -( - dra_pk integer, - idbacia integer, - cotrecho integer, - cocursodag character varying, - cobacia character varying, - nuareacont numeric, - nuordemcda smallint, - nunivotto1 text, - nunivotto2 text, - nunivotto3 text, - nunivotto4 text, - nunivotto5 text, - nunivotto6 text, - nunivotto smallint, - dsversao text, - dra_gm geometry(MultiPolygon) -); - -DROP TABLE IF EXISTS pgh_output.geoft_bho_curso_dagua; - -CREATE TABLE pgh_output.geoft_bho_curso_dagua -( - wtc_pk integer, - idcda integer, - cocursodag character varying, - nudistbacc numeric, - nucompcda numeric, - nuareabacc numeric, - cocdadesag character varying, - nunivotcda smallint, - nuordemcda smallint, - dedominial character varying, - dsversao text, - wtc_gm geometry(MultiLineString) -); - -DROP TABLE IF EXISTS pgh_output.geoft_bho_ponto_drenagem; - -CREATE TABLE pgh_output.geoft_bho_ponto_drenagem -( - drp_pk integer, - idponto integer, - cocursodag character varying, - deponto text, - dsversao text, - drp_gm geometry(Point,4291) -); - -DROP TABLE IF EXISTS pgh_output.geoft_bho_linha_costa; - -CREATE TABLE pgh_output.geoft_bho_linha_costa -( - colinhacosta integer, - nooriginal character varying, - sho_gm geometry(MultiLineString,4291) -); - ------------------------------------------ ---UpdateGeometrySRID ------------------------------------------ - -SELECT pghydro.pghfn_UpdateGeometrySRID(); - ----------------------------------------------------- ---FUNCTION pgh_output.pghfn_UpdateExportTables() ----------------------------------------------------- - -CREATE OR REPLACE FUNCTION pgh_output.pghfn_UpdateExportTables() -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - ---TABLE pgh_output.geoft_bho_trecho_drenagem - -TRUNCATE pgh_output.geoft_bho_trecho_drenagem; - -INSERT INTO pgh_output.geoft_bho_trecho_drenagem -SELECT -drn_pk, -drn.drn_pk as cotrecho, -drn.drn_drp_pk_sourcenode as noorigem, -drn.drn_drp_pk_targetnode as nodestino, -wtc.wtc_cd_pfafstetterwatercourse as cocursodag, -dra.dra_cd_pfafstetterbasin as cobacia, -drn.drn_gm_length as nucomptrec, -drn.drn_nu_distancetosea as nudistbact, -drn.drn_nu_distancetowatercourse as nudistcdag, -dra.dra_gm_area as nuareacont, -drn.drn_nu_upstreamarea as nuareamont, -tng.tng_ds as nogenerico, -tcn.tcn_ds as noligacao, -tns.tns_ds as noespecif, -tnc.tnc_ds as noriocomp, -drn.drn_nm as nooriginal, -wtc.wtc_cd_pfafstetterwatercourse_downstream as cocdadesag, -drn.drn_drn_pk_downstreamdrainageline as nutrjus, -wtc.wtc_nu_distancetosea as nudistbacc, -wtc.wtc_gm_area as nuareabacc, -wtc.wtc_nu_pfafstetterwatercoursecodeorder as nuordemcda, -wtc.wtc_gm_length as nucompcda, -dra.dra_nu_pfafstetterbasincodelevel as nunivotto, -wtc.wtc_nu_pfafstetterwatercoursecodelevel as nunivotcda, -hin.hin_strahler as nustrahler, -tdm.tdm_ds as dedominial, -'BHO '||current_database()||' de '||CURRENT_DATE::text as dsversao, -drn_gm -FROM pghydro.pghft_drainage_line drn -INNER JOIN pghydro.pghft_drainage_area dra ON drn.drn_dra_pk = dra.dra_pk -FULL OUTER JOIN pghydro.pghft_watercourse wtc ON drn.drn_wtc_pk = wtc.wtc_pk -FULL OUTER JOIN pghydro.pghtb_type_name_complete tnc ON drn.drn_tnc_pk = tnc.tnc_pk -FULL OUTER JOIN pghydro.pghtb_type_name_generic tng ON tnc.tnc_tng_pk = tng.tng_pk -FULL OUTER JOIN pghydro.pghtb_type_name_connection tcn ON tnc.tnc_tcn_pk = tcn.tcn_pk -FULL OUTER JOIN pghydro.pghtb_type_name_specific tns ON tnc.tnc_tns_pk = tns.tns_pk -LEFT OUTER JOIN pghydro.pghtb_type_domain tdm ON tdm.tdm_pk = drn.drn_tdm_pk -FULL OUTER JOIN pghydro.pghft_hydro_intel hin ON hin.hin_drn_pk = drn.drn_pk; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - ---TABLE pgh_output.geoft_bho_area_drenagem - -TRUNCATE pgh_output.geoft_bho_area_drenagem; - -INSERT INTO pgh_output.geoft_bho_area_drenagem -SELECT -dra_pk, -dra.dra_pk as idbacia, -drn.drn_pk as cotrecho, -wtc.wtc_cd_pfafstetterwatercourse as cocursodag, -dra.dra_cd_pfafstetterbasin as cobacia, -dra.dra_gm_area as nuareacont, -wtc.wtc_nu_pfafstetterwatercoursecodeorder as nuordemcda, -substring(dra.dra_cd_pfafstetterbasin FROM 1 FOR 1) as nunivotto1, -substring(dra.dra_cd_pfafstetterbasin FROM 1 FOR 2) as nunivotto2, -substring(dra.dra_cd_pfafstetterbasin FROM 1 FOR 3) as nunivotto3, -substring(dra.dra_cd_pfafstetterbasin FROM 1 FOR 4) as nunivotto4, -substring(dra.dra_cd_pfafstetterbasin FROM 1 FOR 5) as nunivotto5, -substring(dra.dra_cd_pfafstetterbasin FROM 1 FOR 6) as nunivotto6, -dra.dra_nu_pfafstetterbasincodelevel as nunivotto, -'BHO '||current_database()||' de '||CURRENT_DATE::text as dsversao, -dra_gm -FROM pghydro.pghft_drainage_line drn -INNER JOIN pghydro.pghft_drainage_area dra ON drn.drn_dra_pk = dra.dra_pk -FULL OUTER JOIN pghydro.pghft_watercourse wtc ON drn.drn_wtc_pk = wtc.wtc_pk -UNION -SELECT -dra.dra_pk, -dra.dra_pk, -null, -null, -'0', -dra.dra_gm_area, -null, -'0', -'0', -'0', -'0', -'0', -'0', -'0', -'BHO '||current_database()||' de '||CURRENT_DATE::text as dsversao, -dra.dra_gm -FROM pghydro.pghft_drainage_area dra -INNER JOIN pghydro.pghft_hydro_intel hin ON hin.hin_dra_pk = dra.dra_pk -WHERE hin.hin_drn_pk is null; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - ---TABLE pgh_output.geoft_bho_curso_dagua - -TRUNCATE pgh_output.geoft_bho_curso_dagua; - -INSERT INTO pgh_output.geoft_bho_curso_dagua -SELECT -wtc.wtc_pk, -wtc.wtc_pk as idcda, -wtc.wtc_cd_pfafstetterwatercourse as cocursodag, -wtc.wtc_nu_distancetosea as nudistbacc, -wtc.wtc_gm_length as nucompcda, -wtc.wtc_gm_area as nuareabacc, -wtc.wtc_cd_pfafstetterwatercourse_downstream as cocdadesag, -wtc.wtc_nu_pfafstetterwatercoursecodelevel as nunivotcda, -wtc.wtc_nu_pfafstetterwatercoursecodeorder as nuordemcda, -tdm.tdm_ds as dedominial, -'BHO '||current_database()||' de '||CURRENT_DATE::text as dsversao, -wtc.wtc_gm -FROM pghydro.pghft_watercourse wtc -LEFT OUTER JOIN pghydro.pghtb_type_domain tdm ON tdm.tdm_pk = wtc.wtc_tdm_pk; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - ---TABLE pgh_output.geoft_bho_ponto_drenagem - -TRUNCATE pgh_output.geoft_bho_ponto_drenagem; - -INSERT INTO pgh_output.geoft_bho_ponto_drenagem ---watercourse starting point -SELECT -drp.drp_pk, -drp.drp_pk as idponto, -wtc.wtc_cd_pfafstetterwatercourse as cocursodag, -'Inicio do Curso Dagua'::text as deponto, -'BHO '||current_database()||' de '||CURRENT_DATE::text as dsversao, -drp.drp_gm -FROM pghydro.pghft_drainage_point drp -INNER JOIN pghydro.pghft_drainage_line drn ON drn.drn_drp_pk_sourcenode = drp.drp_pk -INNER JOIN pghydro.pghft_watercourse wtc ON drn.drn_wtc_pk = wtc.wtc_pk -WHERE drp.drp_nu_valence = 1 -UNION ---Shoreline starting point -SELECT -drp.drp_pk, -drp.drp_pk as idponto, -wtc.wtc_cd_pfafstetterwatercourse as cocursodag, -'Inicio da Linha de Costa'::text as deponto, -'BHO '||current_database()||' de '||CURRENT_DATE::text as dsversao, -drp.drp_gm -FROM pghydro.pghft_drainage_point drp -INNER JOIN pghydro.pghft_drainage_line drn ON drn.drn_drp_pk_sourcenode = drp.drp_pk -FULL OUTER JOIN pghydro.pghft_watercourse wtc ON drn.drn_wtc_pk = wtc.wtc_pk -WHERE drp.drp_nu_valence = 1 -AND wtc.wtc_cd_pfafstetterwatercourse is null -UNION ---watercourse ending point -SELECT -drp.drp_pk, -drp.drp_pk as idponto, -wtc.wtc_cd_pfafstetterwatercourse as cocursodag, -'Fim do Curso Dagua'::text as deponto, -'BHO '||current_database()||' de '||CURRENT_DATE::text as dsversao, -drp.drp_gm -FROM pghydro.pghft_drainage_point drp -INNER JOIN pghydro.pghft_drainage_line drn ON drn.drn_drp_pk_targetnode = drp.drp_pk -INNER JOIN pghydro.pghft_watercourse wtc ON drn.drn_wtc_pk = wtc.wtc_pk -WHERE drn.drn_nu_distancetowatercourse = 0 -AND drn.drn_nu_distancetosea > 0 -UNION ---foz -SELECT -drp.drp_pk, -drp.drp_pk as idponto, -wtc.wtc_cd_pfafstetterwatercourse as cocursodag, -'Foz Maritima'::text as deponto, -'BHO '||current_database()||' de '||CURRENT_DATE::text as dsversao, -drp.drp_gm -FROM pghydro.pghft_drainage_point drp -INNER JOIN pghydro.pghft_drainage_line drn ON drn.drn_drp_pk_targetnode = drp.drp_pk -INNER JOIN pghydro.pghft_watercourse wtc ON drn.drn_wtc_pk = wtc.wtc_pk -WHERE drn.drn_nu_distancetowatercourse = 0 -AND drn.drn_nu_distancetosea = 0 -UNION ---Shoreline ending point -SELECT -drp.drp_pk, -drp.drp_pk as idponto, -wtc.wtc_cd_pfafstetterwatercourse as cocursodag, -'Fim da Linha de Costa'::text as dsponto, -'BHO '||current_database()||' de '||CURRENT_DATE::text as dsversao, -drp.drp_gm -FROM pghydro.pghft_drainage_point drp -INNER JOIN pghydro.pghft_drainage_line drn ON drn.drn_drp_pk_targetnode = drp.drp_pk -FULL OUTER JOIN pghydro.pghft_watercourse wtc ON drn.drn_wtc_pk = wtc.wtc_pk -WHERE drp.drp_nu_valence = 1 -AND wtc.wtc_cd_pfafstetterwatercourse is null; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - ---TABLE pgh_output.geoft_bho_linha_costa - -TRUNCATE pgh_output.geoft_bho_linha_costa; - -INSERT INTO pgh_output.geoft_bho_linha_costa -SELECT -sho.sho_pk AS colinhacosta, -sho.sho_nm AS nooriginal, -sho.sho_gm -FROM pghydro.pghft_shoreline sho; - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -END; -$$ -LANGUAGE PLPGSQL; - +-- +-- Copyright (c) 2016 Alexandre de Amorim Teixeira, pghydro.project@gmail.com +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 2 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program; if not, write to the Free Software +-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +--REQUIREMENTS + +--Postgresql version 9.1+ +--PostGIS version 2.0+ +--PgHydro version 6.2 + +--------------------------------------------------------------------------------- +--PgHydro Output Extension Version 6.2 of 17/01/2018 +--------------------------------------------------------------------------------- + +------------------------------------- +--CREATE SCHEMA, TABLES AND SEQUENCES +------------------------------------- + +DROP SCHEMA IF EXISTS pgh_output CASCADE; + +CREATE SCHEMA pgh_output; + +---------------------- +--CREATE OUTPUT TABLES +---------------------- +DROP TABLE IF EXISTS pgh_output.geoft_bho_trecho_drenagem; + +CREATE TABLE pgh_output.geoft_bho_trecho_drenagem +( + drn_pk integer, + cotrecho integer, + noorigem integer, + nodestino integer, + cocursodag character varying, + cobacia character varying, + nucomptrec numeric, + nudistbact numeric, + nudistcdag numeric, + nuareacont numeric, + nuareamont numeric, + nogenerico character varying, + noligacao character varying, + noespecif character varying, + noriocomp character varying, + nooriginal character varying, + cocdadesag character varying, + nutrjus integer, + nudistbacc numeric, + nuareabacc numeric, + nuordemcda smallint, + nucompcda numeric, + nunivotto smallint, + nunivotcda smallint, + nustrahler integer, + dedominial character varying, + dsversao text, + drn_gm geometry(MultiLineString) +); + +DROP TABLE IF EXISTS pgh_output.geoft_bho_area_drenagem; + +CREATE TABLE pgh_output.geoft_bho_area_drenagem +( + dra_pk integer, + idbacia integer, + cotrecho integer, + cocursodag character varying, + cobacia character varying, + nuareacont numeric, + nuordemcda smallint, + nunivotto1 text, + nunivotto2 text, + nunivotto3 text, + nunivotto4 text, + nunivotto5 text, + nunivotto6 text, + nunivotto smallint, + dsversao text, + dra_gm geometry(MultiPolygon) +); + +DROP TABLE IF EXISTS pgh_output.geoft_bho_curso_dagua; + +CREATE TABLE pgh_output.geoft_bho_curso_dagua +( + wtc_pk integer, + idcda integer, + cocursodag character varying, + nudistbacc numeric, + nucompcda numeric, + nuareabacc numeric, + cocdadesag character varying, + nunivotcda smallint, + nuordemcda smallint, + dedominial character varying, + dsversao text, + wtc_gm geometry(MultiLineString) +); + +DROP TABLE IF EXISTS pgh_output.geoft_bho_ponto_drenagem; + +CREATE TABLE pgh_output.geoft_bho_ponto_drenagem +( + drp_pk integer, + idponto integer, + cocursodag character varying, + deponto text, + dsversao text, + drp_gm geometry(Point,4291) +); + +DROP TABLE IF EXISTS pgh_output.geoft_bho_linha_costa; + +CREATE TABLE pgh_output.geoft_bho_linha_costa +( + colinhacosta integer, + nooriginal character varying, + sho_gm geometry(MultiLineString,4291) +); + +----------------------------------------- +--UpdateGeometrySRID +----------------------------------------- + +SELECT pghydro.pghfn_UpdateGeometrySRID(); + +---------------------------------------------------- +--FUNCTION pgh_output.pghfn_UpdateExportTables() +---------------------------------------------------- + +CREATE OR REPLACE FUNCTION pgh_output.pghfn_UpdateExportTables() +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +--TABLE pgh_output.geoft_bho_trecho_drenagem + +TRUNCATE pgh_output.geoft_bho_trecho_drenagem; + +INSERT INTO pgh_output.geoft_bho_trecho_drenagem +SELECT +drn_pk, +drn.drn_pk as cotrecho, +drn.drn_drp_pk_sourcenode as noorigem, +drn.drn_drp_pk_targetnode as nodestino, +wtc.wtc_cd_pfafstetterwatercourse as cocursodag, +dra.dra_cd_pfafstetterbasin as cobacia, +drn.drn_gm_length as nucomptrec, +drn.drn_nu_distancetosea as nudistbact, +drn.drn_nu_distancetowatercourse as nudistcdag, +dra.dra_gm_area as nuareacont, +drn.drn_nu_upstreamarea as nuareamont, +tng.tng_ds as nogenerico, +tcn.tcn_ds as noligacao, +tns.tns_ds as noespecif, +tnc.tnc_ds as noriocomp, +drn.drn_nm as nooriginal, +wtc.wtc_cd_pfafstetterwatercourse_downstream as cocdadesag, +drn.drn_drn_pk_downstreamdrainageline as nutrjus, +wtc.wtc_nu_distancetosea as nudistbacc, +wtc.wtc_gm_area as nuareabacc, +wtc.wtc_nu_pfafstetterwatercoursecodeorder as nuordemcda, +wtc.wtc_gm_length as nucompcda, +dra.dra_nu_pfafstetterbasincodelevel as nunivotto, +wtc.wtc_nu_pfafstetterwatercoursecodelevel as nunivotcda, +hin.hin_strahler as nustrahler, +tdm.tdm_ds as dedominial, +'BHO '||current_database()||' de '||CURRENT_DATE::text as dsversao, +drn_gm +FROM pghydro.pghft_drainage_line drn +INNER JOIN pghydro.pghft_drainage_area dra ON drn.drn_dra_pk = dra.dra_pk +FULL OUTER JOIN pghydro.pghft_watercourse wtc ON drn.drn_wtc_pk = wtc.wtc_pk +FULL OUTER JOIN pghydro.pghtb_type_name_complete tnc ON drn.drn_tnc_pk = tnc.tnc_pk +FULL OUTER JOIN pghydro.pghtb_type_name_generic tng ON tnc.tnc_tng_pk = tng.tng_pk +FULL OUTER JOIN pghydro.pghtb_type_name_connection tcn ON tnc.tnc_tcn_pk = tcn.tcn_pk +FULL OUTER JOIN pghydro.pghtb_type_name_specific tns ON tnc.tnc_tns_pk = tns.tns_pk +LEFT OUTER JOIN pghydro.pghtb_type_domain tdm ON tdm.tdm_pk = drn.drn_tdm_pk +FULL OUTER JOIN pghydro.pghft_hydro_intel hin ON hin.hin_drn_pk = drn.drn_pk; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +--TABLE pgh_output.geoft_bho_area_drenagem + +TRUNCATE pgh_output.geoft_bho_area_drenagem; + +INSERT INTO pgh_output.geoft_bho_area_drenagem +SELECT +dra_pk, +dra.dra_pk as idbacia, +drn.drn_pk as cotrecho, +wtc.wtc_cd_pfafstetterwatercourse as cocursodag, +dra.dra_cd_pfafstetterbasin as cobacia, +dra.dra_gm_area as nuareacont, +wtc.wtc_nu_pfafstetterwatercoursecodeorder as nuordemcda, +substring(dra.dra_cd_pfafstetterbasin FROM 1 FOR 1) as nunivotto1, +substring(dra.dra_cd_pfafstetterbasin FROM 1 FOR 2) as nunivotto2, +substring(dra.dra_cd_pfafstetterbasin FROM 1 FOR 3) as nunivotto3, +substring(dra.dra_cd_pfafstetterbasin FROM 1 FOR 4) as nunivotto4, +substring(dra.dra_cd_pfafstetterbasin FROM 1 FOR 5) as nunivotto5, +substring(dra.dra_cd_pfafstetterbasin FROM 1 FOR 6) as nunivotto6, +dra.dra_nu_pfafstetterbasincodelevel as nunivotto, +'BHO '||current_database()||' de '||CURRENT_DATE::text as dsversao, +dra_gm +FROM pghydro.pghft_drainage_line drn +INNER JOIN pghydro.pghft_drainage_area dra ON drn.drn_dra_pk = dra.dra_pk +FULL OUTER JOIN pghydro.pghft_watercourse wtc ON drn.drn_wtc_pk = wtc.wtc_pk +UNION +SELECT +dra.dra_pk, +dra.dra_pk, +null, +null, +'0', +dra.dra_gm_area, +null, +'0', +'0', +'0', +'0', +'0', +'0', +'0', +'BHO '||current_database()||' de '||CURRENT_DATE::text as dsversao, +dra.dra_gm +FROM pghydro.pghft_drainage_area dra +INNER JOIN pghydro.pghft_hydro_intel hin ON hin.hin_dra_pk = dra.dra_pk +WHERE hin.hin_drn_pk is null; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +--TABLE pgh_output.geoft_bho_curso_dagua + +TRUNCATE pgh_output.geoft_bho_curso_dagua; + +INSERT INTO pgh_output.geoft_bho_curso_dagua +SELECT +wtc.wtc_pk, +wtc.wtc_pk as idcda, +wtc.wtc_cd_pfafstetterwatercourse as cocursodag, +wtc.wtc_nu_distancetosea as nudistbacc, +wtc.wtc_gm_length as nucompcda, +wtc.wtc_gm_area as nuareabacc, +wtc.wtc_cd_pfafstetterwatercourse_downstream as cocdadesag, +wtc.wtc_nu_pfafstetterwatercoursecodelevel as nunivotcda, +wtc.wtc_nu_pfafstetterwatercoursecodeorder as nuordemcda, +tdm.tdm_ds as dedominial, +'BHO '||current_database()||' de '||CURRENT_DATE::text as dsversao, +wtc.wtc_gm +FROM pghydro.pghft_watercourse wtc +LEFT OUTER JOIN pghydro.pghtb_type_domain tdm ON tdm.tdm_pk = wtc.wtc_tdm_pk; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +--TABLE pgh_output.geoft_bho_ponto_drenagem + +TRUNCATE pgh_output.geoft_bho_ponto_drenagem; + +INSERT INTO pgh_output.geoft_bho_ponto_drenagem +--watercourse starting point +SELECT +drp.drp_pk, +drp.drp_pk as idponto, +wtc.wtc_cd_pfafstetterwatercourse as cocursodag, +'Inicio do Curso Dagua'::text as deponto, +'BHO '||current_database()||' de '||CURRENT_DATE::text as dsversao, +drp.drp_gm +FROM pghydro.pghft_drainage_point drp +INNER JOIN pghydro.pghft_drainage_line drn ON drn.drn_drp_pk_sourcenode = drp.drp_pk +INNER JOIN pghydro.pghft_watercourse wtc ON drn.drn_wtc_pk = wtc.wtc_pk +WHERE drp.drp_nu_valence = 1 +UNION +--Shoreline starting point +SELECT +drp.drp_pk, +drp.drp_pk as idponto, +wtc.wtc_cd_pfafstetterwatercourse as cocursodag, +'Inicio da Linha de Costa'::text as deponto, +'BHO '||current_database()||' de '||CURRENT_DATE::text as dsversao, +drp.drp_gm +FROM pghydro.pghft_drainage_point drp +INNER JOIN pghydro.pghft_drainage_line drn ON drn.drn_drp_pk_sourcenode = drp.drp_pk +FULL OUTER JOIN pghydro.pghft_watercourse wtc ON drn.drn_wtc_pk = wtc.wtc_pk +WHERE drp.drp_nu_valence = 1 +AND wtc.wtc_cd_pfafstetterwatercourse is null +UNION +--watercourse ending point +SELECT +drp.drp_pk, +drp.drp_pk as idponto, +wtc.wtc_cd_pfafstetterwatercourse as cocursodag, +'Fim do Curso Dagua'::text as deponto, +'BHO '||current_database()||' de '||CURRENT_DATE::text as dsversao, +drp.drp_gm +FROM pghydro.pghft_drainage_point drp +INNER JOIN pghydro.pghft_drainage_line drn ON drn.drn_drp_pk_targetnode = drp.drp_pk +INNER JOIN pghydro.pghft_watercourse wtc ON drn.drn_wtc_pk = wtc.wtc_pk +WHERE drn.drn_nu_distancetowatercourse = 0 +AND drn.drn_nu_distancetosea > 0 +UNION +--foz +SELECT +drp.drp_pk, +drp.drp_pk as idponto, +wtc.wtc_cd_pfafstetterwatercourse as cocursodag, +'Foz Maritima'::text as deponto, +'BHO '||current_database()||' de '||CURRENT_DATE::text as dsversao, +drp.drp_gm +FROM pghydro.pghft_drainage_point drp +INNER JOIN pghydro.pghft_drainage_line drn ON drn.drn_drp_pk_targetnode = drp.drp_pk +INNER JOIN pghydro.pghft_watercourse wtc ON drn.drn_wtc_pk = wtc.wtc_pk +WHERE drn.drn_nu_distancetowatercourse = 0 +AND drn.drn_nu_distancetosea = 0 +UNION +--Shoreline ending point +SELECT +drp.drp_pk, +drp.drp_pk as idponto, +wtc.wtc_cd_pfafstetterwatercourse as cocursodag, +'Fim da Linha de Costa'::text as dsponto, +'BHO '||current_database()||' de '||CURRENT_DATE::text as dsversao, +drp.drp_gm +FROM pghydro.pghft_drainage_point drp +INNER JOIN pghydro.pghft_drainage_line drn ON drn.drn_drp_pk_targetnode = drp.drp_pk +FULL OUTER JOIN pghydro.pghft_watercourse wtc ON drn.drn_wtc_pk = wtc.wtc_pk +WHERE drp.drp_nu_valence = 1 +AND wtc.wtc_cd_pfafstetterwatercourse is null; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +--TABLE pgh_output.geoft_bho_linha_costa + +TRUNCATE pgh_output.geoft_bho_linha_costa; + +INSERT INTO pgh_output.geoft_bho_linha_costa +SELECT +sho.sho_pk AS colinhacosta, +sho.sho_nm AS nooriginal, +sho.sho_gm +FROM pghydro.pghft_shoreline sho; + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +END; +$$ +LANGUAGE PLPGSQL; + --SELECT pgh_output.pghfn_UpdateExportTables(); \ No newline at end of file diff --git a/pgh_output.control b/pgh_output.control index d7e4fd3..0cb4429 100644 --- a/pgh_output.control +++ b/pgh_output.control @@ -1,6 +1,6 @@ # pghydro consistency extension comment = 'pghydro consistency extension' -default_version = '6.0' +default_version = '6.2' encoding = 'latin1' requires = 'plpgsql' requires = 'postgis' diff --git a/pghydro--6.0_README.txt b/pghydro--6.0_README.txt deleted file mode 100644 index a8d2f5a..0000000 --- a/pghydro--6.0_README.txt +++ /dev/null @@ -1 +0,0 @@ -Copy the content of this directory(*.sql *.control) to \PostgreSQL\x.x\share\extension \ No newline at end of file diff --git a/pghydro--6.0.sql b/pghydro--6.2.sql similarity index 96% rename from pghydro--6.0.sql rename to pghydro--6.2.sql index 58a0603..420e03b 100644 --- a/pghydro--6.0.sql +++ b/pghydro--6.2.sql @@ -1,6091 +1,6091 @@ --- --- Copyright (c) 2016 Alexandre de Amorim Teixeira, pghydro.project@gmail.com --- --- This program is free software; you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation; either version 2 of the License, or --- (at your option) any later version. --- --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. --- --- You should have received a copy of the GNU General Public License --- along with this program; if not, write to the Free Software --- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - ---REQUIREMENTS - ---Postgresql version 9.1+ ---PostGIS version 2.0+ - ---------------------------------------------------------------------------------- ---PgHydro Extension Version 6.2 of xx/xx/xxxx ---------------------------------------------------------------------------------- - -------------------------------------- ---CREATE SCHEMA, TABLES AND SEQUENCES -------------------------------------- - -DROP SCHEMA IF EXISTS pghydro CASCADE; - -CREATE SCHEMA pghydro; - --- - -CREATE TABLE pghydro.pghft_shoreline ( - sho_pk integer, - sho_gm_length numeric, - sho_bo_flowdirection boolean, - sho_nm character varying, - sho_gm geometry(MultiLineString) -); - -CREATE SEQUENCE pghydro.sho_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER SEQUENCE pghydro.sho_pk_seq OWNED BY pghydro.pghft_shoreline.sho_pk; - - -SELECT pg_catalog.setval('pghydro.sho_pk_seq', 1, false); - --- - -CREATE TABLE pghydro.pghtb_type_domain ( - tdm_pk integer, - tdm_ds character varying -); - - -CREATE SEQUENCE pghydro.tdm_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER SEQUENCE pghydro.tdm_pk_seq OWNED BY pghydro.pghtb_type_domain.tdm_pk; - - -SELECT pg_catalog.setval('pghydro.tdm_pk_seq', 1, false); - -CREATE TABLE pghydro.pghft_hydro_intel( - hin_pk integer, - hin_drn_pk integer, - hin_dra_pk integer, - hin_count_drn_pk integer, - hin_count_dra_pk integer, - hin_strahler integer, - hin_gm_point geometry(Point), - hin_gm_line geometry(MultiLineString), - hin_gm_polygon geometry(MultiPolygon) -); - -CREATE SEQUENCE pghydro.hin_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - -ALTER SEQUENCE pghydro.hin_pk_seq OWNED BY pghydro.pghft_hydro_intel.hin_pk; - -SELECT pg_catalog.setval('pghydro.hin_pk_seq', 1, false); - --- - -CREATE TABLE pghydro.pghft_drainage_point ( - drp_pk integer, - drp_nu_valence smallint, - drp_gm geometry(Point) -); - - -CREATE SEQUENCE pghydro.drp_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER SEQUENCE pghydro.drp_pk_seq OWNED BY pghydro.pghft_drainage_point.drp_pk; - - -SELECT pg_catalog.setval('pghydro.drp_pk_seq', 1, false); - --- - -CREATE TABLE pghydro.pghft_drainage_line ( - drn_pk integer, - drn_drp_pk_sourcenode integer, - drn_rcl_pk_drp_sourcenode integer, - drn_drp_pk_targetnode integer, - drn_rcl_pk_drp_targetnode integer, - drn_drn_pk_upstreamdrainageline integer, - drn_drn_pk_downstreamdrainageline integer, - drn_nu_distancetosea numeric, - drn_nu_distancetowatercourse numeric, - drn_bo_flowdirection boolean, - drn_nm character varying, - drn_tnc_pk integer, - drn_gm_length numeric, - drn_dra_pk integer, - drn_rcl_pk_dra integer, - drn_nu_upstreamarea numeric, - drn_wtc_pk integer, - drn_rcl_pk_wtc integer, - drn_tdm_pk integer, - drn_gm_point geometry(Multipoint), - drn_gm geometry(MultiLineString) -); - - -CREATE SEQUENCE pghydro.drn_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER SEQUENCE pghydro.drn_pk_seq OWNED BY pghydro.pghft_drainage_line.drn_pk; - - -SELECT pg_catalog.setval('pghydro.drn_pk_seq', 1, false); - --- - -CREATE TABLE pghydro.pghft_drainage_area ( - dra_pk integer, - dra_cd_pfafstetterbasin character varying, - dra_nu_pfafstetterbasincodelevel smallint, - dra_gm_area numeric, - dra_gm geometry(MultiPolygon) -); - - -CREATE SEQUENCE pghydro.dra_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER SEQUENCE pghydro.dra_pk_seq OWNED BY pghydro.pghft_drainage_area.dra_pk; - - -SELECT pg_catalog.setval('pghydro.dra_pk_seq', 1, false); - --- - -CREATE TABLE pghydro.pghft_shoreline_ending_point ( - sep_pk integer, - sep_drp_pk integer, - sep_rcl_pk_drp integer, - sep_drn_pk integer, - sep_rcl_pk_drn integer, - sep_sho_pk integer, - sep_rcl_pk_sho integer, - sep_gm geometry(Point) -); - - -CREATE SEQUENCE pghydro.sep_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER SEQUENCE pghydro.sep_pk_seq OWNED BY pghydro.pghft_shoreline_ending_point.sep_pk; - - -SELECT pg_catalog.setval('pghydro.sep_pk_seq', 1, false); - --- - -CREATE TABLE pghydro.pghft_shoreline_starting_point ( - ssp_pk integer, - ssp_drp_pk integer, - ssp_rcl_pk_drp integer, - ssp_drn_pk integer, - ssp_rcl_pk_drn integer, - ssp_sho_pk integer, - ssp_rcl_pk_sho integer, - ssp_gm geometry(Point) -); - - -CREATE SEQUENCE pghydro.ssp_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER SEQUENCE pghydro.ssp_pk_seq OWNED BY pghydro.pghft_shoreline_starting_point.ssp_pk; - - -SELECT pg_catalog.setval('pghydro.ssp_pk_seq', 1, false); - --- - -CREATE TABLE pghydro.pghft_stream_mouth ( - stm_pk integer, - stm_drp_pk integer, - stm_rcl_pk_drp integer, - stm_wtc_pk integer, - stm_rcl_pk_wtc integer, - stm_gm geometry(Point) -); - - -CREATE SEQUENCE pghydro.stm_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER SEQUENCE pghydro.stm_pk_seq OWNED BY pghydro.pghft_stream_mouth.stm_pk; - - -SELECT pg_catalog.setval('pghydro.stm_pk_seq', 1, false); - --- - -CREATE TABLE pghydro.pghft_watercourse ( - wtc_pk integer, - wtc_nu_distancetosea numeric, - wtc_cd_pfafstetterwatercourse_downstream character varying, - wtc_cd_pfafstetterwatercourse character varying, - wtc_nu_pfafstetterwatercoursecodelevel smallint, - wtc_nu_pfafstetterwatercoursecodeorder smallint, - wtc_gm_area numeric, - wtc_gm_length numeric, - wtc_tdm_pk integer, - wtc_gm geometry(MultiLineString) -); - -CREATE SEQUENCE pghydro.wtc_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER SEQUENCE pghydro.wtc_pk_seq OWNED BY pghydro.pghft_watercourse.wtc_pk; - - -SELECT pg_catalog.setval('pghydro.wtc_pk_seq', 1, false); - --- - -CREATE TABLE pghydro.pghft_watercourse_starting_point ( - wsp_pk integer, - wsp_drp_pk integer, - wsp_rcl_pk_drp integer, - wsp_wtc_pk integer, - wsp_rcl_pk_wtc integer, - wsp_gm geometry(Point) -); - - -CREATE SEQUENCE pghydro.wsp_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER SEQUENCE pghydro.wsp_pk_seq OWNED BY pghydro.pghft_watercourse_starting_point.wsp_pk; - - -SELECT pg_catalog.setval('pghydro.wsp_pk_seq', 1, false); - --- - -CREATE TABLE pghydro.pghft_watercourse_ending_point ( - wep_pk integer, - wep_drp_pk integer, - wep_rcl_pk_drp integer, - wep_wtc_pk integer, - wep_rcl_pk_wtc integer, - wep_gm geometry(Point) -); - -CREATE SEQUENCE pghydro.wep_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER SEQUENCE pghydro.wep_pk_seq OWNED BY pghydro.pghft_watercourse_ending_point.wep_pk; - - -SELECT pg_catalog.setval('pghydro.wep_pk_seq', 1, false); - --- - -CREATE TABLE pghydro.pghft_watershed ( - wts_pk integer, - wts_cd_pfafstetterbasin character varying, - wts_cd_pfafstetterbasincodelevel smallint, - wts_gm_area numeric, - wts_gm geometry(MultiPolygon) -); - - -CREATE SEQUENCE pghydro.wts_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER SEQUENCE pghydro.wts_pk_seq OWNED BY pghydro.pghft_watershed.wts_pk; - - -SELECT pg_catalog.setval('pghydro.wts_pk_seq', 1, false); - --- - -CREATE TABLE pghydro.pghtb_type_de9im ( - dim_pk integer, - dim_ds character varying(9) -); - - -CREATE SEQUENCE pghydro.dim_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER SEQUENCE pghydro.dim_pk_seq OWNED BY pghydro.pghtb_type_de9im.dim_pk; - - -SELECT pg_catalog.setval('pghydro.dim_pk_seq', 1, false); - --- - -CREATE TABLE pghydro.pghtb_type_geometry ( - tgm_pk integer, - tgm_ds character varying -); - - -CREATE SEQUENCE pghydro.tgm_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER SEQUENCE pghydro.tgm_pk_seq OWNED BY pghydro.pghtb_type_geometry.tgm_pk; - - -SELECT pg_catalog.setval('pghydro.tgm_pk_seq', 8, true); - --- - -CREATE TABLE pghydro.pghtb_type_relationship_class ( - rcl_pk integer, - rcl_tgm_pk_class_a integer, - rcl_tgm_ds_class_a character varying, - rcl_tgm_pk_class_b integer, - rcl_tgm_ds_class_b character varying, - rcl_tpr_pk integer, - rcl_tpr_ds character varying, - rcl_dim_pk integer, - rcl_dim_ds character varying -); - - -CREATE SEQUENCE pghydro.rcl_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER SEQUENCE pghydro.rcl_pk_seq OWNED BY pghydro.pghtb_type_relationship_class.rcl_pk; - - - -SELECT pg_catalog.setval('pghydro.rcl_pk_seq', 14, true); - --- - -CREATE TABLE pghydro.pghtb_type_topology_relationship ( - tpr_pk integer, - tpr_ds character varying -); - - -CREATE SEQUENCE pghydro.tpr_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER SEQUENCE pghydro.tpr_pk_seq OWNED BY pghydro.pghtb_type_topology_relationship.tpr_pk; - - -SELECT pg_catalog.setval('pghydro.tpr_pk_seq', 5, true); - --- - -CREATE TABLE pghydro.pghtb_primary_key_columns ( - f_table_catalog character varying(256), - f_table_schema character varying(256), - f_table_name character varying(256), - f_primary_key_column character varying(256) -); - --- - -CREATE TABLE pghydro.pghtb_foreign_key_columns ( - f_table_catalog character varying(256), - f_table_schema character varying(256), - f_table_name character varying(256), - f_foreign_key_column character varying(256), - f_table_catalog_reference character varying(256), - f_table_schema_reference character varying(256), - f_table_name_reference character varying(256), - f_primary_key_column_reference character varying(256) -); - --- - -CREATE TABLE pghydro.pghtb_index_columns ( - f_table_catalog character varying(256), - f_table_schema character varying(256), - f_table_name character varying(256), - f_index_column character varying(256), - f_index_column_method character varying(256) -); - - -CREATE TABLE pghydro.pghtb_type_name_complete ( - tnc_pk integer, - tnc_ds character varying, - tnc_tng_pk integer, - tnc_tcn_pk integer, - tnc_tns_pk integer -); - - -CREATE SEQUENCE pghydro.tnc_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER SEQUENCE pghydro.tnc_pk_seq OWNED BY pghydro.pghtb_type_name_complete.tnc_pk; - - -SELECT pg_catalog.setval('pghydro.tnc_pk_seq', 1, false); - --- - -CREATE TABLE pghydro.pghtb_type_name_connection ( - tcn_pk integer, - tcn_ds character varying -); - - -CREATE SEQUENCE pghydro.tcn_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER SEQUENCE pghydro.tcn_pk_seq OWNED BY pghydro.pghtb_type_name_connection.tcn_pk; - - -SELECT pg_catalog.setval('pghydro.tcn_pk_seq', 1, false); - --- - -CREATE TABLE pghydro.pghtb_type_name_generic ( - tng_pk integer, - tng_ds character varying -); - - -CREATE SEQUENCE pghydro.tng_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER SEQUENCE pghydro.tng_pk_seq OWNED BY pghydro.pghtb_type_name_generic.tng_pk; - - -SELECT pg_catalog.setval('pghydro.tng_pk_seq', 1, false); - --- - -CREATE TABLE pghydro.pghtb_type_name_specific ( - tns_pk integer, - tns_ds character varying -); - - -CREATE SEQUENCE pghydro.tns_pk_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; - - -ALTER SEQUENCE pghydro.tns_pk_seq OWNED BY pghydro.pghtb_type_name_specific.tns_pk; - - -SELECT pg_catalog.setval('pghydro.tns_pk_seq', 1, false); - --- - -ALTER TABLE pghydro.pghft_shoreline ALTER COLUMN sho_pk SET DEFAULT nextval('pghydro.sho_pk_seq'::regclass); - -ALTER TABLE pghydro.pghtb_type_domain ALTER COLUMN tdm_pk SET DEFAULT nextval('pghydro.tdm_pk_seq'::regclass); - -ALTER TABLE pghydro.pghft_hydro_intel ALTER COLUMN hin_pk SET DEFAULT nextval('pghydro.hin_pk_seq'::regclass); - -ALTER TABLE pghydro.pghft_drainage_point ALTER COLUMN drp_pk SET DEFAULT nextval('pghydro.drp_pk_seq'::regclass); - -ALTER TABLE pghydro.pghft_drainage_line ALTER COLUMN drn_pk SET DEFAULT nextval('pghydro.drn_pk_seq'::regclass); - -ALTER TABLE pghydro.pghft_drainage_area ALTER COLUMN dra_pk SET DEFAULT nextval('pghydro.dra_pk_seq'::regclass); - -ALTER TABLE pghydro.pghft_shoreline_ending_point ALTER COLUMN sep_pk SET DEFAULT nextval('pghydro.sep_pk_seq'::regclass); - -ALTER TABLE pghydro.pghft_shoreline_starting_point ALTER COLUMN ssp_pk SET DEFAULT nextval('pghydro.ssp_pk_seq'::regclass); - -ALTER TABLE pghydro.pghft_stream_mouth ALTER COLUMN stm_pk SET DEFAULT nextval('pghydro.stm_pk_seq'::regclass); - -ALTER TABLE pghydro.pghft_watercourse ALTER COLUMN wtc_pk SET DEFAULT nextval('pghydro.wtc_pk_seq'::regclass); - -ALTER TABLE pghydro.pghft_watercourse_starting_point ALTER COLUMN wsp_pk SET DEFAULT nextval('pghydro.wsp_pk_seq'::regclass); - -ALTER TABLE pghydro.pghft_watercourse_ending_point ALTER COLUMN wep_pk SET DEFAULT nextval('pghydro.wep_pk_seq'::regclass); - -ALTER TABLE pghydro.pghft_watershed ALTER COLUMN wts_pk SET DEFAULT nextval('pghydro.wts_pk_seq'::regclass); - -ALTER TABLE pghydro.pghtb_type_de9im ALTER COLUMN dim_pk SET DEFAULT nextval('pghydro.dim_pk_seq'::regclass); - -ALTER TABLE pghydro.pghtb_type_geometry ALTER COLUMN tgm_pk SET DEFAULT nextval('pghydro.tgm_pk_seq'::regclass); - -ALTER TABLE pghydro.pghtb_type_relationship_class ALTER COLUMN rcl_pk SET DEFAULT nextval('pghydro.rcl_pk_seq'::regclass); - -ALTER TABLE pghydro.pghtb_type_topology_relationship ALTER COLUMN tpr_pk SET DEFAULT nextval('pghydro.tpr_pk_seq'::regclass); - -ALTER TABLE pghydro.pghtb_type_name_complete ALTER COLUMN tnc_pk SET DEFAULT nextval('pghydro.tnc_pk_seq'::regclass); - -ALTER TABLE pghydro.pghtb_type_name_generic ALTER COLUMN tng_pk SET DEFAULT nextval('pghydro.tng_pk_seq'::regclass); - -ALTER TABLE pghydro.pghtb_type_name_connection ALTER COLUMN tcn_pk SET DEFAULT nextval('pghydro.tcn_pk_seq'::regclass); - -ALTER TABLE pghydro.pghtb_type_name_specific ALTER COLUMN tns_pk SET DEFAULT nextval('pghydro.tns_pk_seq'::regclass); - ------------------------------ ---INSERT DATA ------------------------------ - --- - -DELETE FROM pghydro.pghtb_type_geometry; - -INSERT INTO pghydro.pghtb_type_geometry VALUES (1, 'POINT'); -INSERT INTO pghydro.pghtb_type_geometry VALUES (2, 'LINESTRING'); -INSERT INTO pghydro.pghtb_type_geometry VALUES (3, 'POLYGON'); -INSERT INTO pghydro.pghtb_type_geometry VALUES (4, 'MULTIPOINT'); -INSERT INTO pghydro.pghtb_type_geometry VALUES (5, 'MULTILINESTRING'); -INSERT INTO pghydro.pghtb_type_geometry VALUES (6, 'MULTIPOLYGON'); -INSERT INTO pghydro.pghtb_type_geometry VALUES (7, 'GEOMETRY'); -INSERT INTO pghydro.pghtb_type_geometry VALUES (8, 'GEOMETRYCOLLECTION'); - --- - -DELETE FROM pghydro.pghtb_type_relationship_class; - -INSERT INTO pghydro.pghtb_type_relationship_class VALUES (1, 1, 'POINT', 1, 'POINT', 5, 'DISJOINT', NULL, NULL); -INSERT INTO pghydro.pghtb_type_relationship_class VALUES (15, 1, 'POINT', 2, 'LINESTRING', 2, 'TOUCH', NULL, NULL); -INSERT INTO pghydro.pghtb_type_relationship_class VALUES (16, 1, 'POINT', 3, 'POLYGON', 2, 'TOUCH', NULL, NULL); -INSERT INTO pghydro.pghtb_type_relationship_class VALUES (21, 3, 'POLYGON', 3, 'POLYGON', 3, 'OVERLAP', NULL, NULL); -INSERT INTO pghydro.pghtb_type_relationship_class VALUES (20, 2, 'LINESTRING', 2, 'LINESTRING', 3, 'OVERLAP', NULL, NULL); -INSERT INTO pghydro.pghtb_type_relationship_class VALUES (19, 3, 'POLYGON', 3, 'POLYGON', 2, 'TOUCH', NULL, NULL); -INSERT INTO pghydro.pghtb_type_relationship_class VALUES (18, 2, 'LINESTRING', 2, 'LINESTRING', 2, 'TOUCH', NULL, NULL); -INSERT INTO pghydro.pghtb_type_relationship_class VALUES (17, 2, 'LINESTRING', 3, 'POLYGON', 2, 'TOUCH', NULL, NULL); -INSERT INTO pghydro.pghtb_type_relationship_class VALUES (2, 1, 'POINT', 2, 'LINESTRING', 5, 'DISJOINT', NULL, NULL); -INSERT INTO pghydro.pghtb_type_relationship_class VALUES (3, 1, 'POINT', 3, 'POLYGON', 5, 'DISJOINT', NULL, NULL); -INSERT INTO pghydro.pghtb_type_relationship_class VALUES (4, 2, 'LINESTRING', 3, 'POLYGON', 5, 'DISJOINT', NULL, NULL); -INSERT INTO pghydro.pghtb_type_relationship_class VALUES (5, 2, 'LINESTRING', 2, 'LINESTRING', 5, 'DISJOINT', NULL, NULL); -INSERT INTO pghydro.pghtb_type_relationship_class VALUES (6, 3, 'POLYGON', 3, 'POLYGON', 5, 'DISJOINT', NULL, NULL); -INSERT INTO pghydro.pghtb_type_relationship_class VALUES (7, 2, 'LINESTRING', 3, 'POLYGON', 4, 'CROSS', NULL, NULL); -INSERT INTO pghydro.pghtb_type_relationship_class VALUES (8, 2, 'LINESTRING', 2, 'LINESTRING', 4, 'CROSS', NULL, NULL); -INSERT INTO pghydro.pghtb_type_relationship_class VALUES (9, 1, 'POINT', 1, 'POINT', 1, 'IN', NULL, NULL); -INSERT INTO pghydro.pghtb_type_relationship_class VALUES (10, 1, 'POINT', 2, 'LINESTRING', 1, 'IN', NULL, NULL); -INSERT INTO pghydro.pghtb_type_relationship_class VALUES (11, 1, 'POINT', 3, 'POLYGON', 1, 'IN', NULL, NULL); -INSERT INTO pghydro.pghtb_type_relationship_class VALUES (12, 2, 'LINESTRING', 3, 'POLYGON', 1, 'IN', NULL, NULL); -INSERT INTO pghydro.pghtb_type_relationship_class VALUES (13, 2, 'LINESTRING', 2, 'LINESTRING', 1, 'IN', NULL, NULL); -INSERT INTO pghydro.pghtb_type_relationship_class VALUES (14, 3, 'POLYGON', 3, 'POLYGON', 1, 'IN', NULL, NULL); - --- - -DELETE FROM pghydro.pghtb_type_topology_relationship; - -INSERT INTO pghydro.pghtb_type_topology_relationship VALUES (1, 'IN'); -INSERT INTO pghydro.pghtb_type_topology_relationship VALUES (2, 'TOUCH'); -INSERT INTO pghydro.pghtb_type_topology_relationship VALUES (3, 'OVERLAP'); -INSERT INTO pghydro.pghtb_type_topology_relationship VALUES (4, 'CROSS'); -INSERT INTO pghydro.pghtb_type_topology_relationship VALUES (5, 'DISJOINT'); - --- - -DELETE FROM pghydro.pghtb_type_domain; - -INSERT INTO pghydro.pghtb_type_domain VALUES (0, 'Estadual'); -INSERT INTO pghydro.pghtb_type_domain VALUES (1, 'Federal'); -INSERT INTO pghydro.pghtb_type_domain VALUES (2, 'Internacional'); -INSERT INTO pghydro.pghtb_type_domain VALUES (3, 'Linha de Costa'); - --- - -DELETE FROM pghydro.pghtb_primary_key_columns; - -INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline', 'sho_pk'); -INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_domain', 'tdm_pk'); -INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_hydro_intel', 'hin_pk'); -INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_point', 'drp_pk'); -INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_pk'); -INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_area', 'dra_pk'); -INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_ending_point', 'sep_pk'); -INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_starting_point', 'ssp_pk'); -INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_stream_mouth', 'stm_pk'); -INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse', 'wtc_pk'); -INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_starting_point', 'wsp_pk'); -INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_ending_point', 'wep_pk'); -INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_watershed', 'wts_pk'); -INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_de9im', 'dim_pk'); -INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_geometry', 'tgm_pk'); -INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); -INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_topology_relationship', 'tpr_pk'); -INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_name_complete', 'tnc_pk'); -INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_name_connection', 'tcn_pk'); -INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_name_generic', 'tng_pk'); -INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_name_specific', 'tns_pk'); - --- - -DELETE FROM pghydro.pghtb_foreign_key_columns; - -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_hydro_intel', 'hin_drn_pk', current_database(), 'pghydro', 'pghft_drainage_line', 'drn_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_hydro_intel', 'hin_dra_pk', current_database(), 'pghydro', 'pghft_drainage_area', 'dra_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_wtc_pk', current_database(), 'pghydro', 'pghft_watercourse', 'wtc_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_starting_point', 'ssp_drp_pk', current_database(), 'pghydro', 'pghft_drainage_point', 'drp_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_starting_point', 'ssp_sho_pk', current_database(), 'pghydro', 'pghft_shoreline', 'sho_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_ending_point', 'sep_drp_pk', current_database(), 'pghydro', 'pghft_drainage_point', 'drp_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_ending_point', 'sep_sho_pk', current_database(), 'pghydro', 'pghft_shoreline', 'sho_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_stream_mouth', 'stm_drp_pk', current_database(), 'pghydro', 'pghft_drainage_point', 'drp_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_ending_point', 'wep_drp_pk', current_database(), 'pghydro', 'pghft_drainage_point', 'drp_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_tgm_pk_class_a', current_database(), 'pghydro', 'pghtb_type_geometry', 'tgm_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_starting_point', 'wsp_rcl_pk_drp', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_starting_point', 'wsp_drp_pk', current_database(), 'pghydro', 'pghft_drainage_point', 'drp_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_starting_point', 'ssp_rcl_pk_drp', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_ending_point', 'sep_rcl_pk_drp', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_stream_mouth', 'stm_rcl_pk_drp', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_ending_point', 'wep_rcl_pk_drp', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_tgm_pk_class_b', current_database(), 'pghydro', 'pghtb_type_geometry', 'tgm_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_drp_pk_sourcenode', current_database(), 'pghydro', 'pghft_drainage_point', 'drp_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_starting_point', 'wsp_wtc_pk', current_database(), 'pghydro', 'pghft_watercourse', 'wtc_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_stream_mouth', 'stm_wtc_pk', current_database(), 'pghydro', 'pghft_watercourse', 'wtc_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_ending_point', 'wep_wtc_pk', current_database(), 'pghydro', 'pghft_watercourse', 'wtc_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_dim_pk', current_database(), 'pghydro', 'pghtb_type_de9im', 'dim_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_drp_pk_targetnode', current_database(), 'pghydro', 'pghft_drainage_point', 'drp_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_starting_point', 'wsp_rcl_pk_wtc', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_stream_mouth', 'stm_rcl_pk_wtc', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_ending_point', 'wep_rcl_pk_wtc', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_tpr_pk', current_database(), 'pghydro', 'pghtb_type_topology_relationship', 'tpr_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_rcl_pk_drp_targetnode', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_rcl_pk_drp_sourcenode', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_dra_pk', current_database(), 'pghydro', 'pghft_drainage_area', 'dra_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_rcl_pk_dra', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_rcl_pk_wtc', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_tdm_pk', current_database(), 'pghydro', 'pghtb_type_domain', 'tdm_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse', 'wtc_tdm_pk', current_database(), 'pghydro', 'pghtb_type_domain', 'tdm_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_name_complete', 'tnc_tns_pk', current_database(), 'pghydro', 'pghtb_type_name_specific', 'tns_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_name_complete', 'tnc_tng_pk', current_database(), 'pghydro', 'pghtb_type_name_generic', 'tng_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_name_complete', 'tnc_tcn_pk', current_database(), 'pghydro', 'pghtb_type_name_connection', 'tcn_pk'); -INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_tnc_pk', current_database(), 'pghydro', 'pghtb_type_name_complete', 'tnc_pk'); - --- - -DELETE FROM pghydro.pghtb_index_columns; - -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_hydro_intel', 'hin_drn_pk', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_hydro_intel', 'hin_dra_pk', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_wtc_pk', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_starting_point', 'ssp_drp_pk', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_starting_point', 'ssp_sho_pk', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_ending_point', 'sep_drp_pk', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_ending_point', 'sep_sho_pk', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_stream_mouth', 'stm_drp_pk', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_ending_point', 'wep_drp_pk', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_tgm_pk_class_a', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_starting_point', 'wsp_rcl_pk_drp', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_starting_point', 'wsp_drp_pk', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_starting_point', 'ssp_rcl_pk_drp', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_ending_point', 'sep_rcl_pk_drp', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_stream_mouth', 'stm_rcl_pk_drp', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_ending_point', 'wep_rcl_pk_drp', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_tgm_pk_class_b', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_drp_pk_sourcenode', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_starting_point', 'wsp_wtc_pk', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_stream_mouth', 'stm_wtc_pk', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_ending_point', 'wep_wtc_pk', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_dim_pk', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_drp_pk_targetnode', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_starting_point', 'wsp_rcl_pk_wtc', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_stream_mouth', 'stm_rcl_pk_wtc', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_ending_point', 'wep_rcl_pk_wtc', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_tpr_pk', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_rcl_pk_drp_targetnode', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_rcl_pk_drp_sourcenode', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_dra_pk', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_rcl_pk_dra', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_rcl_pk_wtc', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_tdm_pk', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse', 'wtc_tdm_pk', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_point', 'drp_nu_valence', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_hydro_intel', 'hin_strahler', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_area', 'dra_cd_pfafstetterbasin', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_area', 'dra_nu_pfafstetterbasincodelevel', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghtb_type_name_complete', 'tnc_tng_pk', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghtb_type_name_complete', 'tnc_tcn_pk', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghtb_type_name_complete', 'tnc_tns_pk', 'btree'); -INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_tnc_pk', 'btree'); - ---------------------------------------------------------------------------------------------------- ---PGHYDRO FUNCTIONS ---------------------------------------------------------------------------------------------------- ----------------------------------------------------- ---FUNCTION pghydro.pghfn_DropPrimaryKeys() ----------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_DropPrimaryKeys() -RETURNS varchar AS -$$ -DECLARE - -r record; -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - - - FOR r IN SELECT f_table_catalog, f_table_schema, f_table_name, f_primary_key_column FROM pghydro.pghtb_primary_key_columns - - LOOP - - EXECUTE ' - ALTER TABLE ONLY '||r.f_table_schema||'.'||r.f_table_name||' DROP CONSTRAINT IF EXISTS '||r.f_primary_key_column||'_pkey; - '; - - END LOOP; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ------------------------------------------ ---FUNCTION pghydro.pghfn_AddPrimaryKeys() ------------------------------------------ - -CREATE OR REPLACE FUNCTION pghydro.pghfn_AddPrimaryKeys() -RETURNS varchar AS -$$ -DECLARE - -r record; -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -PERFORM pghydro.pghfn_DropPrimaryKeys(); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - - - FOR r IN SELECT f_table_catalog, f_table_schema, f_table_name, f_primary_key_column FROM pghydro.pghtb_primary_key_columns - - LOOP - - EXECUTE ' - ALTER TABLE ONLY '||r.f_table_schema||'.'||r.f_table_name||' ADD CONSTRAINT '||r.f_primary_key_column||'_pkey PRIMARY KEY ('||r.f_primary_key_column||'); - '; - - END LOOP; - - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ----------------------------------------------------- ---FUNCTION pghydro.pghfn_DropForeignKeys() ----------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_DropForeignKeys() -RETURNS varchar AS -$$ -DECLARE - -r record; -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - - - FOR r IN SELECT f_table_catalog, f_table_schema, f_table_name, f_foreign_key_column FROM pghydro.pghtb_foreign_key_columns - - LOOP - - EXECUTE ' - ALTER TABLE ONLY '||r.f_table_schema||'.'||r.f_table_name||' DROP CONSTRAINT IF EXISTS '||r.f_foreign_key_column||'_fkey; - '; - - END LOOP; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ------------------------------------------ ---FUNCTION pghydro.pghfn_AddForeignKeys() ------------------------------------------ - -CREATE OR REPLACE FUNCTION pghydro.pghfn_AddForeignKeys() -RETURNS varchar AS -$$ -DECLARE - -r record; -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -PERFORM pghydro.pghfn_DropForeignKeys(); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - - - FOR r IN SELECT f_table_catalog, f_table_schema, f_table_name, f_foreign_key_column, f_table_catalog_reference, f_table_schema_reference, f_table_name_reference, f_primary_key_column_reference FROM pghydro.pghtb_foreign_key_columns - - LOOP - - EXECUTE ' - ALTER TABLE ONLY '||r.f_table_schema||'.'||r.f_table_name||' ADD CONSTRAINT '||r.f_foreign_key_column||'_fkey FOREIGN KEY ('||r.f_foreign_key_column||') REFERENCES '||r.f_table_schema_reference||'.'||r.f_table_name_reference||'('||r.f_primary_key_column_reference||'); - '; - - - END LOOP; - - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ----------------------------------------------------- ---FUNCTION pghydro.pghfn_DropGeometryIndex() ----------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_DropGeometryIndex() -RETURNS varchar AS -$$ -DECLARE - -r record; -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - - - FOR r IN SELECT f_table_schema, f_geometry_column FROM public.geometry_columns - - LOOP - - EXECUTE ' - DROP INDEX IF EXISTS '||r.f_table_schema||'.'||r.f_geometry_column||'_idx; - '; - - END LOOP; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ----------------------------------------------------- ---FUNCTION pghydro.pghfn_CreateGeometryIndex() ----------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_CreateGeometryIndex() -RETURNS varchar AS -$$ -DECLARE - -r record; -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -PERFORM pghydro.pghfn_DropGeometryIndex(); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - - - FOR r IN SELECT f_table_schema, f_table_name, f_geometry_column FROM public.geometry_columns - - LOOP - - EXECUTE ' - CREATE INDEX '||r.f_geometry_column||'_idx ON '||r.f_table_schema||'.'||r.f_table_name||' USING GIST('||r.f_geometry_column||'); - '; - - END LOOP; - - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ----------------------------------------------------- ---FUNCTION pghydro.pghfn_DropIndex() ----------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_DropIndex() -RETURNS varchar AS -$$ -DECLARE - -r record; -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - - - FOR r IN SELECT f_table_schema, f_index_column FROM pghydro.pghtb_index_columns - - LOOP - - EXECUTE ' - DROP INDEX IF EXISTS '||r.f_table_schema||'.'||r.f_index_column||'_idx; - '; - - END LOOP; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ----------------------------------------------------- ---FUNCTION pghydro.pghfn_CreateIndex() ----------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_CreateIndex() -RETURNS varchar AS -$$ -DECLARE - -r record; -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -PERFORM pghydro.pghfn_DropIndex(); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - - - FOR r IN SELECT f_table_schema, f_table_name, f_index_column, f_index_column_method FROM pghydro.pghtb_index_columns - - LOOP - - EXECUTE ' - CREATE INDEX '||r.f_index_column||'_idx ON '||r.f_table_schema||'.'||r.f_table_name||' USING '||r.f_index_column_method||' ('||r.f_index_column||'); - '; - - END LOOP; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ----------------------------------------------------- ---FUNCTION pghydro.pghfn_UpdateGeometrySRID() ----------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdateGeometrySRID() -RETURNS varchar AS -$$ -DECLARE - -r record; -time_ timestamp; -_srid integer; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -PERFORM pghydro.pghfn_DropIndex(); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -SELECT srid INTO _srid -FROM geometry_columns -WHERE f_table_name = 'pghft_drainage_line' -AND f_table_schema = 'pghydro'; - - FOR r IN SELECT f_table_schema, f_table_name, f_geometry_column FROM public.geometry_columns WHERE srid <> _srid - - LOOP - - EXECUTE ' - SELECT UpdateGeometrySRID('||quote_literal(r.f_table_schema)||','||quote_literal(r.f_table_name)||','||quote_literal(r.f_geometry_column)||','||_srid||'); - '; - - END LOOP; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ----------------------------------------------------- ---FUNCTION pghydro.pghfn_TurnOffKeysIndex() ----------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_TurnOffKeysIndex() -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - ---DROP GEOMETRY INDEX - -PERFORM pghydro.pghfn_DropGeometryIndex(); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - ---DROP INDEX - -PERFORM pghydro.pghfn_DropIndex(); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - ---DROP FOREIGN KEYS - -PERFORM pghydro.pghfn_DropForeignKeys(); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - ---DROP PRIMARY KEYS - -PERFORM pghydro.pghfn_DropPrimaryKeys(); - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -END; -$$ -LANGUAGE PLPGSQL; - - ----------------------------------------------------- ---FUNCTION pghydro.pghfn_TurnOnKeysIndex() ----------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_TurnOnKeysIndex() -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -PERFORM pghydro.pghfn_TurnOffKeysIndex(); - -UPDATE pghydro.pghft_drainage_line -SET drn_wtc_pk = null -WHERE drn_wtc_pk = 0; - -UPDATE pghydro.pghft_drainage_line -SET drn_rcl_pk_wtc = null -WHERE drn_rcl_pk_wtc = 0; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - ---ADD PRIMARY KEYS - -PERFORM pghydro.pghfn_AddPrimaryKeys(); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - ---ADD FOREIGN KEYS - -PERFORM pghydro.pghfn_AddForeignKeys(); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - ---ADD GEOMETRY INDEX - -PERFORM pghydro.pghfn_CreateGeometryIndex(); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - ---ADD INDEX - -PERFORM pghydro.pghfn_CreateIndex(); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -END; -$$ -LANGUAGE PLPGSQL; - - --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---FUNCTION pghydro.pghfn_input_data_drainage_line(input_drainage_line_schema varchar, input_drainage_line_table varchar, input_drainage_line_table_geom_atribute varchar, input_drainage_line_table_name_atribute varchar) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_input_data_drainage_line(input_drainage_line_schema varchar, input_drainage_line_table varchar, input_drainage_line_table_geom_atribute varchar, input_drainage_line_table_name_atribute varchar) -RETURNS varchar AS -$$ -DECLARE - -_srid integer; -time_ timestamp; -r record; - -BEGIN - -BEGIN - ---UPDATE CONSTRAINTS THAT SET 'srid' AT GEOMETRY COLUMN IN EACH GEOMETRY TABLE - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -PERFORM pghydro.pghfn_TurnOffKeysIndex(); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -SELECT srid INTO _srid -FROM geometry_columns -WHERE f_table_name = input_drainage_line_table -AND f_table_schema = input_drainage_line_schema; - - - FOR r IN SELECT f_table_schema, f_table_name, f_geometry_column FROM public.geometry_columns WHERE srid <> _srid - - LOOP - - EXECUTE ' - SELECT UpdateGeometrySRID('||quote_literal(r.f_table_schema)||','||quote_literal(r.f_table_name)||','||quote_literal(r.f_geometry_column)||','||_srid||'); - '; - - END LOOP; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - ---DELETE DATA ON TABLES RELATED TO pghydro.pghft_drainage_line - -TRUNCATE pghydro.pghft_drainage_line; - -TRUNCATE pghydro.pghft_drainage_point; - -TRUNCATE pghydro.pghft_shoreline_starting_point; - -TRUNCATE pghydro.pghft_shoreline_ending_point; - -TRUNCATE pghydro.pghft_stream_mouth; - -TRUNCATE pghydro.pghft_watercourse; - -TRUNCATE pghydro.pghft_watercourse_starting_point; - -TRUNCATE pghydro.pghft_watercourse_ending_point; - -TRUNCATE pghydro.pghtb_type_name_complete; - -TRUNCATE pghydro.pghtb_type_name_generic; - -TRUNCATE pghydro.pghtb_type_name_connection; - -TRUNCATE pghydro.pghtb_type_name_specific; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -PERFORM pg_catalog.setval('pghydro.drn_pk_seq', 1, false); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - ---INSERT THE NAME OF THE FIELD WITH THE RIVER NAME IN input_drainage_line - -IF input_drainage_line_table_name_atribute = 'none' THEN - -EXECUTE ' -INSERT INTO pghydro.pghft_drainage_line (drn_gm) -SELECT '||input_drainage_line_table_geom_atribute||' -FROM '||input_drainage_line_schema||'.'||input_drainage_line_table||'; -'; - -ELSE - -EXECUTE ' -INSERT INTO pghydro.pghft_drainage_line (drn_nm, drn_gm) -SELECT '||input_drainage_line_table_name_atribute||'::varchar, '||input_drainage_line_table_geom_atribute||' -FROM '||input_drainage_line_schema||'.'||input_drainage_line_table||'; -'; - -END IF; - ---'name' - column with the name of the drainage - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -PERFORM setval(('pghydro.drn_pk_seq'::text)::regclass, a.nextval::bigint, false) -FROM -( -SELECT max(drn_pk)+1 as nextval -FROM pghydro.pghft_drainage_line -) as a; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - -EXECUTE ' -DROP TABLE IF EXISTS '||input_drainage_line_schema||'.'||input_drainage_line_table||'; -'; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -END; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---FUNCTION pghydro.pghfn_input_data_drainage_area(input_drainage_area_schema varchar, input_drainage_area_table varchar, input_drainage_area_table_geom_atribute varchar) -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_input_data_drainage_area(input_drainage_area_schema varchar, input_drainage_area_table varchar, input_drainage_area_table_geom_atribute varchar) -RETURNS varchar AS -$$ -DECLARE -r record; -_srid integer; -time_ timestamp; - -BEGIN - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -PERFORM pghydro.pghfn_TurnOffKeysIndex(); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - ---DELETE DATA ON TABLES RELATED TO pghydro.pghft_drainage_area - -TRUNCATE pghydro.pghft_drainage_area; - -TRUNCATE pghydro.pghft_watershed; - -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -PERFORM pg_catalog.setval('pghydro.dra_pk_seq', 1, false); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -SELECT srid INTO _srid -FROM geometry_columns -WHERE f_table_name = input_drainage_area_table --'input_drainage_area_table' -AND f_table_schema = input_drainage_area_schema; --'public'; - - FOR r IN SELECT f_table_schema, f_table_name, f_geometry_column FROM public.geometry_columns WHERE srid <> _srid - - LOOP - - EXECUTE ' - SELECT UpdateGeometrySRID('||quote_literal(r.f_table_schema)||','||quote_literal(r.f_table_name)||','||quote_literal(r.f_geometry_column)||','||_srid||'); - '; - - END LOOP; - - ---INSERT DATA INTO TABLE pghydro.pghft_drainage_area - -EXECUTE ' -INSERT INTO pghydro.pghft_drainage_area (dra_gm) -SELECT '||input_drainage_area_table_geom_atribute||' -FROM '||input_drainage_area_schema||'.'||input_drainage_area_table||'; -'; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -PERFORM setval(('pghydro.dra_pk_seq'::text)::regclass, a.nextval::bigint, false) -FROM -( -SELECT max(dra_pk)+1 as nextval -FROM pghydro.pghft_drainage_area -) as a; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - ---DROP INPUT DATA - -EXECUTE ' -DROP TABLE IF EXISTS '||input_drainage_area_schema||'.'||input_drainage_area_table||'; -'; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - ---END OF FUNCTION - -END; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ---------------------------------------------------------- ---FUNCTION pghydro.pghfn_assign_vertex_id(off_set bigint) ---------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_assign_vertex_id(off_set bigint) -RETURNS character varying AS -$$ -DECLARE - -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_gm_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -UPDATE pghydro.pghft_drainage_line SET drn_drp_pk_sourcenode = NULL, drn_drp_pk_targetnode = NULL, drn_rcl_pk_drp_sourcenode = 15, drn_rcl_pk_drp_targetnode = 15; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -TRUNCATE pghydro.pghft_drainage_point; - -TRUNCATE pghydro.pghft_shoreline_starting_point; - -TRUNCATE pghydro.pghft_shoreline_ending_point; - -TRUNCATE pghydro.pghft_stream_mouth; - -TRUNCATE pghydro.pghft_watercourse_starting_point; - -TRUNCATE pghydro.pghft_watercourse_ending_point; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -PERFORM addgeometrycolumn('pghydro', 'pghft_drainage_line', 'drn_gm_startpoint', -( -SELECT srid FROM geometry_columns -WHERE f_table_name = 'pghft_drainage_area' -AND f_table_schema = 'pghydro' -) -, 'POINT', 2); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -PERFORM addgeometrycolumn('pghydro', 'pghft_drainage_line', 'drn_gm_endpoint', -( -SELECT srid FROM geometry_columns -WHERE f_table_name = 'pghft_drainage_area' -AND f_table_schema = 'pghydro' -) -, 'POINT', 2); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -UPDATE pghydro.pghft_drainage_line a -SET drn_gm_startpoint = ST_StartPoint((ST_Dump(drn_gm)).geom); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - -UPDATE pghydro.pghft_drainage_line a -SET drn_gm_endpoint = ST_EndPoint((ST_Dump(drn_gm)).geom); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_gm_startpoint_idx; - -DROP INDEX IF EXISTS pghydro.drn_gm_endpoint_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; - -CREATE INDEX drn_gm_startpoint_idx ON pghydro.pghft_drainage_line USING gist (drn_gm_startpoint); - -CREATE INDEX drn_gm_endpoint_idx ON pghydro.pghft_drainage_line USING gist (drn_gm_endpoint); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; - -EXECUTE ' -ALTER SEQUENCE pghydro.drp_pk_seq RESTART WITH '||off_set||'; -'; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 11 : %', time_; - -INSERT INTO pghydro.pghft_drainage_point (drp_gm) -SELECT drp_gm -FROM -( -SELECT DISTINCT ON (drp_gm) drp_gm -FROM -( -SELECT DISTINCT ON (drn_gm_startpoint) drn_gm_startpoint as drp_gm FROM pghydro.pghft_drainage_line -UNION -SELECT DISTINCT ON (drn_gm_endpoint) drn_gm_endpoint as drp_gm FROM pghydro.pghft_drainage_line -) as a -) as b; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 12 : %', time_; - -DROP INDEX IF EXISTS pghydro.drp_pk_idx; - -DROP INDEX IF EXISTS pghydro.drp_gm_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 13 : %', time_; - -CREATE INDEX drp_pk_idx ON pghydro.pghft_drainage_point(drp_pk); - -CREATE INDEX drp_gm_idx ON pghydro.pghft_drainage_point USING gist (drp_gm); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 14 : %', time_; - -UPDATE pghydro.pghft_drainage_line drn -SET drn_drp_pk_sourcenode = drp.drp_pk -FROM pghydro.pghft_drainage_point drp -WHERE ST_Intersects(drp.drp_gm, drn.drn_gm_startpoint) -AND (drp.drp_gm && drn.drn_gm_startpoint); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 15 : %', time_; - -UPDATE pghydro.pghft_drainage_line drn -SET drn_drp_pk_targetnode = drp.drp_pk -FROM pghydro.pghft_drainage_point drp -WHERE ST_Intersects(drp.drp_gm, drn.drn_gm_endpoint) -AND (drp.drp_gm && drn.drn_gm_endpoint); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 16 : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 17 : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 18 : %', time_; - -ALTER TABLE pghydro.pghft_drainage_line -DROP COLUMN drn_gm_startpoint; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 19 : %', time_; - -ALTER TABLE pghydro.pghft_drainage_line -DROP COLUMN drn_gm_endpoint; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 20 : %', time_; - -DROP INDEX IF EXISTS pghydro.drp_pk_idx; - -DROP INDEX IF EXISTS pghydro.drp_gm_idx; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ------------------------------------------------------------------------ ---FUNCTION pghydro.pghfn_CalculateValence() ------------------------------------------------------------------------ - -CREATE OR REPLACE FUNCTION pghydro.pghfn_CalculateValence() -RETURNS varchar AS -$$ -DECLARE -subQuerySource varchar; -subQueryTarget varchar; -unionNode varchar; -finalQuery varchar; -_r record; -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -DROP INDEX IF EXISTS pghydro.drp_pk_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); - -CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); - -CREATE INDEX drp_pk_idx ON pghydro.pghft_drainage_point(drp_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - - - subQuerySource := 'SELECT drp_pk as id, count(drn_drp_pk_sourcenode) as qt FROM pghydro.pghft_drainage_point INNER JOIN pghydro.pghft_drainage_line ON drp_pk = drn_drp_pk_sourcenode GROUP BY drp_pk'; - - subQueryTarget := 'SELECT drp_pk as id, count(drn_drp_pk_targetnode) as qt FROM pghydro.pghft_drainage_point INNER JOIN pghydro.pghft_drainage_line ON drp_pk = drn_drp_pk_targetnode GROUP BY drp_pk'; - - unionNode := 'SELECT id, Sum(UNION_NODE.qt) as valence FROM (' || subQuerySource || ' UNION ALL ' || subQueryTarget ||') as UNION_NODE GROUP BY id'; - - finalQuery := 'SELECT NODE_FINAL.id as node_id, NODE_FINAL.valence FROM ('|| unionNode || ') as NODE_FINAL INNER JOIN pghydro.pghft_drainage_point ON NODE_FINAL.id = drp_pk'; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - - FOR _r IN EXECUTE finalQuery LOOP - - UPDATE pghydro.pghft_drainage_point SET drp_nu_valence = _r.valence WHERE drp_pk = _r.node_id; - - END LOOP; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -DROP INDEX IF EXISTS pghydro.drp_pk_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ------------------------------------- ---FUNCTION pghydro.pghfn_Valence(integer) ------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_valence(integer) -RETURNS bigint AS -$$ -SELECT count(drp_pk) as valence -FROM -( -SELECT drn_drp_pk_targetnode as drp_pk -FROM pghydro.pghft_drainage_line -WHERE drn_drp_pk_targetnode = $1 -UNION ALL -SELECT drn_drp_pk_sourcenode as drp_pk -FROM pghydro.pghft_drainage_line -WHERE drn_drp_pk_sourcenode = $1 -) as a; -$$ -LANGUAGE SQL; - - -------------------------------------------------------- ---FUNCTION pghydro.pghfn_UpdateShorelineStartingPoint(integer) -------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdateShorelineStartingPoint(integer) -RETURNS varchar AS -$$ -DECLARE - -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -DELETE FROM pghydro.pghft_shoreline_starting_point; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -CREATE INDEX drp_pk_idx ON pghydro.pghft_drainage_point(drp_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -INSERT INTO pghydro.pghft_shoreline_starting_point (ssp_pk, ssp_drp_pk, ssp_rcl_pk_drp, ssp_rcl_pk_drn, ssp_sho_pk, ssp_rcl_pk_sho, ssp_gm) -SELECT drp_pk, drp_pk, 9, 15, 1, 15, drp_gm -FROM pghydro.pghft_drainage_point -WHERE drp_pk = $1; ---shoreline starting point - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -UPDATE pghydro.pghft_shoreline_starting_point a -SET ssp_drn_pk = b.drn_pk -FROM pghydro.pghft_drainage_line b -WHERE b.drn_drp_pk_targetnode = $1 -OR b.drn_drp_pk_sourcenode = $1; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - -DROP INDEX IF EXISTS pghydro.drp_pk_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - - -------------------------------------------------------- ---FUNCTION pghydro.pghfn_UpdateShorelineEndingPoint(integer) -------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdateShorelineEndingPoint(integer) -RETURNS varchar AS -$$ -DECLARE - -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -DELETE -FROM pghydro.pghft_shoreline_ending_point; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -CREATE INDEX drp_pk_idx ON pghydro.pghft_drainage_point(drp_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -INSERT INTO pghydro.pghft_shoreline_ending_point (sep_pk, sep_drp_pk, sep_rcl_pk_drp, sep_rcl_pk_drn, sep_sho_pk, sep_rcl_pk_sho, sep_gm) -SELECT drp_pk, drp_pk, 9, 15, 1, 15, drp_gm -FROM pghydro.pghft_drainage_point -WHERE drp_pk = $1; ---shoreline ending point - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); - -UPDATE pghydro.pghft_shoreline_ending_point a -SET sep_drn_pk = b.drn_pk -FROM pghydro.pghft_drainage_line b -WHERE b.drn_drp_pk_targetnode = $1 -OR b.drn_drp_pk_sourcenode = $1; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - -DROP INDEX IF EXISTS pghydro.drp_pk_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - - - -------------------------------------------------------- ---FUNCTION pghydro.pghfn_CalculateFlowDirection() -------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_CalculateFlowDirection() -RETURNS varchar AS -$$ -DECLARE - -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -DROP TABLE IF EXISTS pghydro.pghtb_tmp_direction; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -CREATE TABLE pghydro.pghtb_tmp_direction (id_tmp serial, id_table_net_tmp integer, target_table_net_tmp integer, source_table_net_tmp integer, direction_table_net_tmp boolean); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); - -CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -INSERT INTO pghydro.pghtb_tmp_direction (id_table_net_tmp, target_table_net_tmp, source_table_net_tmp, direction_table_net_tmp) -SELECT * FROM ( -WITH RECURSIVE tmp_direction(drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode, drn_bo_flowdirection) AS ( - SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode, (CASE WHEN drn_drp_pk_sourcenode = (SELECT sep_pk FROM pghydro.pghft_shoreline_ending_point) THEN false ELSE true END) - FROM pghydro.pghft_drainage_line - WHERE drn_drp_pk_sourcenode = (SELECT sep_pk FROM pghydro.pghft_shoreline_ending_point) ---shoreline ending point - OR drn_drp_pk_targetnode = (SELECT sep_pk FROM pghydro.pghft_shoreline_ending_point) ---shoreline ending point -UNION - SELECT a.drn_pk, a.drn_drp_pk_targetnode, a.drn_drp_pk_sourcenode, s - FROM ( -SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode, false as s -FROM pghydro.pghft_drainage_line -UNION ALL -SELECT drn_pk, drn_drp_pk_sourcenode, drn_drp_pk_targetnode, true as s -FROM pghydro.pghft_drainage_line -) as a, tmp_direction c - WHERE a.drn_drp_pk_sourcenode = c.drn_drp_pk_targetnode -) -SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode, drn_bo_flowdirection -FROM tmp_direction -) as a; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -UPDATE pghydro.pghft_drainage_line -SET drn_bo_flowdirection = null; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); - -CREATE INDEX id_table_net_tmp_idx ON pghydro.pghtb_tmp_direction(id_table_net_tmp); - -CREATE INDEX id_tmp_idx ON pghydro.pghtb_tmp_direction(id_tmp); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_;--can be better! - -UPDATE pghydro.pghft_drainage_line drn -SET drn_bo_flowdirection = direction_table_net_tmp -FROM ( -SELECT id_table_net_tmp, direction_table_net_tmp FROM pghydro.pghtb_tmp_direction a, (SELECT id_table_net_tmp as min_id_table_net_tmp, min(id_tmp) as min_id_tmp -FROM pghydro.pghtb_tmp_direction -GROUP BY min_id_table_net_tmp) as b -WHERE a.id_tmp = b.min_id_tmp -) as d -WHERE d.id_table_net_tmp = drn.drn_pk; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; - -DROP INDEX IF EXISTS pghydro.id_table_net_tmp_idx; - -DROP INDEX IF EXISTS pghydro.id_tmp_idx; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; - -DROP TABLE IF EXISTS pghydro.pghtb_tmp_direction; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - - ----------------------------------------------------- ---FUNCTION pghydro.pghfn_ReverseDrainageLine() ----------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_ReverseDrainageLine() -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -UPDATE pghydro.pghft_drainage_line -SET drn_gm = ST_Reverse(drn_gm) -WHERE drn_bo_flowdirection = false; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -DROP TABLE IF EXISTS direction_temp; - -CREATE TABLE direction_temp as -SELECT drn_pk, drn_drp_pk_sourcenode, drn_drp_pk_targetnode -FROM pghydro.pghft_drainage_line -WHERE drn_bo_flowdirection = false; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); - -DROP INDEX IF EXISTS pghydro.drn_pk_temp_idx; - -CREATE INDEX drn_pk_temp_idx ON direction_temp(drn_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -UPDATE pghydro.pghft_drainage_line a -SET drn_drp_pk_sourcenode = b.drn_drp_pk_targetnode, drn_drp_pk_targetnode = b.drn_drp_pk_sourcenode, drn_bo_flowdirection = true -FROM direction_temp b -WHERE a.drn_pk = b.drn_pk; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_pk_temp_idx; - -DROP TABLE direction_temp; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_gm_idx; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - - -------------------------------------------------------- ---FUNCTION pghydro.pghfn_FlowDirection(integer) -------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_FlowDirection(integer) -RETURNS boolean AS -$$ -SELECT drn_bo_flowdirection -FROM pghydro.pghft_drainage_line -WHERE drn_pk = $1; -$$ -LANGUAGE SQL; - - - ------------------------------------------------------------------- ---FUNCTION pghydro.pghfn_AssociateDrainageLine_DrainageArea() ------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_AssociateDrainageLine_DrainageArea() -RETURNS varchar AS -$$ -DECLARE - -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF ALL PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_gm_idx; - -UPDATE pghydro.pghft_drainage_line -SET drn_gm_point = ST_Multi((ST_Dump(ST_Line_Interpolate_Point((ST_Dump(drn_gm)).geom, 0.5))).geom); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_gm_point_idx; - -CREATE INDEX drn_gm_point_idx ON pghydro.pghft_drainage_line USING gist (drn_gm_point); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -DROP INDEX IF EXISTS pghydro.dra_gm_idx; - -CREATE INDEX dra_gm_idx ON pghydro.pghft_drainage_area USING gist (dra_gm); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -TRUNCATE pghydro.pghft_hydro_intel; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -PERFORM setval(('pghydro.hin_pk_seq'::text)::regclass, 1); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -INSERT INTO pghydro.pghft_hydro_intel (hin_drn_pk) -SELECT drn_pk -FROM pghydro.pghft_drainage_line; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - -DROP INDEX IF EXISTS pghydro.hin_drn_pk_idx; - -CREATE INDEX hin_drn_pk_idx ON pghydro.pghft_hydro_intel(hin_drn_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; - -DROP INDEX IF EXISTS pghydro.dra_pk_idx; - -CREATE INDEX dra_pk_idx ON pghydro.pghft_drainage_area(dra_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; - -UPDATE pghydro.pghft_hydro_intel hin -SET hin_dra_pk = b.dra_pk -FROM -( -SELECT dra_pk, drn_pk -FROM pghydro.pghft_drainage_area dra, pghydro.pghft_drainage_line drn -WHERE ST_Intersects(drn.drn_gm_point, dra.dra_gm) -AND (drn.drn_gm_point && dra.dra_gm) -) as b -WHERE b.drn_pk = hin.hin_drn_pk; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 11 : %', time_; - -DROP INDEX IF EXISTS pghydro.hin_dra_pk_idx; - -CREATE INDEX hin_dra_pk_idx ON pghydro.pghft_hydro_intel(hin_dra_pk); - -INSERT INTO pghydro.pghft_hydro_intel (hin_dra_pk) -SELECT dra_pk -FROM pghydro.pghft_drainage_area a -WHERE NOT EXISTS -( -SELECT hin_dra_pk -FROM pghydro.pghft_hydro_intel b -WHERE b.hin_dra_pk = a.dra_pk -); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 12 : %', time_; - -UPDATE pghydro.pghft_hydro_intel a -SET hin_count_drn_pk = b.hin_count_drn_pk -FROM -( -SELECT hin_drn_pk, count(hin_drn_pk) as hin_count_drn_pk -FROM pghydro.pghft_hydro_intel -GROUP BY hin_drn_pk -) as b -WHERE a.hin_drn_pk = b.hin_drn_pk; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 13 : %', time_; - -UPDATE pghydro.pghft_hydro_intel a -SET hin_count_dra_pk = b.hin_count_dra_pk -FROM -( -SELECT hin_dra_pk, count(hin_dra_pk) as hin_count_dra_pk -FROM pghydro.pghft_hydro_intel -GROUP BY hin_dra_pk -) as b -WHERE a.hin_dra_pk = b.hin_dra_pk; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 14 : %', time_; - -PERFORM setval(('pghydro.drn_pk_seq'::text)::regclass, a.nextval::bigint, false) -FROM -( -SELECT max(drn_pk)+1 as nextval -FROM pghydro.pghft_drainage_line -) as a; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 15 : %', time_; - -PERFORM setval(('pghydro.dra_pk_seq'::text)::regclass, a.nextval::bigint, false) -FROM -( -SELECT max(dra_pk)+1 as nextval -FROM pghydro.pghft_drainage_area -) as a; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 16 : %', time_; - -UPDATE pghydro.pghft_drainage_line SET drn_dra_pk = null, drn_rcl_pk_dra = null; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 17 : %', time_; - -UPDATE pghydro.pghft_drainage_line drn -SET drn_dra_pk = hin.hin_dra_pk, drn_rcl_pk_dra = 12 -FROM pghydro.pghft_hydro_intel hin -WHERE drn.drn_pk = hin.hin_drn_pk; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 18 : %', time_; - -DROP INDEX IF EXISTS pghydro.hin_drn_pk_idx; - -DROP INDEX IF EXISTS pghydro.hin_dra_pk_idx; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -DROP INDEX IF EXISTS pghydro.dra_pk_idx; - -DROP INDEX IF EXISTS pghydro.dra_gm_idx; - -DROP INDEX IF EXISTS pghydro.drn_gm_point_idx; - -time_ := timeofday(); -RAISE NOTICE 'END OF ALL PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - - ----------------------------------------------------------------------- ---FUNCTION pghydro.pghfn_CalculateDrainageLineLength(integer, integer) ----------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_CalculateDrainageLineLength(integer, integer) -RETURNS character varying AS -$$ -DECLARE - -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -UPDATE pghydro.pghft_drainage_line -SET drn_gm_length = ST_Length(ST_Transform(drn_gm, $1))/$2; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - - --------------------------------------------------------------------- ---FUNCTION pghydro.pghfn_CalculateDrainageAreaArea(integer, integer) --------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_CalculateDrainageAreaArea(integer, integer) -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -UPDATE pghydro.pghft_drainage_area -SET dra_gm_area = ST_Area(ST_Transform(dra_gm, $1))/$2; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - - ----------------------------------------------------------- ---FUNCTION pghydro.pghfn_Downstream_DrainageLines(integer) ----------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_Downstream_DrainageLines(integer) -RETURNS SETOF integer -AS $$ -DECLARE - -r record; - -BEGIN - -FOR r IN -WITH RECURSIVE downstream(drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode) AS ( - SELECT b.drn_pk, b.drn_drp_pk_targetnode, b.drn_drp_pk_sourcenode - FROM pghydro.pghft_drainage_line b, - ( - SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode - FROM pghydro.pghft_drainage_line - WHERE drn_pk = $1 - ) as d - WHERE d.drn_drp_pk_targetnode = b.drn_drp_pk_sourcenode -UNION ALL - SELECT a.drn_pk, a.drn_drp_pk_targetnode, a.drn_drp_pk_sourcenode - FROM pghydro.pghft_drainage_line a, downstream c - WHERE a.drn_drp_pk_sourcenode = c.drn_drp_pk_targetnode -) -SELECT drn_pk -FROM downstream - -LOOP - -RETURN NEXT r.drn_pk; - -END LOOP; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - - -------------------------------------------------------------------- ---FUNCTION pghydro.pghfn_Downstream_DrainageLines(integer, integer) -------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_Downstream_DrainageLines(integer, integer) -RETURNS SETOF integer -AS $$ -DECLARE - -var1 integer; - -BEGIN - -IF $1 <> $2 THEN - -SELECT INTO var1 drn_drp_pk_targetnode FROM pghydro.pghft_drainage_line WHERE drn_pk = $2; - -RETURN QUERY - -WITH RECURSIVE downstream(drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode) AS -( - SELECT b.drn_pk, b.drn_drp_pk_targetnode, b.drn_drp_pk_sourcenode - FROM pghydro.pghft_drainage_line b, - ( - SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode - FROM pghydro.pghft_drainage_line - WHERE drn_pk = $1 - ) as d - WHERE d.drn_drp_pk_targetnode = b.drn_drp_pk_sourcenode -UNION ALL - SELECT a.drn_pk, a.drn_drp_pk_targetnode, a.drn_drp_pk_sourcenode - FROM pghydro.pghft_drainage_line a, downstream c - WHERE a.drn_drp_pk_sourcenode = c.drn_drp_pk_targetnode - AND c.drn_drp_pk_targetnode <> var1 -) -SELECT drn_pk -FROM downstream; - -END IF; - -RETURN; - -END; - -$$ -LANGUAGE PLPGSQL; - - ---------------------------------------------------------- ---FUNCTION pghydro.pghfn_DownstreamDrainageLines(integer) ---------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_DownstreamDrainageLines(integer) -RETURNS SETOF integer -AS $$ -DECLARE -r record; -var1 integer; - -BEGIN - -SELECT INTO var1 ssp_drn_pk FROM pghydro.pghft_shoreline_starting_point; - -FOR r IN -WITH RECURSIVE downstream(drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode) AS ( - SELECT b.drn_pk, b.drn_drp_pk_targetnode, b.drn_drp_pk_sourcenode - FROM pghydro.pghft_drainage_line b, - ( - SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode - FROM pghydro.pghft_drainage_line - WHERE drn_pk = $1 --DrainageLine_target - ) as d - WHERE d.drn_drp_pk_targetnode = b.drn_drp_pk_sourcenode -UNION ALL - SELECT a.drn_pk, a.drn_drp_pk_targetnode, a.drn_drp_pk_sourcenode - FROM pghydro.pghft_drainage_line a, downstream c - WHERE a.drn_drp_pk_sourcenode = c.drn_drp_pk_targetnode -) -SELECT b.drn_pk -FROM downstream b -WHERE NOT EXISTS -( -SELECT drn_pk -FROM -( -SELECT var1 as drn_pk --DrainageLine_source -UNION ALL -SELECT pghydro.pghfn_downstream_DrainageLines(var1) as drn_pk --DrainageLine_source -) as a -WHERE a.drn_pk = b.drn_pk -) -LOOP - -RETURN NEXT r.drn_pk; - -END LOOP; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - - ------------------------------------------------------------- ---FUNCTION pghydro.pghfn_numDownstreamDrainageLines(integer) ------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_numDownstreamDrainageLines(integer) -RETURNS bigint AS -$$ -SELECT count(drn_pk) -FROM -( -SELECT pghydro.pghfn_DownstreamDrainageLines($1) as drn_pk -) as a; -$$ -LANGUAGE SQL; - - -------------------------------------------------------------------- ---FUNCTION pghydro.pghfn_DownstreamDrainageLinesN(integer, integer) -------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_DownstreamDrainageLinesN(integer, integer) -RETURNS integer AS -$$ -SELECT drn_pk -FROM -( -SELECT ROW_NUMBER() OVER() AS seq_drn_pk, drn_pk -FROM -( -SELECT pghydro.pghfn_DownstreamDrainageLines($1) as drn_pk --DrainageLine -) as a -) as b -WHERE seq_drn_pk = $2;--sequencial -$$ -LANGUAGE SQL; - - ------------------------------------------------------------- ---FUNCTION pghydro.pghfn_distance_to_mouth(integer, numeric) ------------------------------------------------------------- ---DROP FUNCTION pghydro.pghfn_distance_to_mouth(IN integer, OUT distance_to_mouth numeric) - - -CREATE OR REPLACE FUNCTION pghydro.pghfn_distance_to_mouth(IN integer, OUT distance_to_mouth numeric) -AS $$ -BEGIN -SELECT INTO distance_to_mouth COALESCE(sum(c.drn_gm_length),0) -FROM -( -SELECT b.drn_pk, a.drn_gm_length--::numeric -FROM pghydro.pghft_drainage_line a, -( -SELECT pghydro.pghfn_downstreamDrainageLines($1) as drn_pk -) as b -WHERE a.drn_pk = b.drn_pk -) as c; -END; -$$ -LANGUAGE PLPGSQL; - - ----------------------------------------------------------- ---FUNCTION pghydro.pghfn_UpstreamDrainageLines(integer) ----------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_upstreamDrainageLines(integer) -RETURNS SETOF integer -AS $$ -DECLARE -r record; -BEGIN -FOR r IN -WITH RECURSIVE upstream(drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode) AS ( - SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode - FROM pghydro.pghft_drainage_line - WHERE drn_pk = $1 -UNION ALL - SELECT a.drn_pk, a.drn_drp_pk_targetnode, a.drn_drp_pk_sourcenode - FROM pghydro.pghft_drainage_line a, upstream c - WHERE a.drn_drp_pk_targetnode = c.drn_drp_pk_sourcenode -) -SELECT drn_pk -FROM upstream -LOOP -RETURN NEXT r.drn_pk; -END LOOP; -RETURN; -END; -$$ -LANGUAGE PLPGSQL; - - ------------------------------------------------- ---FUNCTION pghydro.pghfn_numUpstreamDrainageLines(integer) ------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_numUpstreamDrainageLines(integer) -RETURNS bigint AS -$$ -SELECT count(drn_pk) -FROM -( -SELECT pghydro.pghfn_upstreamDrainageLines($1) as drn_pk -) as a; -$$ -LANGUAGE SQL; - - ----------------------------------------------------------- ---FUNCTION pghydro.pghfn_UpstreamDrainageLinesN(integer, integer) ----------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_UpstreamDrainageLinesN(integer, integer) -RETURNS integer AS -$$ -SELECT drn_pk -FROM -( -SELECT ROW_NUMBER() OVER() AS seq_drn_pk, drn_pk -FROM -( -SELECT pghydro.pghfn_upstreamDrainageLines($1) as drn_pk --DrainageLine -) as a -) as b -WHERE seq_drn_pk = $2;--sequencial -$$ -LANGUAGE SQL; - - ----------------------------------------------------------- ---FUNCTION pghydro.pghfn_UpstreamDrainageLines(integer, integer) ----------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_upstreamDrainageLines(integer, integer) -RETURNS SETOF integer -AS $$ -DECLARE - -var1 integer; - -BEGIN - -SELECT INTO var1 drn_drp_pk_sourcenode FROM pghydro.pghft_drainage_line WHERE drn_pk = $2; - -RETURN QUERY - -WITH RECURSIVE upstream(drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode) AS -( - SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode - FROM pghydro.pghft_drainage_line - WHERE drn_pk = $1 -UNION ALL - SELECT a.drn_pk, a.drn_drp_pk_targetnode, a.drn_drp_pk_sourcenode - FROM pghydro.pghft_drainage_line a, upstream c - WHERE a.drn_drp_pk_targetnode = c.drn_drp_pk_sourcenode - AND c.drn_drp_pk_sourcenode <> var1 - -) -SELECT drn_pk -FROM upstream; - -RETURN; - -END; - -$$ -LANGUAGE PLPGSQL; - - --------------------------------------------------------------------- ---FUNCTION pghydro.pghfn_UpstreamDrainageLinesArea(integer, numeric) --------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_UpstreamDrainageLinesArea(IN integer, OUT upstream_area numeric) -AS $$ -BEGIN -SELECT INTO upstream_area COALESCE(sum(c.dra_gm_area),0) -FROM -( -SELECT b.drn_pk, c.dra_gm_area -FROM pghydro.pghft_drainage_line a, -( -SELECT pghydro.pghfn_upstreamDrainageLines($1) as drn_pk -) as b, -pghydro.pghft_drainage_area c -WHERE a.drn_pk = b.drn_pk -AND a.drn_dra_pk = c.dra_pk -) as c; -END; -$$ -LANGUAGE PLPGSQL; - - ----------------------------------------------------------- ---FUNCTION pghydro.pghfn_DownstreamDrainageLine(integer) ----------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_DownstreamDrainageLine(integer) -RETURNS integer AS -$$ -SELECT drn_pk -FROM pghydro.pghft_drainage_line -WHERE drn_drp_pk_sourcenode = -( -SELECT drn_drp_pk_targetnode -FROM pghydro.pghft_drainage_line -WHERE drn_pk = $1 -) -AND drn_pk <> $1; -$$ -LANGUAGE SQL; - - ----------------------------------------------------------- ---FUNCTION pghydro.pghfn_UpstreamDrainageLine(integer) ----------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_UpstreamDrainageLine(integer) -RETURNS integer AS -$$ -SELECT drn_pk -FROM pghydro.pghft_drainage_line -WHERE drn_drp_pk_targetnode = -( -SELECT drn_drp_pk_targetnode -FROM pghydro.pghft_drainage_line -WHERE drn_pk = $1 -) -AND drn_pk <> $1; -$$ -LANGUAGE SQL; - - --------------------------------------------------------- ---FUNCTION pghydro.pghfn_CalculateDistanceToSea(numeric) --------------------------------------------------------- - - -CREATE OR REPLACE FUNCTION pghydro.pghfn_CalculateDistanceToSea(numeric) -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; -var1 integer; -i integer; -j integer; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -SELECT INTO var1 ssp_drn_pk FROM pghydro.pghft_shoreline_starting_point; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -j := max(drn_pk) FROM pghydro.pghft_drainage_line; - -FOR i IN 1..j LOOP - -UPDATE pghydro.pghft_drainage_line drn -SET drn_nu_distancetosea = pghydro.pghfn_distance_to_mouth(drn_pk)+$1--offset distance to sea -WHERE drn.drn_pk = i; - -RAISE NOTICE 'DRAINAGE %/%', i, j; - -END LOOP; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - -UPDATE pghydro.pghft_drainage_line drn -SET drn_nu_distancetosea = null -FROM -( -SELECT pghydro.pghfn_downstream_drainagelines(var1) as drn_pk -UNION -SELECT var1 as drn_pk -) as a -WHERE drn.drn_pk = a.drn_pk; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -END; -$$ -LANGUAGE PLPGSQL; - - ----------------------------------------------------- ---FUNCTION pghydro.pghfn_CalculateUpstreamArea() ----------------------------------------------------- - - -CREATE OR REPLACE FUNCTION pghydro.pghfn_CalculateUpstreamArea() -RETURNS character varying AS -$$ -DECLARE -var1 integer; -time_ timestamp; -i integer; -j integer; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -SELECT INTO var1 ssp_drn_pk FROM pghydro.pghft_shoreline_starting_point; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; - -DROP INDEX IF EXISTS pghydro.dra_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -CREATE INDEX drn_dra_pk_idx ON pghydro.pghft_drainage_line(drn_dra_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -CREATE INDEX dra_pk_idx ON pghydro.pghft_drainage_area(dra_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - -CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; - -j := max(drn_pk) FROM pghydro.pghft_drainage_line; - -FOR i IN 1..j LOOP - -UPDATE pghydro.pghft_drainage_line drn -SET drn_nu_upstreamarea = pghydro.pghfn_Upstreamdrainagelinesarea(drn_pk) -WHERE drn.drn_pk = i; - -RAISE NOTICE 'DRAINAGE %/%', i, j; - -END LOOP; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; - -UPDATE pghydro.pghft_drainage_line drn -SET drn_nu_upstreamarea = dra.dra_gm_area -FROM -( -SELECT pghydro.pghfn_downstream_drainagelines(var1) as drn_pk -UNION -SELECT var1 as drn_pk -) as a, pghydro.pghft_drainage_area dra -WHERE drn.drn_pk = a.drn_pk -AND drn.drn_dra_pk = dra.dra_pk; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; - -DROP INDEX IF EXISTS pghydro.dra_pk_idx; - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -END; -$$ -LANGUAGE PLPGSQL; - ---------------------------------------------------------- ---FUNCTION pghydro.pghfn_CalculateUpstreamDrainageLine() ---------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_CalculateUpstreamDrainageLine() -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -UPDATE pghydro.pghft_drainage_line -SET drn_drn_pk_upstreamDrainageLine = pghydro.pghfn_UpstreamDrainageLine(drn_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -END; -$$ -LANGUAGE PLPGSQL; - - ----------------------------------------------------------- ---FUNCTION pghydro.pghfn_CalculateDownstreamDrainageLine() ----------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_CalculateDownstreamDrainageLine() -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -UPDATE pghydro.pghft_drainage_line -SET drn_drn_pk_downstreamDrainageLine = pghydro.pghfn_DownstreamDrainageLine(drn_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -END; -$$ -LANGUAGE PLPGSQL; - - --------------------------------------------------------- ---FUNCTION pghydro.pghfn_ExportTopologicalTable(varchar) --------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_ExportTopologicalTable(varchar) -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; - -DROP INDEX IF EXISTS pghydro.dra_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -CREATE INDEX drn_dra_pk_idx ON pghydro.pghft_drainage_line(drn_dra_pk); - -CREATE INDEX dra_pk_idx ON pghydro.pghft_drainage_area(dra_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -EXECUTE ' -COPY -( -SELECT drn.drn_pk, drn.drn_drp_pk_sourcenode, drn.drn_drp_pk_targetnode, drn.drn_gm_length, dra.dra_gm_area -FROM pghydro.pghft_drainage_line drn, pghydro.pghft_drainage_area dra -WHERE drn.drn_dra_pk = dra.dra_pk -) -TO '''||$1||''' WITH DELIMITER '' ''; -'; - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; - -DROP INDEX IF EXISTS pghydro.dra_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -END; -$$ -LANGUAGE PLPGSQL; - - --------------------------------------------------------- ---FUNCTION pghydro.pghfn_ImportTopologicalTable(varchar) --------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_ImportTopologicalTable(varchar) -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; - -DROP INDEX IF EXISTS pghydro.dra_pk_idx; - -DROP INDEX IF EXISTS pghydro.pbc_drn_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -CREATE INDEX drn_dra_pk_idx ON pghydro.pghft_drainage_line(drn_dra_pk); - -CREATE INDEX dra_pk_idx ON pghydro.pghft_drainage_area(dra_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -DROP TABLE IF EXISTS pghydro.pghtb_input_pfafstetterbasincode; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -CREATE TABLE pghydro.pghtb_input_pfafstetterbasincode( -pbc_drn_pk integer, -pbc_drn_wtc_cd_pfafstetterwatercourse varchar, -pbc_dra_cd_pfafstetterbasin varchar, -pbc_drn_bo_flowdirection varchar, -pbc_drn_gm_length numeric, -pbc_drn_nu_distancetosea numeric, -pbc_drn_wtc_nu_distancetosea numeric, -pbc_drn_dra_gm_area numeric, -pbc_drn_nu_upstreamarea numeric -); - ---Importar as tabelas com as informações do topologia hídrica - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -EXECUTE ' -COPY -pghydro.pghtb_input_pfafstetterbasincode -FROM '''||$1||''' -WITH CSV; - -'; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -CREATE INDEX pbc_drn_pk_idx ON pghydro.pghtb_input_pfafstetterbasincode(pbc_drn_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - -UPDATE pghydro.pghft_drainage_area dra -SET dra_cd_pfafstetterbasin = pbc.pbc_dra_cd_pfafstetterbasin -FROM pghydro.pghtb_input_pfafstetterbasincode pbc, pghydro.pghft_drainage_line drn -WHERE pbc.pbc_drn_pk = drn.drn_pk -AND drn.drn_dra_pk = dra.dra_pk; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; - -DROP TABLE pghydro.pghtb_input_pfafstetterbasincode; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; - -DROP INDEX IF EXISTS pghydro.dra_pk_idx; - -DROP INDEX IF EXISTS pghydro.pbc_drn_pk_idx; - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -END; -$$ -LANGUAGE PLPGSQL; - - ----------------------------------------------------------------- ---FUNCTION pghydro.pghfn_main_watercourse_DrainageLines(integer) ----------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_main_watercourse_DrainageLines(integer) -RETURNS TABLE(drn_pk_ integer, n_ integer) -AS $$ -DECLARE - -var1 integer; - -BEGIN - -SELECT INTO var1 ssp_drn_pk FROM pghydro.pghft_shoreline_starting_point; - -IF $1 IN (SELECT pghydro.pghfn_Downstream_DrainageLines(var1)) THEN - -RETURN QUERY - -SELECT drn_pk, (ROW_NUMBER() OVER ())::integer AS n -FROM -( -SELECT drn_pk, (ROW_NUMBER() OVER ())::integer AS m -FROM -( -SELECT var1 as drn_pk -UNION ALL -SELECT pghydro.pghfn_Downstream_DrainageLines(var1) as drn_pk -) as l -WHERE NOT EXISTS -( -SELECT drn_pk -FROM -( -SELECT pghydro.pghfn_Downstream_DrainageLines($1) as drn_pk -) as r -WHERE r.drn_pk = l.drn_pk -) -ORDER BY m DESC -) as a; - -ELSE - -RETURN QUERY - -WITH RECURSIVE main_watercourse_DrainageLines(drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode, drn_nu_upstreamarea) AS -( - SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode, drn_nu_upstreamarea - FROM pghydro.pghft_drainage_line - WHERE drn_pk = $1 -UNION ALL - SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode, drn_nu_upstreamarea - FROM - ( - SELECT a.drn_pk, a.drn_drp_pk_targetnode, a.drn_drp_pk_sourcenode, a.drn_nu_upstreamarea - FROM pghydro.pghft_drainage_line a, main_watercourse_DrainageLines c - WHERE a.drn_drp_pk_targetnode = c.drn_drp_pk_sourcenode - ORDER BY drn_nu_upstreamarea DESC - LIMIT 1 - ) as foo -) -SELECT drn_pk, (ROW_NUMBER() OVER ())::integer AS n -FROM main_watercourse_DrainageLines; - -RETURN; - -END IF; - -END; -$$ -LANGUAGE PLPGSQL; - -------------------------------------------------------------------------- ---FUNCTION pghydro.pghfn_main_watercourse_DrainageLines(integer, integer) -------------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_main_watercourse_DrainageLines(integer, integer) -RETURNS TABLE(drn_pk_ integer, n_ integer) -AS $$ -DECLARE - -var1 integer; -var2 integer; - -BEGIN - -SELECT INTO var1 drn_drp_pk_sourcenode FROM pghydro.pghft_drainage_line WHERE drn_pk = $2; - -SELECT INTO var2 ssp_drn_pk FROM pghydro.pghft_shoreline_starting_point; - -IF $1 IN (SELECT pghydro.pghfn_Downstream_DrainageLines(var2)) THEN - -RETURN QUERY - -SELECT drn_pk, (ROW_NUMBER() OVER ())::integer AS n -FROM -( -SELECT drn_pk, (ROW_NUMBER() OVER ())::integer AS m -FROM -( -SELECT $2 as drn_pk -UNION ALL -SELECT pghydro.pghfn_Downstream_DrainageLines($2) as drn_pk -) as l -WHERE NOT EXISTS -( -SELECT drn_pk -FROM -( -SELECT pghydro.pghfn_Downstream_DrainageLines($1) as drn_pk -) as r -WHERE r.drn_pk = l.drn_pk -) -ORDER BY m DESC -) as a; - -ELSE - -RETURN QUERY - -WITH RECURSIVE main_watercourse_DrainageLines(drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode, drn_nu_upstreamarea) AS -( - SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode, drn_nu_upstreamarea - FROM pghydro.pghft_drainage_line - WHERE drn_pk = $1 -UNION ALL - SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode, drn_nu_upstreamarea - FROM - ( - SELECT a.drn_pk, a.drn_drp_pk_targetnode, a.drn_drp_pk_sourcenode, a.drn_nu_upstreamarea - FROM pghydro.pghft_drainage_line a, main_watercourse_DrainageLines c - WHERE a.drn_drp_pk_targetnode = c.drn_drp_pk_sourcenode - AND c.drn_drp_pk_sourcenode <> var1 - ORDER BY drn_nu_upstreamarea DESC - LIMIT 1 - ) as foo -) -SELECT drn_pk, (ROW_NUMBER() OVER ())::integer AS n -FROM main_watercourse_DrainageLines; - -RETURN; - -END IF; - -END; -$$ -LANGUAGE PLPGSQL; - --------------------------------------------------------------- ---FUNCTION pghydro.pghfn_main_watercourse_confluences(integer) --------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_main_watercourse_confluences(integer) -RETURNS TABLE(_drn_pk integer, _n integer) -AS $$ -DECLARE - -var1 integer; - -BEGIN - -RETURN QUERY - -SELECT drn_pk, n -FROM -( -SELECT drn.drn_pk, drn.drn_nu_upstreamarea, pwc.n -FROM pghydro.pghft_drainage_line drn -INNER JOIN -( -SELECT drn_pk_ as drn_pk, n_ as n -FROM pghydro.pghfn_main_watercourse_DrainageLines($1) -EXCEPT ALL -SELECT $1 as drn_pk, 1 as n -) pwc ON pwc.drn_pk = drn.drn_drn_pk_upstreamDrainageLine -ORDER BY pwc.n -) as a -ORDER BY drn_nu_upstreamarea DESC; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - ------------------------------------------------------------------------ ---FUNCTION pghydro.pghfn_main_watercourse_confluences(integer, integer) ------------------------------------------------------------------------ - -CREATE OR REPLACE FUNCTION pghydro.pghfn_main_watercourse_confluences(integer, integer) -RETURNS TABLE(_drn_pk integer, _n integer) -AS $$ - -BEGIN - -RETURN QUERY - -SELECT drn_pk, n -FROM -( -SELECT drn.drn_pk, drn.drn_nu_upstreamarea, pwc.n -FROM pghydro.pghft_drainage_line drn -INNER JOIN -( -SELECT drn_pk_ as drn_pk, n_ as n -FROM pghydro.pghfn_main_watercourse_DrainageLines($1, $2) -EXCEPT ALL -SELECT $1 as drn_pk, 1 as n -) pwc ON pwc.drn_pk = drn.drn_drn_pk_upstreamDrainageLine -ORDER BY pwc.n -) as a -ORDER BY drn_nu_upstreamarea DESC; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - -------------------------------------------------------------------- ---FUNCTION pghydro.pghfn_main_watercourse_4_confluences(in integer) -------------------------------------------------------------------- - - -CREATE OR REPLACE FUNCTION pghydro.pghfn_main_watercourse_4_confluences(in integer) -RETURNS SETOF integer -AS $$ -BEGIN - -RETURN QUERY - -SELECT drn_pk -FROM -( -SELECT _drn_pk as drn_pk, _n as n -FROM pghydro.pghfn_main_watercourse_confluences($1) -LIMIT 4 -) as a -ORDER BY n; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - -------------------------------------------------------------------------- ---FUNCTION pghydro.pghfn_main_watercourse_4_confluences(integer, integer) -------------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_main_watercourse_4_confluences(integer, integer) -RETURNS SETOF integer -AS $$ - -BEGIN - -RETURN QUERY - -SELECT drn_pk -FROM -( -SELECT _drn_pk as drn_pk, _n as n -FROM pghydro.pghfn_main_watercourse_confluences($1, $2) -LIMIT 4 -) as a -ORDER BY n; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - - -------------------------------------------------------------------------- ---FUNCTION pghydro.pghfn_main_watercourse_9_confluences(integer, integer) -------------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_main_watercourse_9_confluences(integer, integer) -RETURNS TABLE(vard integer, varu integer)AS $$ - -DECLARE - -var1d integer; -var1u integer; -var2 integer; -var3d integer; -var3u integer; -var4 integer; -var5d integer; -var5u integer; -var6 integer; -var7d integer; -var7u integer; -var8 integer; -var9d integer; -var9u integer; -var9 integer; -con4 integer[]; -drn_pk_count integer; - -BEGIN - -IF $2 = -99 THEN - -SELECT INTO con4 ARRAY(SELECT pghydro.pghfn_main_watercourse_4_confluences($1)); - -ELSE - -SELECT INTO con4 ARRAY(SELECT pghydro.pghfn_main_watercourse_4_confluences($1, $2)); - -END IF; - -SELECT INTO drn_pk_count array_length(con4, 1); - -SELECT INTO var2 con4[1]; - -SELECT INTO var4 con4[2]; - -SELECT INTO var6 con4[3]; - -SELECT INTO var8 con4[4]; - -var9 = var8; - -var1d = $1; - -SELECT INTO var1u drn_drn_pk_downstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var2; - -SELECT INTO var3d drn_drn_pk_upstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var2; - -SELECT INTO var3u drn_drn_pk_downstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var4; - -SELECT INTO var5d drn_drn_pk_upstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var4; - -SELECT INTO var5u drn_drn_pk_downstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var6; - -SELECT INTO var7d drn_drn_pk_upstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var6; - -SELECT INTO var7u drn_drn_pk_downstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var8; - -SELECT INTO var9d drn_drn_pk_upstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var8; - -SELECT INTO var9u drn_drn_pk_downstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var9; - -IF $2 = -99 AND drn_pk_count = 1 THEN RETURN QUERY -SELECT d, u -FROM -( -SELECT var1d as d, var1u as u, 1 as i -UNION -SELECT var2 as d, -99 as u, 2 as i -UNION -SELECT var3d as d, -99 as u, 3 as i -) as a -ORDER BY i; - -ELSIF $2 = -99 AND drn_pk_count = 2 THEN RETURN QUERY -SELECT d, u -FROM -( -SELECT var1d as d, var1u as u, 1 as i -UNION -SELECT var2 as d, -99 as u, 2 as i -UNION -SELECT var3d as d, var3u as u, 3 as i -UNION -SELECT var4 as d, -99 as u, 4 as i -UNION -SELECT var5d as d, -99 as u, 5 as i -) as a -ORDER BY i; - -ELSIF $2 = -99 AND drn_pk_count = 3 THEN RETURN QUERY -SELECT d, u -FROM -( -SELECT var1d as d, var1u as u, 1 as i -UNION -SELECT var2 as d, -99 as u, 2 as i -UNION -SELECT var3d as d, var3u as u, 3 as i -UNION -SELECT var4 as d, -99 as u, 4 as i -UNION -SELECT var5d as d, var5u as u, 5 as i -UNION -SELECT var6 as d, -99 as u, 6 as i -UNION -SELECT var7d as d, -99 as u, 7 as i -) as a -ORDER BY i; - -ELSIF $2 = -99 AND drn_pk_count = 4 THEN RETURN QUERY -SELECT d, u -FROM -( -SELECT var1d as d, var1u as u, 1 as i -UNION -SELECT var2 as d, -99 as u, 2 as i -UNION -SELECT var3d as d, var3u as u, 3 as i -UNION -SELECT var4 as d, -99 as u, 4 as i -UNION -SELECT var5d as d, var5u as u, 5 as i -UNION -SELECT var6 as d, -99 as u, 6 as i -UNION -SELECT var7d as d, var7u as u, 7 as i -UNION -SELECT var8 as d, -99 as u, 8 as i -UNION -SELECT var9d as d, -99 as u, 9 as i -) as a -ORDER BY i; - -ELSIF $2 <> -99 AND drn_pk_count = 1 THEN RETURN QUERY -SELECT d, u -FROM -( -SELECT var1d as d, var1u as u, 1 as i -UNION -SELECT var2 as d, -99 as u, 2 as i -UNION -SELECT var3d as d, $2 as u, 3 as i -) as a -ORDER BY i; - -ELSIF $2 <> -99 AND drn_pk_count = 2 THEN RETURN QUERY -SELECT d, u -FROM -( -SELECT var1d as d, var1u as u, 1 as i -UNION -SELECT var2 as d, -99 as u, 2 as i -UNION -SELECT var3d as d, var3u as u, 3 as i -UNION -SELECT var4 as d, -99 as u, 4 as i -UNION -SELECT var5d as d, $2 as u, 5 as i -) as a -ORDER BY i; - -ELSIF $2 <> -99 AND drn_pk_count = 3 THEN RETURN QUERY -SELECT d, u -FROM -( -SELECT var1d as d, var1u as u, 1 as i -UNION -SELECT var2 as d, -99 as u, 2 as i -UNION -SELECT var3d as d, var3u as u, 3 as i -UNION -SELECT var4 as d, -99 as u, 4 as i -UNION -SELECT var5d as d, var5u as u, 5 as i -UNION -SELECT var6 as d, -99 as u, 6 as i -UNION -SELECT var7d as d, $2 as u, 7 as i -) as a -ORDER BY i; - -ELSIF $2 <> -99 AND drn_pk_count = 4 THEN RETURN QUERY -SELECT d, u -FROM -( -SELECT var1d as d, var1u as u, 1 as i -UNION -SELECT var2 as d, -99 as u, 2 as i -UNION -SELECT var3d as d, var3u as u, 3 as i -UNION -SELECT var4 as d, -99 as u, 4 as i -UNION -SELECT var5d as d, var5u as u, 5 as i -UNION -SELECT var6 as d, -99 as u, 6 as i -UNION -SELECT var7d as d, var7u as u, 7 as i -UNION -SELECT var8 as d, -99 as u, 8 as i -UNION -SELECT var9d as d, $2 as u, 9 as i -) as a -ORDER BY i; - -END IF -; -END; -$$ -LANGUAGE PLPGSQL; - - -------------------------------------------------------------------- ---FUNCTION pghydro.pghfn_pfafstetter_codification(integer, integer) -------------------------------------------------------------------- -CREATE OR REPLACE FUNCTION pghydro.pghfn_pfafstetter_codification(integer, integer) -RETURNS TABLE(drn_pk_ integer, pfafstetter_codification_ integer) -AS $$ - -DECLARE - -var1d integer; -var1u integer; -var2 integer; -var3d integer; -var3u integer; -var4 integer; -var5d integer; -var5u integer; -var6 integer; -var7d integer; -var7u integer; -var8 integer; -var9d integer; -con4 integer[]; - -BEGIN - - -IF $2 = -99 THEN - -SELECT INTO con4 ARRAY(SELECT pghydro.pghfn_main_watercourse_4_confluences($1)); - -ELSE - -SELECT INTO con4 ARRAY(SELECT pghydro.pghfn_main_watercourse_4_confluences($1, $2)); - -END IF; - -SELECT INTO var2 con4[1]; - -SELECT INTO var4 con4[2]; - -SELECT INTO var6 con4[3]; - -SELECT INTO var8 con4[4]; - -var1d = $1; - -SELECT INTO var1u drn_drn_pk_downstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var2; - -SELECT INTO var3d drn_drn_pk_upstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var2; - -SELECT INTO var3u drn_drn_pk_downstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var4; - -SELECT INTO var5d drn_drn_pk_upstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var4; - -SELECT INTO var5u drn_drn_pk_downstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var6; - -SELECT INTO var7d drn_drn_pk_upstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var6; - -SELECT INTO var7u drn_drn_pk_downstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var8; - -SELECT INTO var9d drn_drn_pk_upstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var8; - -IF $2 = -99 THEN RETURN QUERY - ----pfafstetter_basin_codification 1 - -SELECT pghydro.pghfn_upstreamDrainageLines($1, var1u) as drn_pk, 1 as pfafstetter_codification - -UNION ALL - ----pfafstetter_basin_codification 2 - -SELECT pghydro.pghfn_upstreamDrainageLines(var2) as drn_pk, 2 as pfafstetter_codification - -UNION ALL - ----pfafstetter_basin_codification 3 - -SELECT pghydro.pghfn_upstreamDrainageLines(var3d, var3u) as drn_pk, 3 as pfafstetter_codification - -UNION ALL - ----pfafstetter_basin_codification 4 - -SELECT pghydro.pghfn_upstreamDrainageLines(var4) as drn_pk, 4 as pfafstetter_codification - -UNION ALL - ----pfafstetter_basin_codification 5 - -SELECT pghydro.pghfn_upstreamDrainageLines(var5d, var5u) as drn_pk, 5 as pfafstetter_codification - -UNION ALL - ----pfafstetter_basin_codification 6 - -SELECT pghydro.pghfn_upstreamDrainageLines(var6) as drn_pk, 6 as pfafstetter_codification - -UNION ALL - ----pfafstetter_basin_codification 7 - -SELECT pghydro.pghfn_upstreamDrainageLines(var7d, var7u) as drn_pk, 7 as pfafstetter_codification - -UNION ALL - ----pfafstetter_basin_codification 8 - -SELECT pghydro.pghfn_upstreamDrainageLines(var8) as drn_pk, 8 as pfafstetter_codification - -UNION ALL - ----pfafstetter_basin_codification 9 - -SELECT pghydro.pghfn_upstreamDrainageLines(var9d) as drn_pk, 9 as pfafstetter_codification; - -ELSIF $2 <> -99 THEN RETURN QUERY - -SELECT pghydro.pghfn_upstreamDrainageLines($1, var1u) as drn_pk, 1 as pfafstetter_codification - -UNION ALL - ----pfafstetter_basin_codification 2 - -SELECT pghydro.pghfn_upstreamDrainageLines(var2) as drn_pk, 2 as pfafstetter_codification - -UNION ALL - ------pfafstetter_basin_codification 3 - -SELECT pghydro.pghfn_upstreamDrainageLines(var3d, var3u) as drn_pk, 3 as pfafstetter_codification - -UNION ALL - ----pfafstetter_basin_codification 4 - -SELECT pghydro.pghfn_upstreamDrainageLines(var4) as drn_pk, 4 as pfafstetter_codification -UNION ALL - ------pfafstetter_basin_codification 5 - -SELECT pghydro.pghfn_upstreamDrainageLines(var5d, var5u) as drn_pk, 5 as pfafstetter_codification - -UNION ALL - ----pfafstetter_basin_codification 6 - -SELECT pghydro.pghfn_upstreamDrainageLines(var6) as drn_pk, 6 as pfafstetter_codification - -UNION ALL - ------pfafstetter_basin_codification 7 - -SELECT pghydro.pghfn_upstreamDrainageLines(var7d, var7u) as drn_pk, 7 as pfafstetter_codification - -UNION ALL - ----pfafstetter_basin_codification 8 - -SELECT pghydro.pghfn_upstreamDrainageLines(var8) as drn_pk, 8 as pfafstetter_codification -UNION ALL - ----pfafstetter_basin_codification 9 - -SELECT pghydro.pghfn_upstreamDrainageLines(var9d, $2) as drn_pk, 9 as pfafstetter_codification; - -END IF - -; -END; -$$ -LANGUAGE PLPGSQL; - --------------------------------------------------------------------- ---FUNCTION pghydro.pghfn_pfafstetter_codifications(integer, integer) --------------------------------------------------------------------- -CREATE OR REPLACE FUNCTION pghydro.pghfn_pfafstetter_codifications(integer, integer) -RETURNS TABLE(drn_pk_ integer, pfafstetter_codification_ integer, depth_ integer) -AS $$ -BEGIN - -RETURN QUERY - -SELECT (pghfn_pfafstetter_codification).drn_pk_, (pghfn_pfafstetter_codification).pfafstetter_codification_, d.depth -FROM -( ------ -SELECT pghydro.pghfn_pfafstetter_codification(vard, varu), e.depth -FROM -( ----- -WITH cod as -( -WITH RECURSIVE cod(vard, varu, vard2, varu2, depth) AS -( - SELECT $1 as vard, $2 as varu, 0 as vard2, 0 as varu, 1 as depth -UNION ALL - SELECT (pghfn_main_watercourse_9_confluences).vard as vard, (pghfn_main_watercourse_9_confluences).varu, vard2, varu2, depth - FROM - ( - SELECT pghydro.pghfn_main_watercourse_9_confluences(vard, varu), c.vard as vard2, c.varu as varu2, c.depth + 1 as depth - FROM cod c - WHERE vard = c.vard - AND varu = c.varu - ) as b -) -SELECT vard, varu, vard2, varu2, depth -FROM cod -WHERE vard <> varu -) -SELECT vard, varu, depth -FROM cod -WHERE vard in (SELECT DISTINCT vard2 FROM cod) ----- -) as e ------ -) as d -; -END; -$$ -LANGUAGE PLPGSQL; - ------------------------------------------------------------------------------ ---FUNCTION pghydro.pghfn_Calculate_Pfafstetter_Codification(integer, integer) ------------------------------------------------------------------------------ - -CREATE OR REPLACE FUNCTION pghydro.pghfn_Calculate_Pfafstetter_Codification(integer, integer) -RETURNS varchar AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -DROP INDEX IF EXISTS pghydro.dra_pk_idx; - -DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; - -DROP INDEX IF EXISTS pghydro.pbc_drn_pk_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drn_pk_downstreamDrainageLine_idx; - -DROP INDEX IF EXISTS pghydro.drn_drn_pk_upstreamDrainageLine_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -CREATE INDEX dra_pk_idx ON pghydro.pghft_drainage_area(dra_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -CREATE INDEX drn_dra_pk_idx ON pghydro.pghft_drainage_line(drn_dra_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - -CREATE INDEX drn_drn_pk_downstreamDrainageLine_idx ON pghydro.pghft_drainage_line(drn_drn_pk_downstreamDrainageLine); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; - -CREATE INDEX drn_drn_pk_upstreamDrainageLine_idx ON pghydro.pghft_drainage_line(drn_drn_pk_upstreamDrainageLine); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; - -DROP TABLE IF EXISTS pghydro.pghtb_input_pfafstetterbasincode; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; - -CREATE TABLE pghydro.pghtb_input_pfafstetterbasincode AS - -SELECT drn_pk_ as pbc_drn_pk, 'R'||string_agg((pfafstetter_codification_),'' ORDER BY depth) as pbc_dra_cd_pfafstetterbasin -FROM -( -SELECT (pghfn_pfafstetter_codifications).drn_pk_, ((pghfn_pfafstetter_codifications).pfafstetter_codification_)::text, ((pghfn_pfafstetter_codifications).depth_) as depth -FROM pghydro.pghfn_pfafstetter_codifications($1, $2) -) as a -GROUP BY drn_pk_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 11 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drn_pk_downstreamDrainageLine_idx; - -DROP INDEX IF EXISTS pghydro.drn_drn_pk_upstreamDrainageLine_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 12 : %', time_; - -CREATE INDEX pbc_drn_pk_idx ON pghydro.pghtb_input_pfafstetterbasincode(pbc_drn_pk); - -UPDATE pghydro.pghft_drainage_area dra -SET dra_cd_pfafstetterbasin = pbc.pbc_dra_cd_pfafstetterbasin -FROM pghydro.pghtb_input_pfafstetterbasincode pbc, pghydro.pghft_drainage_line drn -WHERE pbc.pbc_drn_pk = drn.drn_pk -AND drn.drn_dra_pk = dra.dra_pk; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 13 : %', time_; - -DROP TABLE pghydro.pghtb_input_pfafstetterbasincode; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -DROP INDEX IF EXISTS pghydro.dra_pk_idx; - -DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; - -DROP INDEX IF EXISTS pghydro.pbc_drn_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'END OF ALL PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ---------------------------------------------------------------------- ---FUNCTION pghydro.pghfn_Calculate_Pfafstetter_Codification() ---------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_Calculate_Pfafstetter_Codification() -RETURNS varchar AS -$$ -DECLARE -time_ timestamp; -var1 integer; -var2 integer; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -DROP INDEX IF EXISTS pghydro.dra_pk_idx; - -DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; - -DROP INDEX IF EXISTS pghydro.pbc_drn_pk_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drn_pk_downstreamDrainageLine_idx; - -DROP INDEX IF EXISTS pghydro.drn_drn_pk_upstreamDrainageLine_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -CREATE INDEX dra_pk_idx ON pghydro.pghft_drainage_area(dra_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -CREATE INDEX drn_dra_pk_idx ON pghydro.pghft_drainage_line(drn_dra_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - -CREATE INDEX drn_drn_pk_downstreamDrainageLine_idx ON pghydro.pghft_drainage_line(drn_drn_pk_downstreamDrainageLine); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; - -CREATE INDEX drn_drn_pk_upstreamDrainageLine_idx ON pghydro.pghft_drainage_line(drn_drn_pk_upstreamDrainageLine); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; - -SELECT INTO var1 drn_pk -FROM -( -SELECT drn_pk -FROM pghydro.pghft_drainage_line -WHERE drn_drp_pk_targetnode = -( -SELECT sep_drp_pk -FROM pghydro.pghft_shoreline_ending_point -) -) as a; - -SELECT INTO var2 drn_pk -FROM -( -SELECT drn_pk -FROM pghydro.pghft_drainage_line -WHERE drn_drp_pk_sourcenode = -( -SELECT ssp_drp_pk -FROM pghydro.pghft_shoreline_starting_point -) -) as a; - -IF var2 is null THEN var2 = -99; -END IF; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; - -DROP TABLE IF EXISTS pghydro.pghtb_input_pfafstetterbasincode; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 11 : %', time_; - -CREATE TABLE pghydro.pghtb_input_pfafstetterbasincode AS - -SELECT drn_pk_ as pbc_drn_pk, 'R'||string_agg((pfafstetter_codification_),'' ORDER BY depth) as pbc_dra_cd_pfafstetterbasin -FROM -( -SELECT (pghfn_pfafstetter_codifications).drn_pk_, ((pghfn_pfafstetter_codifications).pfafstetter_codification_)::text, ((pghfn_pfafstetter_codifications).depth_) as depth -FROM pghydro.pghfn_pfafstetter_codifications(var1, var2) -) as a -GROUP BY drn_pk_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 12 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drn_pk_downstreamDrainageLine_idx; - -DROP INDEX IF EXISTS pghydro.drn_drn_pk_upstreamDrainageLine_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 13 : %', time_; - -CREATE INDEX pbc_drn_pk_idx ON pghydro.pghtb_input_pfafstetterbasincode(pbc_drn_pk); - -UPDATE pghydro.pghft_drainage_area dra -SET dra_cd_pfafstetterbasin = pbc.pbc_dra_cd_pfafstetterbasin -FROM pghydro.pghtb_input_pfafstetterbasincode pbc, pghydro.pghft_drainage_line drn -WHERE pbc.pbc_drn_pk = drn.drn_pk -AND drn.drn_dra_pk = dra.dra_pk; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 14 : %', time_; - -DROP TABLE pghydro.pghtb_input_pfafstetterbasincode; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -DROP INDEX IF EXISTS pghydro.dra_pk_idx; - -DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; - -DROP INDEX IF EXISTS pghydro.pbc_drn_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'END OF ALL PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ------------------------------------------------------------- ---FUNCTION pghydro.pghfn_UpdatePfafstetterBasinCode(varchar) ------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdatePfafstetterBasinCode(varchar) -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -UPDATE pghydro.pghft_drainage_area -SET dra_cd_pfafstetterbasin = $1||ltrim(dra_cd_pfafstetterbasin, 'R'); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -UPDATE pghydro.pghft_drainage_area -SET dra_nu_pfafstetterbasincodelevel = length(dra_cd_pfafstetterbasin); - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF ALL PROCESS IN : %', time_; - -END; -$$ -LANGUAGE PLPGSQL; - - ------------------------------------------------------------- ---FUNCTION pghydro.pghfn_UpdatePfafstetterWatercourseCode() ------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdatePfafstetterWatercourseCode() -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -DROP TABLE IF EXISTS pghydro.pghft_drainage_line_temp; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -DROP INDEX IF EXISTS pghydro.dra_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -CREATE TABLE pghydro.pghft_drainage_line_temp( -drn_pk integer, -wtc_cd_pfafstetterwatercourse character varying, -wtc_nu_pfafstetterwatercoursecodeorder smallint, -wtc_nu_pfafstetterwatercoursecodelevel smallint, -wtc_gm_area numeric, -wtc_nu_distancetosea numeric, -wtc_cd_pfafstetterwatercourse_downstream character varying, -wtc_gm_length numeric -); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - ---drn_pk - -INSERT INTO pghydro.pghft_drainage_line_temp(drn_pk) -SELECT drn_pk -FROM pghydro.pghft_drainage_line -WHERE drn_nu_distancetosea is not null; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - -CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; - -CREATE INDEX dra_pk_idx ON pghydro.pghft_drainage_area(dra_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; - -CREATE INDEX drn_dra_pk_idx ON pghydro.pghft_drainage_line(drn_dra_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; - ---wtc_cd_pfafstetterwatercourse - -UPDATE pghydro.pghft_drainage_line_temp tmp -SET wtc_cd_pfafstetterwatercourse = rtrim(dra.dra_cd_pfafstetterbasin, '13579') -FROM pghydro.pghft_drainage_area dra, pghydro.pghft_drainage_line drn -WHERE drn.drn_dra_pk = dra.dra_pk -AND drn.drn_pk = tmp.drn_pk; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 11 : %', time_; - ---wtc_nu_pfafstetterwatercoursecodeorder - -UPDATE pghydro.pghft_drainage_line_temp -SET wtc_nu_pfafstetterwatercoursecodeorder = length(translate(wtc_cd_pfafstetterwatercourse, '13579', '')); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 12 : %', time_; - ---wtc_nu_pfafstetterwatercoursecodelevel - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 13 : %', time_; - -UPDATE pghydro.pghft_drainage_line_temp -SET wtc_nu_pfafstetterwatercoursecodelevel = length(wtc_cd_pfafstetterwatercourse); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 14 : %', time_; - ---wtc_nu_distancetosea - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 15 : %', time_; - -UPDATE pghydro.pghft_drainage_line_temp tmp -SET wtc_nu_distancetosea = a.wtc_nu_distancetosea -FROM -( -SELECT tmp.wtc_cd_pfafstetterwatercourse, min(drn.drn_nu_distancetosea) as wtc_nu_distancetosea -FROM pghydro.pghft_drainage_line_temp tmp, pghydro.pghft_drainage_line drn -WHERE drn.drn_pk = tmp.drn_pk -GROUP BY tmp.wtc_cd_pfafstetterwatercourse -) as a -WHERE tmp.wtc_cd_pfafstetterwatercourse = a.wtc_cd_pfafstetterwatercourse; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 16 : %', time_; - ---wtc_gm_area - -UPDATE pghydro.pghft_drainage_line_temp tmp -SET wtc_gm_area = a.wtc_gm_area -FROM -( -SELECT tmp.wtc_cd_pfafstetterwatercourse, max(drn.drn_nu_upstreamarea) as wtc_gm_area -FROM pghydro.pghft_drainage_line_temp tmp, pghydro.pghft_drainage_line drn -WHERE drn.drn_pk = tmp.drn_pk -GROUP BY tmp.wtc_cd_pfafstetterwatercourse -) as a -WHERE tmp.wtc_cd_pfafstetterwatercourse = a.wtc_cd_pfafstetterwatercourse; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 17 : %', time_; - ---wtc_cd_pfafstetterwatercourse_downstream - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 18 : %', time_; - -UPDATE pghydro.pghft_drainage_line_temp -SET wtc_cd_pfafstetterwatercourse_downstream = rtrim(substring(wtc_cd_pfafstetterwatercourse from 1 for (wtc_nu_pfafstetterwatercoursecodelevel-1)), '13579'); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 19 : %', time_; - ---wtc_gm_length - -UPDATE pghydro.pghft_drainage_line_temp tmp -SET wtc_gm_length = a.wtc_gm_length -FROM -( -SELECT tmp.wtc_cd_pfafstetterwatercourse, sum(drn.drn_gm_length) as wtc_gm_length -FROM pghydro.pghft_drainage_line_temp tmp, pghydro.pghft_drainage_line drn -WHERE drn.drn_pk = tmp.drn_pk -GROUP BY tmp.wtc_cd_pfafstetterwatercourse -) as a -WHERE tmp.wtc_cd_pfafstetterwatercourse = a.wtc_cd_pfafstetterwatercourse; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 20 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 21 : %', time_; - -DROP INDEX IF EXISTS pghydro.dra_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 22 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF ALL PROCESS IN : %', time_; - -END; - -$$ -LANGUAGE PLPGSQL; - - ----------------------------------------------------- ---FUNCTION pghydro.pghfn_UpdateWatercourse() ----------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdateWatercourse() -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF ALL PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -TRUNCATE pghydro.pghft_watercourse; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -TRUNCATE pghydro.pghft_stream_mouth; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -TRUNCATE pghydro.pghft_watercourse_ending_point; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -TRUNCATE pghydro.pghft_watercourse_starting_point; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -PERFORM setval(('pghydro.wtc_pk_seq'::text)::regclass, 1, false); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -DROP INDEX IF EXISTS pghydro.wtc_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_wtc_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; - -DROP INDEX IF EXISTS pghydro.tmp_drn_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; - -DROP INDEX IF EXISTS pghydro.tmp_wtc_cd_pfafstetterwatercourse_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 11 : %', time_; - ---wtc_cd_pfafstetterwatercourse - -INSERT INTO pghydro.pghft_watercourse -( -wtc_cd_pfafstetterwatercourse -) -SELECT DISTINCT -wtc_cd_pfafstetterwatercourse -FROM pghydro.pghft_drainage_line_temp; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 12 : %', time_; - -CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 13 : %', time_; - -CREATE INDEX tmp_drn_pk_idx ON pghydro.pghft_drainage_line_temp(drn_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 14 : %', time_; - -CREATE INDEX tmp_wtc_cd_pfafstetterwatercourse_idx ON pghydro.pghft_drainage_line_temp(wtc_cd_pfafstetterwatercourse); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 15 : %', time_; - ---wtc_gm - -UPDATE pghydro.pghft_watercourse wtc -SET wtc_gm = a.wtc_gm -FROM -( -SELECT tmp.wtc_cd_pfafstetterwatercourse, ST_UNION(drn.drn_gm) as wtc_gm -FROM pghydro.pghft_drainage_line_temp tmp, pghydro.pghft_drainage_line drn -WHERE tmp.drn_pk = drn.drn_pk -GROUP BY tmp.wtc_cd_pfafstetterwatercourse -) as a -WHERE a.wtc_cd_pfafstetterwatercourse = wtc.wtc_cd_pfafstetterwatercourse; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 16 : %', time_; - ---wtc_nu_distancetosea - -UPDATE pghydro.pghft_watercourse wtc -SET wtc_nu_distancetosea = tmp.wtc_nu_distancetosea -FROM pghydro.pghft_drainage_line_temp tmp -WHERE tmp.wtc_cd_pfafstetterwatercourse = wtc.wtc_cd_pfafstetterwatercourse; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 17 : %', time_; - ---wtc_cd_pfafstetterwatercourse_downstream - -UPDATE pghydro.pghft_watercourse wtc -SET wtc_cd_pfafstetterwatercourse_downstream = tmp.wtc_cd_pfafstetterwatercourse_downstream -FROM pghydro.pghft_drainage_line_temp tmp -WHERE tmp.wtc_cd_pfafstetterwatercourse = wtc.wtc_cd_pfafstetterwatercourse; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 18 : %', time_; - ---wtc_gm_area - -UPDATE pghydro.pghft_watercourse wtc -SET wtc_gm_area = tmp.wtc_gm_area -FROM pghydro.pghft_drainage_line_temp tmp -WHERE tmp.wtc_cd_pfafstetterwatercourse = wtc.wtc_cd_pfafstetterwatercourse; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 19 : %', time_; - ---wtc_cd_pfafstetterwatercourse - -UPDATE pghydro.pghft_watercourse wtc -SET wtc_cd_pfafstetterwatercourse = tmp.wtc_cd_pfafstetterwatercourse -FROM pghydro.pghft_drainage_line_temp tmp -WHERE tmp.wtc_cd_pfafstetterwatercourse = wtc.wtc_cd_pfafstetterwatercourse; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 20 : %', time_; - ---wtc_nu_pfafstetterwatercoursecodelevel - -UPDATE pghydro.pghft_watercourse wtc -SET wtc_nu_pfafstetterwatercoursecodelevel = tmp.wtc_nu_pfafstetterwatercoursecodelevel -FROM pghydro.pghft_drainage_line_temp tmp -WHERE tmp.wtc_cd_pfafstetterwatercourse = wtc.wtc_cd_pfafstetterwatercourse; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 21 : %', time_; - ---wtc_nu_pfafstetterwatercoursecodeorder - -UPDATE pghydro.pghft_watercourse wtc -SET wtc_nu_pfafstetterwatercoursecodeorder = tmp.wtc_nu_pfafstetterwatercoursecodeorder -FROM pghydro.pghft_drainage_line_temp tmp -WHERE tmp.wtc_cd_pfafstetterwatercourse = wtc.wtc_cd_pfafstetterwatercourse; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 22 : %', time_; - ---wtc_gm_length - -UPDATE pghydro.pghft_watercourse wtc -SET wtc_gm_length = tmp.wtc_gm_length -FROM pghydro.pghft_drainage_line_temp tmp -WHERE tmp.wtc_cd_pfafstetterwatercourse = wtc.wtc_cd_pfafstetterwatercourse; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 23 : %', time_; - ---drn_wtc_pk - -UPDATE pghydro.pghft_drainage_line drn -SET drn_wtc_pk = wtc.wtc_pk -FROM pghydro.pghft_watercourse wtc, pghydro.pghft_drainage_line_temp tmp -WHERE drn.drn_pk = tmp.drn_pk -AND wtc.wtc_cd_pfafstetterwatercourse = tmp.wtc_cd_pfafstetterwatercourse; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 24 : %', time_; - ---drn_rcl_pk_wtc - -UPDATE pghydro.pghft_drainage_line -SET drn_rcl_pk_wtc = 13; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 25 : %', time_; - -CREATE INDEX wtc_pk_idx ON pghydro.pghft_watercourse(wtc_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 26 : %', time_; - -CREATE INDEX drn_wtc_pk_idx ON pghydro.pghft_drainage_line(drn_wtc_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 27 : %', time_; - ---drn_nu_distancetowatercourse - -UPDATE pghydro.pghft_drainage_line drn -SET drn_nu_distancetowatercourse = drn.drn_nu_distancetosea - wtc.wtc_nu_distancetosea -FROM pghydro.pghft_watercourse wtc -WHERE drn.drn_wtc_pk = wtc.wtc_pk; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 28 : %', time_; - -DROP INDEX IF EXISTS pghydro.wtc_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 29 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_wtc_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 30 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 31 : %', time_; - -DROP INDEX IF EXISTS pghydro.tmp_drn_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 32 : %', time_; - -DROP INDEX IF EXISTS pghydro.tmp_wtc_cd_pfafstetterwatercourse_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 33 : %', time_; - -DROP TABLE IF EXISTS pghydro.pghft_drainage_line_temp; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; -END; -$$ -LANGUAGE PLPGSQL; - - ----------------------------------------------------------- ---FUNCTION pghydro.pghfn_PfafstetterBasinCodeLevel() ----------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_PfafstetterBasinCodeLevel() -RETURNS SETOF smallint AS -$$ -SELECT DISTINCT dra_nu_pfafstetterbasincodelevel -FROM pghydro.pghft_drainage_area -ORDER BY dra_nu_pfafstetterbasincodelevel; -$$ -LANGUAGE SQL; - - --------------------------------------------------------- ---FUNCTION pghydro.pghfn_numPfafstetterBasinCodeLevel() --------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_numPfafstetterBasinCodeLevel() -RETURNS bigint AS -$$ -SELECT count(dra_nu_pfafstetterbasincodelevel) -FROM -( -SELECT pghydro.pghfn_PfafstetterBasinCodeLevel() as dra_nu_pfafstetterbasincodelevel -) as a; -$$ -LANGUAGE SQL; - - ----------------------------------------------------------- ---FUNCTION pghydro.pghfn_PfafstetterBasinCodeLevelN(integer) ----------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_PfafstetterBasinCodeLevelN(integer) -RETURNS smallint AS -$$ -SELECT dra_nu_pfafstetterbasincodelevel -FROM -( -SELECT (ROW_NUMBER() OVER ())::integer AS seq_dra_nu_pfafstetterbasincodelevel, dra_nu_pfafstetterbasincodelevel -FROM -( -SELECT pghydro.pghfn_PfafstetterBasinCodeLevel() as dra_nu_pfafstetterbasincodelevel -) as a -) as b -WHERE seq_dra_nu_pfafstetterbasincodelevel = $1; -$$ -LANGUAGE SQL; - --------------------------------------------------------------- ---FUNCTION pghydro.pghfn_UpdateWatershedDrainageArea(integer) --------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdateWatershedDrainageArea(integer) -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -INSERT INTO pghydro.pghft_watershed (wts_cd_pfafstetterbasin, wts_cd_pfafstetterbasincodelevel, wts_gm_area, wts_gm) -SELECT dra_cd_pfafstetterbasin, $1 as dra_nu_pfafstetterbasincodelevel, SUM(dra_gm_area) as dra_gm_area, ST_Multi((ST_UNION(dra_gm))) as dra_gm -FROM -( -SELECT substring(dra_cd_pfafstetterbasin FROM 1 FOR $1) as dra_cd_pfafstetterbasin, dra_gm_area, dra_gm -FROM pghydro.pghft_drainage_area -) as a -GROUP BY dra_cd_pfafstetterbasin; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -UPDATE pghydro.pghft_watershed wts -SET wts_gm = a.wts_gm -FROM -( -SELECT wts_pk, ST_Collect(ST_MakePolygon(wts_gm)) As wts_gm -FROM ( - SELECT wts_pk, ST_ExteriorRing((ST_Dump(wts_gm)).geom) As wts_gm - FROM pghydro.pghft_watershed - ) as a -GROUP BY wts_pk -) as a -WHERE a.wts_pk = wts.wts_pk -AND wts.wts_cd_pfafstetterbasincodelevel = $1; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RAISE NOTICE 'BASIN LEVEL % FINISHED', $1; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ----------------------------------------------------- ---FUNCTION pghydro.pghfn_UpdateWatershed(integer) ----------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdateWatershed(integer) -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -DROP INDEX IF EXISTS pghydro.wts_cd_pfafstetterbasincodelevel_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -CREATE INDEX wts_cd_pfafstetterbasincodelevel_idx ON pghydro.pghft_watershed(wts_cd_pfafstetterbasincodelevel); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -INSERT INTO pghydro.pghft_watershed (wts_cd_pfafstetterbasin, wts_cd_pfafstetterbasincodelevel, wts_gm_area, wts_gm) -SELECT wts_cd_pfafstetterbasin, $1-1 as wts_cd_pfafstetterbasincodelevel, SUM(wts_gm_area) as wts_gm_area, ST_Multi(ST_UNION(wts_gm)) as wts_gm -FROM -( -SELECT substring(wts_cd_pfafstetterbasin FROM 1 FOR $1-1) as wts_cd_pfafstetterbasin, wts_gm_area, wts_gm -FROM -( -SELECT wts_cd_pfafstetterbasin, wts_cd_pfafstetterbasincodelevel, wts_gm_area, wts_gm -FROM pghydro.pghft_watershed -WHERE wts_cd_pfafstetterbasincodelevel = $1 -) as b -) as a -GROUP BY wts_cd_pfafstetterbasin; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -UPDATE pghydro.pghft_watershed wts -SET wts_gm = a.wts_gm -FROM -( -SELECT wts_pk, ST_Collect(ST_MakePolygon(wts_gm)) As wts_gm -FROM ( - SELECT wts_pk, ST_ExteriorRing((ST_Dump(wts_gm)).geom) As wts_gm - FROM pghydro.pghft_watershed - ) as a -GROUP BY wts_pk -) as a -WHERE a.wts_pk = wts.wts_pk -AND wts.wts_cd_pfafstetterbasincodelevel = $1-1; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -DROP INDEX IF EXISTS pghydro.wts_cd_pfafstetterbasincodelevel_idx; - -RAISE NOTICE 'BASIN LEVEL % FINISHED', $1-1; - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -END; -$$ -LANGUAGE PLPGSQL; - ----------------------------------------------------------------- ---FUNCTION pghydro.pghfn_InsertColumnPfafstetterBasinCodeLevel() ----------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_InsertColumnPfafstetterBasinCodeLevel() -RETURNS character varying AS -$$ - -DECLARE -min_var integer; -max_var integer; -time_ timestamp; -i integer; -j integer; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -SELECT INTO max_var max(dra_nu_pfafstetterbasincodelevel) FROM pghydro.pghft_drainage_area; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -SELECT INTO min_var min(dra_nu_pfafstetterbasincodelevel) FROM pghydro.pghft_drainage_area; - -i := max_var; -j := min_var; - -RAISE NOTICE 'MAX LEVEL : %', i; -RAISE NOTICE 'MIN LEVEL : %', j; - -WHILE (i >= j) LOOP - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF LOOP : %', time_; -RAISE NOTICE 'LEVEL : %', i; - -BEGIN -EXECUTE ' -ALTER TABLE pghydro.pghft_drainage_area -DROP COLUMN dra_cd_pfafstetterbasin_level_'||i||';'; -EXCEPTION WHEN undefined_column THEN - --DO NOTHING -END; - -BEGIN -EXECUTE ' -ALTER TABLE pghydro.pghft_drainage_area -ADD COLUMN dra_cd_pfafstetterbasin_level_'||i||' character varying;'; -EXCEPTION WHEN duplicate_column THEN - --DO NOTHING -END; - -EXECUTE ' -UPDATE pghydro.pghft_drainage_area -SET dra_cd_pfafstetterbasin_level_'||i||' = substring(dra_cd_pfafstetterbasin FROM 1 FOR '||i||');'; - -i := i - 1; - -END LOOP; - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - - - -END; -$$ -LANGUAGE PLPGSQL; - - ------------------------------------------------------------ ---FUNCTION pghydro.pghfn_UpdateWatercourse_Starting_Point() ------------------------------------------------------------ - -CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdateWatercourse_Starting_Point() -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -TRUNCATE pghydro.pghft_watercourse_starting_point CASCADE; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -PERFORM setval(('pghydro.wsp_pk_seq'::text)::regclass, 1, false); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -DROP INDEX IF EXISTS pghydro.drp_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -DROP INDEX IF EXISTS pghydro.drp_nu_valence_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_wtc_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - -DROP INDEX IF EXISTS pghydro.wtc_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; - -DROP INDEX IF EXISTS pghydro.wtc_cd_pfafstetterwatercourse_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; - -CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; - -CREATE INDEX drp_pk_idx ON pghydro.pghft_drainage_point(drp_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 11 : %', time_; - -CREATE INDEX drp_nu_valence_idx ON pghydro.pghft_drainage_point(drp_nu_valence); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 12 : %', time_; - -CREATE INDEX drn_wtc_pk_idx ON pghydro.pghft_drainage_line(drn_wtc_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 13 : %', time_; - -CREATE INDEX wtc_pk_idx ON pghydro.pghft_watercourse(wtc_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 14 : %', time_; - -CREATE INDEX wtc_cd_pfafstetterwatercourse_idx ON pghydro.pghft_watercourse(wtc_cd_pfafstetterwatercourse); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 15 : %', time_; - -INSERT INTO pghydro.pghft_watercourse_starting_point(wsp_drp_pk, wsp_rcl_pk_drp, wsp_wtc_pk, wsp_rcl_pk_wtc, wsp_gm) -SELECT drp.drp_pk, 9 as wsp_rcl_pk_drp, drn.drn_wtc_pk, 15 as wsp_rcl_pk_wtc, drp.drp_gm -FROM pghydro.pghft_drainage_point drp, pghydro.pghft_drainage_line drn, pghydro.pghft_watercourse wtc -WHERE drn.drn_drp_pk_sourcenode = drp.drp_pk -AND drp.drp_nu_valence = 1 -AND drn.drn_wtc_pk = wtc.wtc_pk -AND wtc.wtc_cd_pfafstetterwatercourse <> ''; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 16 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 17 : %', time_; - -DROP INDEX IF EXISTS pghydro.drp_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 18 : %', time_; - -DROP INDEX IF EXISTS pghydro.drp_nu_valence_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 19 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_wtc_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 20 : %', time_; - -DROP INDEX IF EXISTS pghydro.wtc_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 21 : %', time_; - -DROP INDEX IF EXISTS pghydro.wtc_cd_pfafstetterwatercourse_idx; - -RETURN 'OK'; - - - -END; -$$ -LANGUAGE PLPGSQL; - - ---------------------------------------------------------- ---FUNCTION pghydro.pghfn_UpdateWatercourse_Ending_Point() ---------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdateWatercourse_Ending_Point() -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -TRUNCATE pghydro.pghft_watercourse_ending_point CASCADE; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -PERFORM setval(('pghydro.wep_pk_seq'::text)::regclass, 1, false); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -DROP INDEX IF EXISTS pghydro.drp_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_wtc_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -DROP INDEX IF EXISTS pghydro.wtc_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - -CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; - -CREATE INDEX drp_pk_idx ON pghydro.pghft_drainage_point(drp_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; - -CREATE INDEX drn_wtc_pk_idx ON pghydro.pghft_drainage_line(drn_wtc_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; - -CREATE INDEX wtc_pk_idx ON pghydro.pghft_watercourse(wtc_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 11 : %', time_; - -INSERT INTO pghydro.pghft_watercourse_ending_point(wep_drp_pk, wep_rcl_pk_drp, wep_wtc_pk, wep_rcl_pk_wtc, wep_gm) -SELECT drp.drp_pk, 9 as con_rcl_pk_drp, drn.drn_wtc_pk, 15 as con_rcl_pk_wtc, drp.drp_gm -FROM pghydro.pghft_drainage_point drp, pghydro.pghft_drainage_line drn, pghydro.pghft_watercourse wtc -WHERE drn.drn_drp_pk_targetnode = drp.drp_pk -AND drn.drn_wtc_pk = wtc.wtc_pk -AND drn.drn_nu_distancetowatercourse = 0 -AND drn.drn_nu_distancetosea > 0; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 12 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 13 : %', time_; - -DROP INDEX IF EXISTS pghydro.drp_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 14 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_wtc_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 15 : %', time_; - -DROP INDEX IF EXISTS pghydro.wtc_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - - ----------------------------------------------------- ---FUNCTION pghydro.pghfn_UpdateStream_Mouth() ----------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdateStream_Mouth() -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -TRUNCATE pghydro.pghft_stream_mouth CASCADE; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -PERFORM setval(('pghydro.stm_pk_seq'::text)::regclass, 1, false); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -DROP INDEX IF EXISTS pghydro.drp_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_wtc_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -DROP INDEX IF EXISTS pghydro.wtc_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - -CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; - -CREATE INDEX drp_pk_idx ON pghydro.pghft_drainage_point(drp_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; - -CREATE INDEX drn_wtc_pk_idx ON pghydro.pghft_drainage_line(drn_wtc_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; - -CREATE INDEX wtc_pk_idx ON pghydro.pghft_watercourse(wtc_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 11 : %', time_; - -INSERT INTO pghydro.pghft_stream_mouth(stm_drp_pk, stm_rcl_pk_drp, stm_wtc_pk, stm_rcl_pk_wtc, stm_gm) -SELECT drp.drp_pk, 9 as con_rcl_pk_drp, drn.drn_wtc_pk, 15 as con_rcl_pk_wtc, drp.drp_gm -FROM pghydro.pghft_drainage_point drp, pghydro.pghft_drainage_line drn, pghydro.pghft_watercourse wtc -WHERE drn.drn_drp_pk_targetnode = drp.drp_pk -AND drn.drn_wtc_pk = wtc.wtc_pk -AND drn.drn_nu_distancetowatercourse = 0 -AND drn.drn_nu_distancetosea = 0; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 12 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 13 : %', time_; - -DROP INDEX IF EXISTS pghydro.drp_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 14 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_wtc_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 15 : %', time_; - -DROP INDEX IF EXISTS pghydro.wtc_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - - ----------------------------------------------------- ---FUNCTION pghydro.pghfn_UpdateShoreline() ----------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdateShoreline() -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -DELETE FROM pghydro.pghft_shoreline; - -INSERT INTO pghydro.pghft_shoreline(sho_pk, sho_nm, sho_gm_length, sho_gm) -SELECT 1 as sho_pk, 'Linha de Costa'::text as sho_nm, SUM(drn_gm_length) as sho_gm_length, ST_UNION(drn_gm) as sho_gm -FROM pghydro.pghft_drainage_line -WHERE drn_nu_distancetosea is null; - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF ALL PROCESS IN : %', time_; - -END; - -$$ -LANGUAGE PLPGSQL; - - ----------------------------------------------------- ---FUNCTION pghydro.pghfn_UpdateDomainColumn() ----------------------------------------------------- - - -CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdateDomainColumn() -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_wtc_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -CREATE INDEX drn_wtc_pk_idx ON pghydro.pghft_drainage_line(drn_wtc_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_tdm_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -CREATE INDEX drn_tdm_pk_idx ON pghydro.pghft_drainage_line(drn_tdm_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -UPDATE pghydro.pghft_drainage_line a -SET drn_tdm_pk = 1 -FROM -( -SELECT drn_wtc_pk -FROM pghydro.pghft_drainage_line -WHERE drn_tdm_pk = 1 -) as b -WHERE b.drn_wtc_pk = a.drn_wtc_pk; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -UPDATE pghydro.pghft_watercourse a -SET wtc_tdm_pk = null; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - -DROP INDEX IF EXISTS pghydro.wtc_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; - -CREATE INDEX wtc_pk_idx ON pghydro.pghft_watercourse(wtc_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; - -UPDATE pghydro.pghft_watercourse a -SET wtc_tdm_pk = 1 -FROM -( -SELECT drn_wtc_pk -FROM pghydro.pghft_drainage_line -WHERE drn_tdm_pk = 1 -) as b -WHERE b.drn_wtc_pk = a.wtc_pk; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; - -UPDATE pghydro.pghft_drainage_line -SET drn_tdm_pk = 0 -WHERE drn_tdm_pk is null; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 11 : %', time_; - -UPDATE pghydro.pghft_watercourse -SET wtc_tdm_pk = 0 -WHERE wtc_tdm_pk is null; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 12 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 13 : %', time_; - -CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 14 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 15 : %', time_; - -CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 16 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 17 : %', time_; - -CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 18 : %', time_; - -UPDATE pghydro.pghft_drainage_line drn -SET drn_tdm_pk = 3 -FROM -( -SELECT ssp_drn_pk as drn_pk -FROM pghydro.pghft_shoreline_starting_point -UNION -SELECT pghydro.pghfn_downstream_drainagelines(drn_pk) as drn_pk -FROM -( -SELECT ssp_drn_pk as drn_pk -FROM pghydro.pghft_shoreline_starting_point -) as a -) as a -WHERE a.drn_pk = drn.drn_pk; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 19 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 20 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 21 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 22 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_wtc_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 23 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_tdm_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 24 : %', time_; - -DROP INDEX IF EXISTS pghydro.wtc_pk_idx; - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - - - -END; -$$ -LANGUAGE PLPGSQL; - - ------------------------------------------------------------------- ---FUNCTION pghydro.pghfn_downstream_drainageline_strahler(integer) ------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_downstream_drainageline_strahler(integer) -RETURNS SETOF integer AS -$$ - -BEGIN - -RETURN QUERY - -SELECT drn_1 as drn_pk -FROM -( -SELECT pghydro.pghfn_downstreamdrainageline(hin_drn_pk) as drn_1, hin_drn_pk as drn_2, pghydro.pghfn_upstreamdrainageline(hin_drn_pk) as drn_3 -FROM pghydro.pghft_hydro_intel -WHERE hin_strahler = $1 -ORDER BY drn_1 -) as a -GROUP BY drn_1 -HAVING count(drn_1) > 1; - -RETURN; - -END; -$$ -LANGUAGE PLPGSQL; - - ------------------------------------------------------------------- ---FUNCTION pghydro.pghfn_calculatestrahlernumber() ------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_calculatestrahlernumber() -RETURNS varchar AS -$$ - -DECLARE - -time_ timestamp; -i INTEGER; -j INTEGER; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1: %', time_; - -UPDATE pghydro.pghft_hydro_intel hin -SET hin_strahler = null; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2: %', time_; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); - -DROP INDEX IF EXISTS pghydro.drp_nu_valence_idx; - -CREATE INDEX drp_nu_valence_idx ON pghydro.pghft_drainage_point(drp_nu_valence); - -DROP INDEX IF EXISTS pghydro.drp_pk_idx; - -CREATE INDEX drp_pk_idx ON pghydro.pghft_drainage_point(drp_pk); - -DROP INDEX IF EXISTS pghydro.hin_drn_pk_idx; - -CREATE INDEX hin_drn_pk_idx ON pghydro.pghft_hydro_intel(hin_drn_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3: %', time_; - -UPDATE pghydro.pghft_hydro_intel hin -SET hin_strahler = 1 -FROM -( -SELECT drn_pk -FROM -( -SELECT drn.drn_pk -FROM pghydro.pghft_drainage_line drn, pghydro.pghft_drainage_point drp -WHERE drp.drp_nu_valence = 1 -AND drp.drp_pk = drn.drn_drp_pk_sourcenode -) as a -WHERE drn_pk NOT IN -( -SELECT ssp_drn_pk as drn_pk -FROM pghydro.pghft_shoreline_starting_point -) -) as a -WHERE hin.hin_drn_pk = a.drn_pk; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4: %', time_; - -i = 1; - -LOOP - -DROP INDEX IF EXISTS pghydro.hin_strahler_idx; - -CREATE INDEX hin_strahler_idx ON pghydro.pghft_hydro_intel(hin_strahler); - -SELECT INTO j count(drn_pk) -FROM -( -SELECT pghydro.pghfn_downstream_drainageline_strahler(i) as drn_pk -) as a; - -RAISE NOTICE 'STRAHLER NUMBER/OCORRENCES %/% IN %', i, j, time_; - -EXIT WHEN j < 1; - -UPDATE pghydro.pghft_hydro_intel hin -SET hin_strahler = i+1 -FROM -( -SELECT pghydro.pghfn_downstream_drainageline_strahler(i) as drn_pk -UNION -SELECT DISTINCT pghydro.pghfn_downstreamdrainagelines(drn_pk) as drn_pk -FROM -( -SELECT pghydro.pghfn_downstream_drainageline_strahler(i) as drn_pk -) as a -) as a -WHERE hin.hin_drn_pk = a.drn_pk; - -i = i+1; - -END LOOP; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5: %', time_; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -DROP INDEX IF EXISTS pghydro.drp_nu_valence_idx; - -DROP INDEX IF EXISTS pghydro.drp_pk_idx; - -DROP INDEX IF EXISTS pghydro.hin_drn_pk_idx; - -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -RETURN 'OK'; - -END; -$$ -LANGUAGE PLPGSQL; - ---------------------------------------------------------------------------------------------------------------------------- ---FUNCTION pghydro.pghfn_VariableToSea(id integer, variable_table varchar, variable_fk varchar, variable_attribute varchar) ---------------------------------------------------------------------------------------------------------------------------- - ---DROP FUNCTION pghydro.pghfn_VariableToSea(id integer, variable_table varchar, variable_fk varchar, variable_attribute varchar) - -CREATE OR REPLACE FUNCTION pghydro.pghfn_VariableToSea(id integer, variable_table varchar, variable_fk varchar, variable_attribute varchar) -RETURNS numeric -AS $$ - -DECLARE -variable numeric; - -BEGIN - -EXECUTE ' -SELECT COALESCE(sum(c.'||variable_attribute||'),0) -FROM -( - -SELECT a.drn_pk, vat.'||variable_attribute||'::numeric -FROM -( -SELECT pghydro.pghfn_downstreamDrainageLines('||id||') as drn_pk -) as a, '||variable_table||' vat -WHERE a.drn_pk = vat.'||variable_fk||' - -) as c; -' INTO variable; - -RETURN variable; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pghydro.pghfn_VariableToSea(251994, 'pghydro.pghft_sparrow', 'spr_drn_pk', 'spr_nu_tp_eq14'); - --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---FUNCTION pghydro.pghfn_CalculateVariableToSea(offset_value numeric, variable_table varchar, variable_fk varchar, variable_attribute varchar, final_variable_attribute varchar) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_CalculateVariableToSea(offset_value numeric, variable_table varchar, variable_fk varchar, variable_attribute varchar, final_variable_attribute varchar) -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; -var1 integer; -i integer; -j integer; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -j := max(drn_pk) FROM pghydro.pghft_drainage_line; - -FOR i IN 1..j LOOP - -EXECUTE ' - -UPDATE '||variable_table||' vat -SET '||final_variable_attribute||' = pghydro.pghfn_VariableToSea('||i||', '''||variable_table||''', '''||variable_fk||''', '''||variable_attribute||''') + '||offset_value||' -FROM pghydro.pghft_drainage_line drn -WHERE drn.drn_pk = '||i||' -AND vat.'||variable_fk||' = '||i||'; - -'; - -RAISE NOTICE '%/%', i, j; - -END LOOP; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -SELECT INTO var1 ssp_drn_pk FROM pghydro.pghft_shoreline_starting_point; - -IF var1 >=0 THEN - -EXECUTE ' - -UPDATE '||variable_table||' vat -SET '||final_variable_attribute||' = null -FROM -( -SELECT pghydro.pghfn_downstream_drainagelines('||var1||') as drn_pk -UNION -SELECT '||var1||' as drn_pk -) as a -WHERE vat.'||variable_fk||' = a.drn_pk; - -'; - -END IF; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pghydro.pghfn_CalculateVariableToSea('pghydro.pghft_sparrow', 'spr_drn_pk', 'spr_nu_tp_eq14'); - -------------------------------------------------------------------------------------------------------------------------------- ---FUNCTION pghydro.pghfn_VariableUpstream(id integer, variable_table varchar, variable_fk varchar, variable_attribute varchar) -------------------------------------------------------------------------------------------------------------------------------- - ---DROP FUNCTION pghydro.pghfn_VariableUpstream(id integer, variable_table varchar, variable_fk varchar, variable_attribute varchar) - -CREATE OR REPLACE FUNCTION pghydro.pghfn_VariableUpstream(id integer, variable_table varchar, variable_fk varchar, variable_attribute varchar) -RETURNS numeric -AS $$ - -DECLARE -variable numeric; - -BEGIN - -EXECUTE ' -SELECT COALESCE(sum(c.'||variable_attribute||'),0) -FROM -( -SELECT a.drn_pk, vat.'||variable_attribute||'::numeric -FROM -( -SELECT pghydro.pghfn_upstreamDrainageLines('||id||') as drn_pk -) as a, '||variable_table||' vat -WHERE a.drn_pk = vat.'||variable_fk||' -) as c; -' INTO variable; - -RETURN variable; - -END; -$$ -LANGUAGE PLPGSQL; - ---SELECT pghydro.pghfn_VariableUpstream(5, 'pghydro.pghft_drainage_line', 'drn_pk', 'drn_gm_length'); - ------------------------------------------------------------------------------------------------------------------------------------- ---FUNCTION pghydro.pghfn_CalculateVariableUpstream(variable_table varchar, variable_fk varchar, variable_attribute varchar) ------------------------------------------------------------------------------------------------------------------------------------- - -CREATE OR REPLACE FUNCTION pghydro.pghfn_CalculateVariableUpstream(offset_value numeric, variable_table varchar, variable_fk varchar, variable_attribute varchar, final_variable_attribute varchar) -RETURNS character varying AS -$$ -DECLARE -time_ timestamp; -var1 integer; -i integer; -j integer; - -BEGIN - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; - -CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; - -CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; - -CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; - -j := max(drn_pk) FROM pghydro.pghft_drainage_line; - -FOR i IN 1..j LOOP - -EXECUTE ' - -UPDATE '||variable_table||' vat -SET '||final_variable_attribute||' = pghydro.pghfn_VariableUpstream('||i||', '''||variable_table||''', '''||variable_fk||''', '''||variable_attribute||''') + '||offset_value||' -FROM pghydro.pghft_drainage_line drn -WHERE drn.drn_pk = '||i||' -AND vat.'||variable_fk||' = '||i||'; - -'; - -RAISE NOTICE '%/%', i, j; - -END LOOP; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; - -SELECT INTO var1 ssp_drn_pk FROM pghydro.pghft_shoreline_starting_point; - -IF var1 >=0 THEN - -EXECUTE ' - -UPDATE '||variable_table||' vat -SET '||final_variable_attribute||' = '||variable_attribute||' -FROM -( -SELECT pghydro.pghfn_downstream_drainagelines('||var1||') as drn_pk -UNION -SELECT '||var1||' as drn_pk -) as a -WHERE vat.'||variable_fk||' = a.drn_pk; - -'; - -END IF; - -time_ := timeofday(); -RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; - -DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; - -DROP INDEX IF EXISTS pghydro.drn_pk_idx; - -RETURN 'OK'; - -time_ := timeofday(); -RAISE NOTICE 'END OF PROCESS IN : %', time_; - -END; -$$ -LANGUAGE PLPGSQL; - +-- +-- Copyright (c) 2016 Alexandre de Amorim Teixeira, pghydro.project@gmail.com +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 2 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program; if not, write to the Free Software +-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +--REQUIREMENTS + +--Postgresql version 9.1+ +--PostGIS version 2.0+ + +--------------------------------------------------------------------------------- +--PgHydro Extension Version 6.2 of 17/01/2018 +--------------------------------------------------------------------------------- + +------------------------------------- +--CREATE SCHEMA, TABLES AND SEQUENCES +------------------------------------- + +DROP SCHEMA IF EXISTS pghydro CASCADE; + +CREATE SCHEMA pghydro; + +-- + +CREATE TABLE pghydro.pghft_shoreline ( + sho_pk integer, + sho_gm_length numeric, + sho_bo_flowdirection boolean, + sho_nm character varying, + sho_gm geometry(MultiLineString) +); + +CREATE SEQUENCE pghydro.sho_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE pghydro.sho_pk_seq OWNED BY pghydro.pghft_shoreline.sho_pk; + + +SELECT pg_catalog.setval('pghydro.sho_pk_seq', 1, false); + +-- + +CREATE TABLE pghydro.pghtb_type_domain ( + tdm_pk integer, + tdm_ds character varying +); + + +CREATE SEQUENCE pghydro.tdm_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE pghydro.tdm_pk_seq OWNED BY pghydro.pghtb_type_domain.tdm_pk; + + +SELECT pg_catalog.setval('pghydro.tdm_pk_seq', 1, false); + +CREATE TABLE pghydro.pghft_hydro_intel( + hin_pk integer, + hin_drn_pk integer, + hin_dra_pk integer, + hin_count_drn_pk integer, + hin_count_dra_pk integer, + hin_strahler integer, + hin_gm_point geometry(Point), + hin_gm_line geometry(MultiLineString), + hin_gm_polygon geometry(MultiPolygon) +); + +CREATE SEQUENCE pghydro.hin_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + +ALTER SEQUENCE pghydro.hin_pk_seq OWNED BY pghydro.pghft_hydro_intel.hin_pk; + +SELECT pg_catalog.setval('pghydro.hin_pk_seq', 1, false); + +-- + +CREATE TABLE pghydro.pghft_drainage_point ( + drp_pk integer, + drp_nu_valence smallint, + drp_gm geometry(Point) +); + + +CREATE SEQUENCE pghydro.drp_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE pghydro.drp_pk_seq OWNED BY pghydro.pghft_drainage_point.drp_pk; + + +SELECT pg_catalog.setval('pghydro.drp_pk_seq', 1, false); + +-- + +CREATE TABLE pghydro.pghft_drainage_line ( + drn_pk integer, + drn_drp_pk_sourcenode integer, + drn_rcl_pk_drp_sourcenode integer, + drn_drp_pk_targetnode integer, + drn_rcl_pk_drp_targetnode integer, + drn_drn_pk_upstreamdrainageline integer, + drn_drn_pk_downstreamdrainageline integer, + drn_nu_distancetosea numeric, + drn_nu_distancetowatercourse numeric, + drn_bo_flowdirection boolean, + drn_nm character varying, + drn_tnc_pk integer, + drn_gm_length numeric, + drn_dra_pk integer, + drn_rcl_pk_dra integer, + drn_nu_upstreamarea numeric, + drn_wtc_pk integer, + drn_rcl_pk_wtc integer, + drn_tdm_pk integer, + drn_gm_point geometry(Multipoint), + drn_gm geometry(MultiLineString) +); + + +CREATE SEQUENCE pghydro.drn_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE pghydro.drn_pk_seq OWNED BY pghydro.pghft_drainage_line.drn_pk; + + +SELECT pg_catalog.setval('pghydro.drn_pk_seq', 1, false); + +-- + +CREATE TABLE pghydro.pghft_drainage_area ( + dra_pk integer, + dra_cd_pfafstetterbasin character varying, + dra_nu_pfafstetterbasincodelevel smallint, + dra_gm_area numeric, + dra_gm geometry(MultiPolygon) +); + + +CREATE SEQUENCE pghydro.dra_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE pghydro.dra_pk_seq OWNED BY pghydro.pghft_drainage_area.dra_pk; + + +SELECT pg_catalog.setval('pghydro.dra_pk_seq', 1, false); + +-- + +CREATE TABLE pghydro.pghft_shoreline_ending_point ( + sep_pk integer, + sep_drp_pk integer, + sep_rcl_pk_drp integer, + sep_drn_pk integer, + sep_rcl_pk_drn integer, + sep_sho_pk integer, + sep_rcl_pk_sho integer, + sep_gm geometry(Point) +); + + +CREATE SEQUENCE pghydro.sep_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE pghydro.sep_pk_seq OWNED BY pghydro.pghft_shoreline_ending_point.sep_pk; + + +SELECT pg_catalog.setval('pghydro.sep_pk_seq', 1, false); + +-- + +CREATE TABLE pghydro.pghft_shoreline_starting_point ( + ssp_pk integer, + ssp_drp_pk integer, + ssp_rcl_pk_drp integer, + ssp_drn_pk integer, + ssp_rcl_pk_drn integer, + ssp_sho_pk integer, + ssp_rcl_pk_sho integer, + ssp_gm geometry(Point) +); + + +CREATE SEQUENCE pghydro.ssp_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE pghydro.ssp_pk_seq OWNED BY pghydro.pghft_shoreline_starting_point.ssp_pk; + + +SELECT pg_catalog.setval('pghydro.ssp_pk_seq', 1, false); + +-- + +CREATE TABLE pghydro.pghft_stream_mouth ( + stm_pk integer, + stm_drp_pk integer, + stm_rcl_pk_drp integer, + stm_wtc_pk integer, + stm_rcl_pk_wtc integer, + stm_gm geometry(Point) +); + + +CREATE SEQUENCE pghydro.stm_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE pghydro.stm_pk_seq OWNED BY pghydro.pghft_stream_mouth.stm_pk; + + +SELECT pg_catalog.setval('pghydro.stm_pk_seq', 1, false); + +-- + +CREATE TABLE pghydro.pghft_watercourse ( + wtc_pk integer, + wtc_nu_distancetosea numeric, + wtc_cd_pfafstetterwatercourse_downstream character varying, + wtc_cd_pfafstetterwatercourse character varying, + wtc_nu_pfafstetterwatercoursecodelevel smallint, + wtc_nu_pfafstetterwatercoursecodeorder smallint, + wtc_gm_area numeric, + wtc_gm_length numeric, + wtc_tdm_pk integer, + wtc_gm geometry(MultiLineString) +); + +CREATE SEQUENCE pghydro.wtc_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE pghydro.wtc_pk_seq OWNED BY pghydro.pghft_watercourse.wtc_pk; + + +SELECT pg_catalog.setval('pghydro.wtc_pk_seq', 1, false); + +-- + +CREATE TABLE pghydro.pghft_watercourse_starting_point ( + wsp_pk integer, + wsp_drp_pk integer, + wsp_rcl_pk_drp integer, + wsp_wtc_pk integer, + wsp_rcl_pk_wtc integer, + wsp_gm geometry(Point) +); + + +CREATE SEQUENCE pghydro.wsp_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE pghydro.wsp_pk_seq OWNED BY pghydro.pghft_watercourse_starting_point.wsp_pk; + + +SELECT pg_catalog.setval('pghydro.wsp_pk_seq', 1, false); + +-- + +CREATE TABLE pghydro.pghft_watercourse_ending_point ( + wep_pk integer, + wep_drp_pk integer, + wep_rcl_pk_drp integer, + wep_wtc_pk integer, + wep_rcl_pk_wtc integer, + wep_gm geometry(Point) +); + +CREATE SEQUENCE pghydro.wep_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE pghydro.wep_pk_seq OWNED BY pghydro.pghft_watercourse_ending_point.wep_pk; + + +SELECT pg_catalog.setval('pghydro.wep_pk_seq', 1, false); + +-- + +CREATE TABLE pghydro.pghft_watershed ( + wts_pk integer, + wts_cd_pfafstetterbasin character varying, + wts_cd_pfafstetterbasincodelevel smallint, + wts_gm_area numeric, + wts_gm geometry(MultiPolygon) +); + + +CREATE SEQUENCE pghydro.wts_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE pghydro.wts_pk_seq OWNED BY pghydro.pghft_watershed.wts_pk; + + +SELECT pg_catalog.setval('pghydro.wts_pk_seq', 1, false); + +-- + +CREATE TABLE pghydro.pghtb_type_de9im ( + dim_pk integer, + dim_ds character varying(9) +); + + +CREATE SEQUENCE pghydro.dim_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE pghydro.dim_pk_seq OWNED BY pghydro.pghtb_type_de9im.dim_pk; + + +SELECT pg_catalog.setval('pghydro.dim_pk_seq', 1, false); + +-- + +CREATE TABLE pghydro.pghtb_type_geometry ( + tgm_pk integer, + tgm_ds character varying +); + + +CREATE SEQUENCE pghydro.tgm_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE pghydro.tgm_pk_seq OWNED BY pghydro.pghtb_type_geometry.tgm_pk; + + +SELECT pg_catalog.setval('pghydro.tgm_pk_seq', 8, true); + +-- + +CREATE TABLE pghydro.pghtb_type_relationship_class ( + rcl_pk integer, + rcl_tgm_pk_class_a integer, + rcl_tgm_ds_class_a character varying, + rcl_tgm_pk_class_b integer, + rcl_tgm_ds_class_b character varying, + rcl_tpr_pk integer, + rcl_tpr_ds character varying, + rcl_dim_pk integer, + rcl_dim_ds character varying +); + + +CREATE SEQUENCE pghydro.rcl_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE pghydro.rcl_pk_seq OWNED BY pghydro.pghtb_type_relationship_class.rcl_pk; + + + +SELECT pg_catalog.setval('pghydro.rcl_pk_seq', 14, true); + +-- + +CREATE TABLE pghydro.pghtb_type_topology_relationship ( + tpr_pk integer, + tpr_ds character varying +); + + +CREATE SEQUENCE pghydro.tpr_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE pghydro.tpr_pk_seq OWNED BY pghydro.pghtb_type_topology_relationship.tpr_pk; + + +SELECT pg_catalog.setval('pghydro.tpr_pk_seq', 5, true); + +-- + +CREATE TABLE pghydro.pghtb_primary_key_columns ( + f_table_catalog character varying(256), + f_table_schema character varying(256), + f_table_name character varying(256), + f_primary_key_column character varying(256) +); + +-- + +CREATE TABLE pghydro.pghtb_foreign_key_columns ( + f_table_catalog character varying(256), + f_table_schema character varying(256), + f_table_name character varying(256), + f_foreign_key_column character varying(256), + f_table_catalog_reference character varying(256), + f_table_schema_reference character varying(256), + f_table_name_reference character varying(256), + f_primary_key_column_reference character varying(256) +); + +-- + +CREATE TABLE pghydro.pghtb_index_columns ( + f_table_catalog character varying(256), + f_table_schema character varying(256), + f_table_name character varying(256), + f_index_column character varying(256), + f_index_column_method character varying(256) +); + + +CREATE TABLE pghydro.pghtb_type_name_complete ( + tnc_pk integer, + tnc_ds character varying, + tnc_tng_pk integer, + tnc_tcn_pk integer, + tnc_tns_pk integer +); + + +CREATE SEQUENCE pghydro.tnc_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE pghydro.tnc_pk_seq OWNED BY pghydro.pghtb_type_name_complete.tnc_pk; + + +SELECT pg_catalog.setval('pghydro.tnc_pk_seq', 1, false); + +-- + +CREATE TABLE pghydro.pghtb_type_name_connection ( + tcn_pk integer, + tcn_ds character varying +); + + +CREATE SEQUENCE pghydro.tcn_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE pghydro.tcn_pk_seq OWNED BY pghydro.pghtb_type_name_connection.tcn_pk; + + +SELECT pg_catalog.setval('pghydro.tcn_pk_seq', 1, false); + +-- + +CREATE TABLE pghydro.pghtb_type_name_generic ( + tng_pk integer, + tng_ds character varying +); + + +CREATE SEQUENCE pghydro.tng_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE pghydro.tng_pk_seq OWNED BY pghydro.pghtb_type_name_generic.tng_pk; + + +SELECT pg_catalog.setval('pghydro.tng_pk_seq', 1, false); + +-- + +CREATE TABLE pghydro.pghtb_type_name_specific ( + tns_pk integer, + tns_ds character varying +); + + +CREATE SEQUENCE pghydro.tns_pk_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE pghydro.tns_pk_seq OWNED BY pghydro.pghtb_type_name_specific.tns_pk; + + +SELECT pg_catalog.setval('pghydro.tns_pk_seq', 1, false); + +-- + +ALTER TABLE pghydro.pghft_shoreline ALTER COLUMN sho_pk SET DEFAULT nextval('pghydro.sho_pk_seq'::regclass); + +ALTER TABLE pghydro.pghtb_type_domain ALTER COLUMN tdm_pk SET DEFAULT nextval('pghydro.tdm_pk_seq'::regclass); + +ALTER TABLE pghydro.pghft_hydro_intel ALTER COLUMN hin_pk SET DEFAULT nextval('pghydro.hin_pk_seq'::regclass); + +ALTER TABLE pghydro.pghft_drainage_point ALTER COLUMN drp_pk SET DEFAULT nextval('pghydro.drp_pk_seq'::regclass); + +ALTER TABLE pghydro.pghft_drainage_line ALTER COLUMN drn_pk SET DEFAULT nextval('pghydro.drn_pk_seq'::regclass); + +ALTER TABLE pghydro.pghft_drainage_area ALTER COLUMN dra_pk SET DEFAULT nextval('pghydro.dra_pk_seq'::regclass); + +ALTER TABLE pghydro.pghft_shoreline_ending_point ALTER COLUMN sep_pk SET DEFAULT nextval('pghydro.sep_pk_seq'::regclass); + +ALTER TABLE pghydro.pghft_shoreline_starting_point ALTER COLUMN ssp_pk SET DEFAULT nextval('pghydro.ssp_pk_seq'::regclass); + +ALTER TABLE pghydro.pghft_stream_mouth ALTER COLUMN stm_pk SET DEFAULT nextval('pghydro.stm_pk_seq'::regclass); + +ALTER TABLE pghydro.pghft_watercourse ALTER COLUMN wtc_pk SET DEFAULT nextval('pghydro.wtc_pk_seq'::regclass); + +ALTER TABLE pghydro.pghft_watercourse_starting_point ALTER COLUMN wsp_pk SET DEFAULT nextval('pghydro.wsp_pk_seq'::regclass); + +ALTER TABLE pghydro.pghft_watercourse_ending_point ALTER COLUMN wep_pk SET DEFAULT nextval('pghydro.wep_pk_seq'::regclass); + +ALTER TABLE pghydro.pghft_watershed ALTER COLUMN wts_pk SET DEFAULT nextval('pghydro.wts_pk_seq'::regclass); + +ALTER TABLE pghydro.pghtb_type_de9im ALTER COLUMN dim_pk SET DEFAULT nextval('pghydro.dim_pk_seq'::regclass); + +ALTER TABLE pghydro.pghtb_type_geometry ALTER COLUMN tgm_pk SET DEFAULT nextval('pghydro.tgm_pk_seq'::regclass); + +ALTER TABLE pghydro.pghtb_type_relationship_class ALTER COLUMN rcl_pk SET DEFAULT nextval('pghydro.rcl_pk_seq'::regclass); + +ALTER TABLE pghydro.pghtb_type_topology_relationship ALTER COLUMN tpr_pk SET DEFAULT nextval('pghydro.tpr_pk_seq'::regclass); + +ALTER TABLE pghydro.pghtb_type_name_complete ALTER COLUMN tnc_pk SET DEFAULT nextval('pghydro.tnc_pk_seq'::regclass); + +ALTER TABLE pghydro.pghtb_type_name_generic ALTER COLUMN tng_pk SET DEFAULT nextval('pghydro.tng_pk_seq'::regclass); + +ALTER TABLE pghydro.pghtb_type_name_connection ALTER COLUMN tcn_pk SET DEFAULT nextval('pghydro.tcn_pk_seq'::regclass); + +ALTER TABLE pghydro.pghtb_type_name_specific ALTER COLUMN tns_pk SET DEFAULT nextval('pghydro.tns_pk_seq'::regclass); + +----------------------------- +--INSERT DATA +----------------------------- + +-- + +DELETE FROM pghydro.pghtb_type_geometry; + +INSERT INTO pghydro.pghtb_type_geometry VALUES (1, 'POINT'); +INSERT INTO pghydro.pghtb_type_geometry VALUES (2, 'LINESTRING'); +INSERT INTO pghydro.pghtb_type_geometry VALUES (3, 'POLYGON'); +INSERT INTO pghydro.pghtb_type_geometry VALUES (4, 'MULTIPOINT'); +INSERT INTO pghydro.pghtb_type_geometry VALUES (5, 'MULTILINESTRING'); +INSERT INTO pghydro.pghtb_type_geometry VALUES (6, 'MULTIPOLYGON'); +INSERT INTO pghydro.pghtb_type_geometry VALUES (7, 'GEOMETRY'); +INSERT INTO pghydro.pghtb_type_geometry VALUES (8, 'GEOMETRYCOLLECTION'); + +-- + +DELETE FROM pghydro.pghtb_type_relationship_class; + +INSERT INTO pghydro.pghtb_type_relationship_class VALUES (1, 1, 'POINT', 1, 'POINT', 5, 'DISJOINT', NULL, NULL); +INSERT INTO pghydro.pghtb_type_relationship_class VALUES (15, 1, 'POINT', 2, 'LINESTRING', 2, 'TOUCH', NULL, NULL); +INSERT INTO pghydro.pghtb_type_relationship_class VALUES (16, 1, 'POINT', 3, 'POLYGON', 2, 'TOUCH', NULL, NULL); +INSERT INTO pghydro.pghtb_type_relationship_class VALUES (21, 3, 'POLYGON', 3, 'POLYGON', 3, 'OVERLAP', NULL, NULL); +INSERT INTO pghydro.pghtb_type_relationship_class VALUES (20, 2, 'LINESTRING', 2, 'LINESTRING', 3, 'OVERLAP', NULL, NULL); +INSERT INTO pghydro.pghtb_type_relationship_class VALUES (19, 3, 'POLYGON', 3, 'POLYGON', 2, 'TOUCH', NULL, NULL); +INSERT INTO pghydro.pghtb_type_relationship_class VALUES (18, 2, 'LINESTRING', 2, 'LINESTRING', 2, 'TOUCH', NULL, NULL); +INSERT INTO pghydro.pghtb_type_relationship_class VALUES (17, 2, 'LINESTRING', 3, 'POLYGON', 2, 'TOUCH', NULL, NULL); +INSERT INTO pghydro.pghtb_type_relationship_class VALUES (2, 1, 'POINT', 2, 'LINESTRING', 5, 'DISJOINT', NULL, NULL); +INSERT INTO pghydro.pghtb_type_relationship_class VALUES (3, 1, 'POINT', 3, 'POLYGON', 5, 'DISJOINT', NULL, NULL); +INSERT INTO pghydro.pghtb_type_relationship_class VALUES (4, 2, 'LINESTRING', 3, 'POLYGON', 5, 'DISJOINT', NULL, NULL); +INSERT INTO pghydro.pghtb_type_relationship_class VALUES (5, 2, 'LINESTRING', 2, 'LINESTRING', 5, 'DISJOINT', NULL, NULL); +INSERT INTO pghydro.pghtb_type_relationship_class VALUES (6, 3, 'POLYGON', 3, 'POLYGON', 5, 'DISJOINT', NULL, NULL); +INSERT INTO pghydro.pghtb_type_relationship_class VALUES (7, 2, 'LINESTRING', 3, 'POLYGON', 4, 'CROSS', NULL, NULL); +INSERT INTO pghydro.pghtb_type_relationship_class VALUES (8, 2, 'LINESTRING', 2, 'LINESTRING', 4, 'CROSS', NULL, NULL); +INSERT INTO pghydro.pghtb_type_relationship_class VALUES (9, 1, 'POINT', 1, 'POINT', 1, 'IN', NULL, NULL); +INSERT INTO pghydro.pghtb_type_relationship_class VALUES (10, 1, 'POINT', 2, 'LINESTRING', 1, 'IN', NULL, NULL); +INSERT INTO pghydro.pghtb_type_relationship_class VALUES (11, 1, 'POINT', 3, 'POLYGON', 1, 'IN', NULL, NULL); +INSERT INTO pghydro.pghtb_type_relationship_class VALUES (12, 2, 'LINESTRING', 3, 'POLYGON', 1, 'IN', NULL, NULL); +INSERT INTO pghydro.pghtb_type_relationship_class VALUES (13, 2, 'LINESTRING', 2, 'LINESTRING', 1, 'IN', NULL, NULL); +INSERT INTO pghydro.pghtb_type_relationship_class VALUES (14, 3, 'POLYGON', 3, 'POLYGON', 1, 'IN', NULL, NULL); + +-- + +DELETE FROM pghydro.pghtb_type_topology_relationship; + +INSERT INTO pghydro.pghtb_type_topology_relationship VALUES (1, 'IN'); +INSERT INTO pghydro.pghtb_type_topology_relationship VALUES (2, 'TOUCH'); +INSERT INTO pghydro.pghtb_type_topology_relationship VALUES (3, 'OVERLAP'); +INSERT INTO pghydro.pghtb_type_topology_relationship VALUES (4, 'CROSS'); +INSERT INTO pghydro.pghtb_type_topology_relationship VALUES (5, 'DISJOINT'); + +-- + +DELETE FROM pghydro.pghtb_type_domain; + +INSERT INTO pghydro.pghtb_type_domain VALUES (0, 'Estadual'); +INSERT INTO pghydro.pghtb_type_domain VALUES (1, 'Federal'); +INSERT INTO pghydro.pghtb_type_domain VALUES (2, 'Internacional'); +INSERT INTO pghydro.pghtb_type_domain VALUES (3, 'Linha de Costa'); + +-- + +DELETE FROM pghydro.pghtb_primary_key_columns; + +INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline', 'sho_pk'); +INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_domain', 'tdm_pk'); +INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_hydro_intel', 'hin_pk'); +INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_point', 'drp_pk'); +INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_pk'); +INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_area', 'dra_pk'); +INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_ending_point', 'sep_pk'); +INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_starting_point', 'ssp_pk'); +INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_stream_mouth', 'stm_pk'); +INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse', 'wtc_pk'); +INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_starting_point', 'wsp_pk'); +INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_ending_point', 'wep_pk'); +INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghft_watershed', 'wts_pk'); +INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_de9im', 'dim_pk'); +INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_geometry', 'tgm_pk'); +INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); +INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_topology_relationship', 'tpr_pk'); +INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_name_complete', 'tnc_pk'); +INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_name_connection', 'tcn_pk'); +INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_name_generic', 'tng_pk'); +INSERT INTO pghydro.pghtb_primary_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_name_specific', 'tns_pk'); + +-- + +DELETE FROM pghydro.pghtb_foreign_key_columns; + +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_hydro_intel', 'hin_drn_pk', current_database(), 'pghydro', 'pghft_drainage_line', 'drn_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_hydro_intel', 'hin_dra_pk', current_database(), 'pghydro', 'pghft_drainage_area', 'dra_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_wtc_pk', current_database(), 'pghydro', 'pghft_watercourse', 'wtc_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_starting_point', 'ssp_drp_pk', current_database(), 'pghydro', 'pghft_drainage_point', 'drp_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_starting_point', 'ssp_sho_pk', current_database(), 'pghydro', 'pghft_shoreline', 'sho_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_ending_point', 'sep_drp_pk', current_database(), 'pghydro', 'pghft_drainage_point', 'drp_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_ending_point', 'sep_sho_pk', current_database(), 'pghydro', 'pghft_shoreline', 'sho_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_stream_mouth', 'stm_drp_pk', current_database(), 'pghydro', 'pghft_drainage_point', 'drp_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_ending_point', 'wep_drp_pk', current_database(), 'pghydro', 'pghft_drainage_point', 'drp_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_tgm_pk_class_a', current_database(), 'pghydro', 'pghtb_type_geometry', 'tgm_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_starting_point', 'wsp_rcl_pk_drp', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_starting_point', 'wsp_drp_pk', current_database(), 'pghydro', 'pghft_drainage_point', 'drp_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_starting_point', 'ssp_rcl_pk_drp', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_ending_point', 'sep_rcl_pk_drp', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_stream_mouth', 'stm_rcl_pk_drp', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_ending_point', 'wep_rcl_pk_drp', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_tgm_pk_class_b', current_database(), 'pghydro', 'pghtb_type_geometry', 'tgm_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_drp_pk_sourcenode', current_database(), 'pghydro', 'pghft_drainage_point', 'drp_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_starting_point', 'wsp_wtc_pk', current_database(), 'pghydro', 'pghft_watercourse', 'wtc_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_stream_mouth', 'stm_wtc_pk', current_database(), 'pghydro', 'pghft_watercourse', 'wtc_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_ending_point', 'wep_wtc_pk', current_database(), 'pghydro', 'pghft_watercourse', 'wtc_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_dim_pk', current_database(), 'pghydro', 'pghtb_type_de9im', 'dim_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_drp_pk_targetnode', current_database(), 'pghydro', 'pghft_drainage_point', 'drp_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_starting_point', 'wsp_rcl_pk_wtc', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_stream_mouth', 'stm_rcl_pk_wtc', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_ending_point', 'wep_rcl_pk_wtc', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_tpr_pk', current_database(), 'pghydro', 'pghtb_type_topology_relationship', 'tpr_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_rcl_pk_drp_targetnode', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_rcl_pk_drp_sourcenode', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_dra_pk', current_database(), 'pghydro', 'pghft_drainage_area', 'dra_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_rcl_pk_dra', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_rcl_pk_wtc', current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_tdm_pk', current_database(), 'pghydro', 'pghtb_type_domain', 'tdm_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse', 'wtc_tdm_pk', current_database(), 'pghydro', 'pghtb_type_domain', 'tdm_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_name_complete', 'tnc_tns_pk', current_database(), 'pghydro', 'pghtb_type_name_specific', 'tns_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_name_complete', 'tnc_tng_pk', current_database(), 'pghydro', 'pghtb_type_name_generic', 'tng_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghtb_type_name_complete', 'tnc_tcn_pk', current_database(), 'pghydro', 'pghtb_type_name_connection', 'tcn_pk'); +INSERT INTO pghydro.pghtb_foreign_key_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_tnc_pk', current_database(), 'pghydro', 'pghtb_type_name_complete', 'tnc_pk'); + +-- + +DELETE FROM pghydro.pghtb_index_columns; + +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_hydro_intel', 'hin_drn_pk', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_hydro_intel', 'hin_dra_pk', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_wtc_pk', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_starting_point', 'ssp_drp_pk', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_starting_point', 'ssp_sho_pk', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_ending_point', 'sep_drp_pk', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_ending_point', 'sep_sho_pk', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_stream_mouth', 'stm_drp_pk', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_ending_point', 'wep_drp_pk', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_tgm_pk_class_a', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_starting_point', 'wsp_rcl_pk_drp', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_starting_point', 'wsp_drp_pk', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_starting_point', 'ssp_rcl_pk_drp', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_shoreline_ending_point', 'sep_rcl_pk_drp', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_stream_mouth', 'stm_rcl_pk_drp', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_ending_point', 'wep_rcl_pk_drp', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_tgm_pk_class_b', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_drp_pk_sourcenode', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_starting_point', 'wsp_wtc_pk', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_stream_mouth', 'stm_wtc_pk', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_ending_point', 'wep_wtc_pk', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_dim_pk', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_drp_pk_targetnode', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_starting_point', 'wsp_rcl_pk_wtc', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_stream_mouth', 'stm_rcl_pk_wtc', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse_ending_point', 'wep_rcl_pk_wtc', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghtb_type_relationship_class', 'rcl_tpr_pk', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_rcl_pk_drp_targetnode', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_rcl_pk_drp_sourcenode', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_dra_pk', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_rcl_pk_dra', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_rcl_pk_wtc', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_tdm_pk', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_watercourse', 'wtc_tdm_pk', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_point', 'drp_nu_valence', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_hydro_intel', 'hin_strahler', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_area', 'dra_cd_pfafstetterbasin', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_area', 'dra_nu_pfafstetterbasincodelevel', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghtb_type_name_complete', 'tnc_tng_pk', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghtb_type_name_complete', 'tnc_tcn_pk', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghtb_type_name_complete', 'tnc_tns_pk', 'btree'); +INSERT INTO pghydro.pghtb_index_columns VALUES (current_database(), 'pghydro', 'pghft_drainage_line', 'drn_tnc_pk', 'btree'); + +--------------------------------------------------------------------------------------------------- +--PGHYDRO FUNCTIONS +--------------------------------------------------------------------------------------------------- +---------------------------------------------------- +--FUNCTION pghydro.pghfn_DropPrimaryKeys() +---------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_DropPrimaryKeys() +RETURNS varchar AS +$$ +DECLARE + +r record; +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + + + FOR r IN SELECT f_table_catalog, f_table_schema, f_table_name, f_primary_key_column FROM pghydro.pghtb_primary_key_columns + + LOOP + + EXECUTE ' + ALTER TABLE ONLY '||r.f_table_schema||'.'||r.f_table_name||' DROP CONSTRAINT IF EXISTS '||r.f_primary_key_column||'_pkey; + '; + + END LOOP; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +----------------------------------------- +--FUNCTION pghydro.pghfn_AddPrimaryKeys() +----------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_AddPrimaryKeys() +RETURNS varchar AS +$$ +DECLARE + +r record; +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +PERFORM pghydro.pghfn_DropPrimaryKeys(); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + + + FOR r IN SELECT f_table_catalog, f_table_schema, f_table_name, f_primary_key_column FROM pghydro.pghtb_primary_key_columns + + LOOP + + EXECUTE ' + ALTER TABLE ONLY '||r.f_table_schema||'.'||r.f_table_name||' ADD CONSTRAINT '||r.f_primary_key_column||'_pkey PRIMARY KEY ('||r.f_primary_key_column||'); + '; + + END LOOP; + + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +---------------------------------------------------- +--FUNCTION pghydro.pghfn_DropForeignKeys() +---------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_DropForeignKeys() +RETURNS varchar AS +$$ +DECLARE + +r record; +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + + + FOR r IN SELECT f_table_catalog, f_table_schema, f_table_name, f_foreign_key_column FROM pghydro.pghtb_foreign_key_columns + + LOOP + + EXECUTE ' + ALTER TABLE ONLY '||r.f_table_schema||'.'||r.f_table_name||' DROP CONSTRAINT IF EXISTS '||r.f_foreign_key_column||'_fkey; + '; + + END LOOP; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +----------------------------------------- +--FUNCTION pghydro.pghfn_AddForeignKeys() +----------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_AddForeignKeys() +RETURNS varchar AS +$$ +DECLARE + +r record; +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +PERFORM pghydro.pghfn_DropForeignKeys(); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + + + FOR r IN SELECT f_table_catalog, f_table_schema, f_table_name, f_foreign_key_column, f_table_catalog_reference, f_table_schema_reference, f_table_name_reference, f_primary_key_column_reference FROM pghydro.pghtb_foreign_key_columns + + LOOP + + EXECUTE ' + ALTER TABLE ONLY '||r.f_table_schema||'.'||r.f_table_name||' ADD CONSTRAINT '||r.f_foreign_key_column||'_fkey FOREIGN KEY ('||r.f_foreign_key_column||') REFERENCES '||r.f_table_schema_reference||'.'||r.f_table_name_reference||'('||r.f_primary_key_column_reference||'); + '; + + + END LOOP; + + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +---------------------------------------------------- +--FUNCTION pghydro.pghfn_DropGeometryIndex() +---------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_DropGeometryIndex() +RETURNS varchar AS +$$ +DECLARE + +r record; +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + + + FOR r IN SELECT f_table_schema, f_geometry_column FROM public.geometry_columns + + LOOP + + EXECUTE ' + DROP INDEX IF EXISTS '||r.f_table_schema||'.'||r.f_geometry_column||'_idx; + '; + + END LOOP; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +---------------------------------------------------- +--FUNCTION pghydro.pghfn_CreateGeometryIndex() +---------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_CreateGeometryIndex() +RETURNS varchar AS +$$ +DECLARE + +r record; +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +PERFORM pghydro.pghfn_DropGeometryIndex(); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + + + FOR r IN SELECT f_table_schema, f_table_name, f_geometry_column FROM public.geometry_columns + + LOOP + + EXECUTE ' + CREATE INDEX '||r.f_geometry_column||'_idx ON '||r.f_table_schema||'.'||r.f_table_name||' USING GIST('||r.f_geometry_column||'); + '; + + END LOOP; + + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +---------------------------------------------------- +--FUNCTION pghydro.pghfn_DropIndex() +---------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_DropIndex() +RETURNS varchar AS +$$ +DECLARE + +r record; +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + + + FOR r IN SELECT f_table_schema, f_index_column FROM pghydro.pghtb_index_columns + + LOOP + + EXECUTE ' + DROP INDEX IF EXISTS '||r.f_table_schema||'.'||r.f_index_column||'_idx; + '; + + END LOOP; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +---------------------------------------------------- +--FUNCTION pghydro.pghfn_CreateIndex() +---------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_CreateIndex() +RETURNS varchar AS +$$ +DECLARE + +r record; +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +PERFORM pghydro.pghfn_DropIndex(); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + + + FOR r IN SELECT f_table_schema, f_table_name, f_index_column, f_index_column_method FROM pghydro.pghtb_index_columns + + LOOP + + EXECUTE ' + CREATE INDEX '||r.f_index_column||'_idx ON '||r.f_table_schema||'.'||r.f_table_name||' USING '||r.f_index_column_method||' ('||r.f_index_column||'); + '; + + END LOOP; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +---------------------------------------------------- +--FUNCTION pghydro.pghfn_UpdateGeometrySRID() +---------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdateGeometrySRID() +RETURNS varchar AS +$$ +DECLARE + +r record; +time_ timestamp; +_srid integer; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +PERFORM pghydro.pghfn_DropIndex(); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +SELECT srid INTO _srid +FROM geometry_columns +WHERE f_table_name = 'pghft_drainage_line' +AND f_table_schema = 'pghydro'; + + FOR r IN SELECT f_table_schema, f_table_name, f_geometry_column FROM public.geometry_columns WHERE srid <> _srid + + LOOP + + EXECUTE ' + SELECT UpdateGeometrySRID('||quote_literal(r.f_table_schema)||','||quote_literal(r.f_table_name)||','||quote_literal(r.f_geometry_column)||','||_srid||'); + '; + + END LOOP; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +---------------------------------------------------- +--FUNCTION pghydro.pghfn_TurnOffKeysIndex() +---------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_TurnOffKeysIndex() +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +--DROP GEOMETRY INDEX + +PERFORM pghydro.pghfn_DropGeometryIndex(); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +--DROP INDEX + +PERFORM pghydro.pghfn_DropIndex(); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +--DROP FOREIGN KEYS + +PERFORM pghydro.pghfn_DropForeignKeys(); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +--DROP PRIMARY KEYS + +PERFORM pghydro.pghfn_DropPrimaryKeys(); + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +END; +$$ +LANGUAGE PLPGSQL; + + +---------------------------------------------------- +--FUNCTION pghydro.pghfn_TurnOnKeysIndex() +---------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_TurnOnKeysIndex() +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +PERFORM pghydro.pghfn_TurnOffKeysIndex(); + +UPDATE pghydro.pghft_drainage_line +SET drn_wtc_pk = null +WHERE drn_wtc_pk = 0; + +UPDATE pghydro.pghft_drainage_line +SET drn_rcl_pk_wtc = null +WHERE drn_rcl_pk_wtc = 0; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +--ADD PRIMARY KEYS + +PERFORM pghydro.pghfn_AddPrimaryKeys(); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +--ADD FOREIGN KEYS + +PERFORM pghydro.pghfn_AddForeignKeys(); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +--ADD GEOMETRY INDEX + +PERFORM pghydro.pghfn_CreateGeometryIndex(); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +--ADD INDEX + +PERFORM pghydro.pghfn_CreateIndex(); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +END; +$$ +LANGUAGE PLPGSQL; + + +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +--FUNCTION pghydro.pghfn_input_data_drainage_line(input_drainage_line_schema varchar, input_drainage_line_table varchar, input_drainage_line_table_geom_atribute varchar, input_drainage_line_table_name_atribute varchar) +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_input_data_drainage_line(input_drainage_line_schema varchar, input_drainage_line_table varchar, input_drainage_line_table_geom_atribute varchar, input_drainage_line_table_name_atribute varchar) +RETURNS varchar AS +$$ +DECLARE + +_srid integer; +time_ timestamp; +r record; + +BEGIN + +BEGIN + +--UPDATE CONSTRAINTS THAT SET 'srid' AT GEOMETRY COLUMN IN EACH GEOMETRY TABLE + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +PERFORM pghydro.pghfn_TurnOffKeysIndex(); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +SELECT srid INTO _srid +FROM geometry_columns +WHERE f_table_name = input_drainage_line_table +AND f_table_schema = input_drainage_line_schema; + + + FOR r IN SELECT f_table_schema, f_table_name, f_geometry_column FROM public.geometry_columns WHERE srid <> _srid + + LOOP + + EXECUTE ' + SELECT UpdateGeometrySRID('||quote_literal(r.f_table_schema)||','||quote_literal(r.f_table_name)||','||quote_literal(r.f_geometry_column)||','||_srid||'); + '; + + END LOOP; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +--DELETE DATA ON TABLES RELATED TO pghydro.pghft_drainage_line + +TRUNCATE pghydro.pghft_drainage_line; + +TRUNCATE pghydro.pghft_drainage_point; + +TRUNCATE pghydro.pghft_shoreline_starting_point; + +TRUNCATE pghydro.pghft_shoreline_ending_point; + +TRUNCATE pghydro.pghft_stream_mouth; + +TRUNCATE pghydro.pghft_watercourse; + +TRUNCATE pghydro.pghft_watercourse_starting_point; + +TRUNCATE pghydro.pghft_watercourse_ending_point; + +TRUNCATE pghydro.pghtb_type_name_complete; + +TRUNCATE pghydro.pghtb_type_name_generic; + +TRUNCATE pghydro.pghtb_type_name_connection; + +TRUNCATE pghydro.pghtb_type_name_specific; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +PERFORM pg_catalog.setval('pghydro.drn_pk_seq', 1, false); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +--INSERT THE NAME OF THE FIELD WITH THE RIVER NAME IN input_drainage_line + +IF input_drainage_line_table_name_atribute = 'none' THEN + +EXECUTE ' +INSERT INTO pghydro.pghft_drainage_line (drn_gm) +SELECT '||input_drainage_line_table_geom_atribute||' +FROM '||input_drainage_line_schema||'.'||input_drainage_line_table||'; +'; + +ELSE + +EXECUTE ' +INSERT INTO pghydro.pghft_drainage_line (drn_nm, drn_gm) +SELECT '||input_drainage_line_table_name_atribute||'::varchar, '||input_drainage_line_table_geom_atribute||' +FROM '||input_drainage_line_schema||'.'||input_drainage_line_table||'; +'; + +END IF; + +--'name' - column with the name of the drainage + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +PERFORM setval(('pghydro.drn_pk_seq'::text)::regclass, a.nextval::bigint, false) +FROM +( +SELECT max(drn_pk)+1 as nextval +FROM pghydro.pghft_drainage_line +) as a; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +EXECUTE ' +DROP TABLE IF EXISTS '||input_drainage_line_schema||'.'||input_drainage_line_table||'; +'; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +END; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +--FUNCTION pghydro.pghfn_input_data_drainage_area(input_drainage_area_schema varchar, input_drainage_area_table varchar, input_drainage_area_table_geom_atribute varchar) +------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_input_data_drainage_area(input_drainage_area_schema varchar, input_drainage_area_table varchar, input_drainage_area_table_geom_atribute varchar) +RETURNS varchar AS +$$ +DECLARE +r record; +_srid integer; +time_ timestamp; + +BEGIN + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +PERFORM pghydro.pghfn_TurnOffKeysIndex(); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +--DELETE DATA ON TABLES RELATED TO pghydro.pghft_drainage_area + +TRUNCATE pghydro.pghft_drainage_area; + +TRUNCATE pghydro.pghft_watershed; + +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +PERFORM pg_catalog.setval('pghydro.dra_pk_seq', 1, false); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +SELECT srid INTO _srid +FROM geometry_columns +WHERE f_table_name = input_drainage_area_table --'input_drainage_area_table' +AND f_table_schema = input_drainage_area_schema; --'public'; + + FOR r IN SELECT f_table_schema, f_table_name, f_geometry_column FROM public.geometry_columns WHERE srid <> _srid + + LOOP + + EXECUTE ' + SELECT UpdateGeometrySRID('||quote_literal(r.f_table_schema)||','||quote_literal(r.f_table_name)||','||quote_literal(r.f_geometry_column)||','||_srid||'); + '; + + END LOOP; + + +--INSERT DATA INTO TABLE pghydro.pghft_drainage_area + +EXECUTE ' +INSERT INTO pghydro.pghft_drainage_area (dra_gm) +SELECT '||input_drainage_area_table_geom_atribute||' +FROM '||input_drainage_area_schema||'.'||input_drainage_area_table||'; +'; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +PERFORM setval(('pghydro.dra_pk_seq'::text)::regclass, a.nextval::bigint, false) +FROM +( +SELECT max(dra_pk)+1 as nextval +FROM pghydro.pghft_drainage_area +) as a; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +--DROP INPUT DATA + +EXECUTE ' +DROP TABLE IF EXISTS '||input_drainage_area_schema||'.'||input_drainage_area_table||'; +'; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +--END OF FUNCTION + +END; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +--------------------------------------------------------- +--FUNCTION pghydro.pghfn_assign_vertex_id(off_set bigint) +--------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_assign_vertex_id(off_set bigint) +RETURNS character varying AS +$$ +DECLARE + +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_gm_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +UPDATE pghydro.pghft_drainage_line SET drn_drp_pk_sourcenode = NULL, drn_drp_pk_targetnode = NULL, drn_rcl_pk_drp_sourcenode = 15, drn_rcl_pk_drp_targetnode = 15; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +TRUNCATE pghydro.pghft_drainage_point; + +TRUNCATE pghydro.pghft_shoreline_starting_point; + +TRUNCATE pghydro.pghft_shoreline_ending_point; + +TRUNCATE pghydro.pghft_stream_mouth; + +TRUNCATE pghydro.pghft_watercourse_starting_point; + +TRUNCATE pghydro.pghft_watercourse_ending_point; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +PERFORM addgeometrycolumn('pghydro', 'pghft_drainage_line', 'drn_gm_startpoint', +( +SELECT srid FROM geometry_columns +WHERE f_table_name = 'pghft_drainage_area' +AND f_table_schema = 'pghydro' +) +, 'POINT', 2); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +PERFORM addgeometrycolumn('pghydro', 'pghft_drainage_line', 'drn_gm_endpoint', +( +SELECT srid FROM geometry_columns +WHERE f_table_name = 'pghft_drainage_area' +AND f_table_schema = 'pghydro' +) +, 'POINT', 2); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +UPDATE pghydro.pghft_drainage_line a +SET drn_gm_startpoint = ST_StartPoint((ST_Dump(drn_gm)).geom); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +UPDATE pghydro.pghft_drainage_line a +SET drn_gm_endpoint = ST_EndPoint((ST_Dump(drn_gm)).geom); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_gm_startpoint_idx; + +DROP INDEX IF EXISTS pghydro.drn_gm_endpoint_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; + +CREATE INDEX drn_gm_startpoint_idx ON pghydro.pghft_drainage_line USING gist (drn_gm_startpoint); + +CREATE INDEX drn_gm_endpoint_idx ON pghydro.pghft_drainage_line USING gist (drn_gm_endpoint); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; + +EXECUTE ' +ALTER SEQUENCE pghydro.drp_pk_seq RESTART WITH '||off_set||'; +'; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 11 : %', time_; + +INSERT INTO pghydro.pghft_drainage_point (drp_gm) +SELECT drp_gm +FROM +( +SELECT DISTINCT ON (drp_gm) drp_gm +FROM +( +SELECT DISTINCT ON (drn_gm_startpoint) drn_gm_startpoint as drp_gm FROM pghydro.pghft_drainage_line +UNION +SELECT DISTINCT ON (drn_gm_endpoint) drn_gm_endpoint as drp_gm FROM pghydro.pghft_drainage_line +) as a +) as b; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 12 : %', time_; + +DROP INDEX IF EXISTS pghydro.drp_pk_idx; + +DROP INDEX IF EXISTS pghydro.drp_gm_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 13 : %', time_; + +CREATE INDEX drp_pk_idx ON pghydro.pghft_drainage_point(drp_pk); + +CREATE INDEX drp_gm_idx ON pghydro.pghft_drainage_point USING gist (drp_gm); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 14 : %', time_; + +UPDATE pghydro.pghft_drainage_line drn +SET drn_drp_pk_sourcenode = drp.drp_pk +FROM pghydro.pghft_drainage_point drp +WHERE ST_Intersects(drp.drp_gm, drn.drn_gm_startpoint) +AND (drp.drp_gm && drn.drn_gm_startpoint); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 15 : %', time_; + +UPDATE pghydro.pghft_drainage_line drn +SET drn_drp_pk_targetnode = drp.drp_pk +FROM pghydro.pghft_drainage_point drp +WHERE ST_Intersects(drp.drp_gm, drn.drn_gm_endpoint) +AND (drp.drp_gm && drn.drn_gm_endpoint); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 16 : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 17 : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 18 : %', time_; + +ALTER TABLE pghydro.pghft_drainage_line +DROP COLUMN drn_gm_startpoint; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 19 : %', time_; + +ALTER TABLE pghydro.pghft_drainage_line +DROP COLUMN drn_gm_endpoint; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 20 : %', time_; + +DROP INDEX IF EXISTS pghydro.drp_pk_idx; + +DROP INDEX IF EXISTS pghydro.drp_gm_idx; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +----------------------------------------------------------------------- +--FUNCTION pghydro.pghfn_CalculateValence() +----------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_CalculateValence() +RETURNS varchar AS +$$ +DECLARE +subQuerySource varchar; +subQueryTarget varchar; +unionNode varchar; +finalQuery varchar; +_r record; +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +DROP INDEX IF EXISTS pghydro.drp_pk_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); + +CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); + +CREATE INDEX drp_pk_idx ON pghydro.pghft_drainage_point(drp_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + + + subQuerySource := 'SELECT drp_pk as id, count(drn_drp_pk_sourcenode) as qt FROM pghydro.pghft_drainage_point INNER JOIN pghydro.pghft_drainage_line ON drp_pk = drn_drp_pk_sourcenode GROUP BY drp_pk'; + + subQueryTarget := 'SELECT drp_pk as id, count(drn_drp_pk_targetnode) as qt FROM pghydro.pghft_drainage_point INNER JOIN pghydro.pghft_drainage_line ON drp_pk = drn_drp_pk_targetnode GROUP BY drp_pk'; + + unionNode := 'SELECT id, Sum(UNION_NODE.qt) as valence FROM (' || subQuerySource || ' UNION ALL ' || subQueryTarget ||') as UNION_NODE GROUP BY id'; + + finalQuery := 'SELECT NODE_FINAL.id as node_id, NODE_FINAL.valence FROM ('|| unionNode || ') as NODE_FINAL INNER JOIN pghydro.pghft_drainage_point ON NODE_FINAL.id = drp_pk'; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + + FOR _r IN EXECUTE finalQuery LOOP + + UPDATE pghydro.pghft_drainage_point SET drp_nu_valence = _r.valence WHERE drp_pk = _r.node_id; + + END LOOP; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +DROP INDEX IF EXISTS pghydro.drp_pk_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +------------------------------------ +--FUNCTION pghydro.pghfn_Valence(integer) +------------------------------------ + +CREATE OR REPLACE FUNCTION pghydro.pghfn_valence(integer) +RETURNS bigint AS +$$ +SELECT count(drp_pk) as valence +FROM +( +SELECT drn_drp_pk_targetnode as drp_pk +FROM pghydro.pghft_drainage_line +WHERE drn_drp_pk_targetnode = $1 +UNION ALL +SELECT drn_drp_pk_sourcenode as drp_pk +FROM pghydro.pghft_drainage_line +WHERE drn_drp_pk_sourcenode = $1 +) as a; +$$ +LANGUAGE SQL; + + +------------------------------------------------------- +--FUNCTION pghydro.pghfn_UpdateShorelineStartingPoint(integer) +------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdateShorelineStartingPoint(integer) +RETURNS varchar AS +$$ +DECLARE + +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +DELETE FROM pghydro.pghft_shoreline_starting_point; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +CREATE INDEX drp_pk_idx ON pghydro.pghft_drainage_point(drp_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +INSERT INTO pghydro.pghft_shoreline_starting_point (ssp_pk, ssp_drp_pk, ssp_rcl_pk_drp, ssp_rcl_pk_drn, ssp_sho_pk, ssp_rcl_pk_sho, ssp_gm) +SELECT drp_pk, drp_pk, 9, 15, 1, 15, drp_gm +FROM pghydro.pghft_drainage_point +WHERE drp_pk = $1; ---shoreline starting point + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +UPDATE pghydro.pghft_shoreline_starting_point a +SET ssp_drn_pk = b.drn_pk +FROM pghydro.pghft_drainage_line b +WHERE b.drn_drp_pk_targetnode = $1 +OR b.drn_drp_pk_sourcenode = $1; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +DROP INDEX IF EXISTS pghydro.drp_pk_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + + +------------------------------------------------------- +--FUNCTION pghydro.pghfn_UpdateShorelineEndingPoint(integer) +------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdateShorelineEndingPoint(integer) +RETURNS varchar AS +$$ +DECLARE + +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +DELETE +FROM pghydro.pghft_shoreline_ending_point; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +CREATE INDEX drp_pk_idx ON pghydro.pghft_drainage_point(drp_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +INSERT INTO pghydro.pghft_shoreline_ending_point (sep_pk, sep_drp_pk, sep_rcl_pk_drp, sep_rcl_pk_drn, sep_sho_pk, sep_rcl_pk_sho, sep_gm) +SELECT drp_pk, drp_pk, 9, 15, 1, 15, drp_gm +FROM pghydro.pghft_drainage_point +WHERE drp_pk = $1; ---shoreline ending point + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); + +UPDATE pghydro.pghft_shoreline_ending_point a +SET sep_drn_pk = b.drn_pk +FROM pghydro.pghft_drainage_line b +WHERE b.drn_drp_pk_targetnode = $1 +OR b.drn_drp_pk_sourcenode = $1; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +DROP INDEX IF EXISTS pghydro.drp_pk_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + + + +------------------------------------------------------- +--FUNCTION pghydro.pghfn_CalculateFlowDirection() +------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_CalculateFlowDirection() +RETURNS varchar AS +$$ +DECLARE + +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +DROP TABLE IF EXISTS pghydro.pghtb_tmp_direction; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +CREATE TABLE pghydro.pghtb_tmp_direction (id_tmp serial, id_table_net_tmp integer, target_table_net_tmp integer, source_table_net_tmp integer, direction_table_net_tmp boolean); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); + +CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +INSERT INTO pghydro.pghtb_tmp_direction (id_table_net_tmp, target_table_net_tmp, source_table_net_tmp, direction_table_net_tmp) +SELECT * FROM ( +WITH RECURSIVE tmp_direction(drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode, drn_bo_flowdirection) AS ( + SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode, (CASE WHEN drn_drp_pk_sourcenode = (SELECT sep_pk FROM pghydro.pghft_shoreline_ending_point) THEN false ELSE true END) + FROM pghydro.pghft_drainage_line + WHERE drn_drp_pk_sourcenode = (SELECT sep_pk FROM pghydro.pghft_shoreline_ending_point) ---shoreline ending point + OR drn_drp_pk_targetnode = (SELECT sep_pk FROM pghydro.pghft_shoreline_ending_point) ---shoreline ending point +UNION + SELECT a.drn_pk, a.drn_drp_pk_targetnode, a.drn_drp_pk_sourcenode, s + FROM ( +SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode, false as s +FROM pghydro.pghft_drainage_line +UNION ALL +SELECT drn_pk, drn_drp_pk_sourcenode, drn_drp_pk_targetnode, true as s +FROM pghydro.pghft_drainage_line +) as a, tmp_direction c + WHERE a.drn_drp_pk_sourcenode = c.drn_drp_pk_targetnode +) +SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode, drn_bo_flowdirection +FROM tmp_direction +) as a; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +UPDATE pghydro.pghft_drainage_line +SET drn_bo_flowdirection = null; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); + +CREATE INDEX id_table_net_tmp_idx ON pghydro.pghtb_tmp_direction(id_table_net_tmp); + +CREATE INDEX id_tmp_idx ON pghydro.pghtb_tmp_direction(id_tmp); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_;--can be better! + +UPDATE pghydro.pghft_drainage_line drn +SET drn_bo_flowdirection = direction_table_net_tmp +FROM ( +SELECT id_table_net_tmp, direction_table_net_tmp FROM pghydro.pghtb_tmp_direction a, (SELECT id_table_net_tmp as min_id_table_net_tmp, min(id_tmp) as min_id_tmp +FROM pghydro.pghtb_tmp_direction +GROUP BY min_id_table_net_tmp) as b +WHERE a.id_tmp = b.min_id_tmp +) as d +WHERE d.id_table_net_tmp = drn.drn_pk; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; + +DROP INDEX IF EXISTS pghydro.id_table_net_tmp_idx; + +DROP INDEX IF EXISTS pghydro.id_tmp_idx; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; + +DROP TABLE IF EXISTS pghydro.pghtb_tmp_direction; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + + +---------------------------------------------------- +--FUNCTION pghydro.pghfn_ReverseDrainageLine() +---------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_ReverseDrainageLine() +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +UPDATE pghydro.pghft_drainage_line +SET drn_gm = ST_Reverse(drn_gm) +WHERE drn_bo_flowdirection = false; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +DROP TABLE IF EXISTS direction_temp; + +CREATE TABLE direction_temp as +SELECT drn_pk, drn_drp_pk_sourcenode, drn_drp_pk_targetnode +FROM pghydro.pghft_drainage_line +WHERE drn_bo_flowdirection = false; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); + +DROP INDEX IF EXISTS pghydro.drn_pk_temp_idx; + +CREATE INDEX drn_pk_temp_idx ON direction_temp(drn_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +UPDATE pghydro.pghft_drainage_line a +SET drn_drp_pk_sourcenode = b.drn_drp_pk_targetnode, drn_drp_pk_targetnode = b.drn_drp_pk_sourcenode, drn_bo_flowdirection = true +FROM direction_temp b +WHERE a.drn_pk = b.drn_pk; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_pk_temp_idx; + +DROP TABLE direction_temp; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_gm_idx; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + + +------------------------------------------------------- +--FUNCTION pghydro.pghfn_FlowDirection(integer) +------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_FlowDirection(integer) +RETURNS boolean AS +$$ +SELECT drn_bo_flowdirection +FROM pghydro.pghft_drainage_line +WHERE drn_pk = $1; +$$ +LANGUAGE SQL; + + + +------------------------------------------------------------------ +--FUNCTION pghydro.pghfn_AssociateDrainageLine_DrainageArea() +------------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pghydro.pghfn_AssociateDrainageLine_DrainageArea() +RETURNS varchar AS +$$ +DECLARE + +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF ALL PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_gm_idx; + +UPDATE pghydro.pghft_drainage_line +SET drn_gm_point = ST_Multi((ST_Dump(ST_Line_Interpolate_Point((ST_Dump(drn_gm)).geom, 0.5))).geom); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_gm_point_idx; + +CREATE INDEX drn_gm_point_idx ON pghydro.pghft_drainage_line USING gist (drn_gm_point); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +DROP INDEX IF EXISTS pghydro.dra_gm_idx; + +CREATE INDEX dra_gm_idx ON pghydro.pghft_drainage_area USING gist (dra_gm); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +TRUNCATE pghydro.pghft_hydro_intel; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +PERFORM setval(('pghydro.hin_pk_seq'::text)::regclass, 1); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +INSERT INTO pghydro.pghft_hydro_intel (hin_drn_pk) +SELECT drn_pk +FROM pghydro.pghft_drainage_line; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +DROP INDEX IF EXISTS pghydro.hin_drn_pk_idx; + +CREATE INDEX hin_drn_pk_idx ON pghydro.pghft_hydro_intel(hin_drn_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; + +DROP INDEX IF EXISTS pghydro.dra_pk_idx; + +CREATE INDEX dra_pk_idx ON pghydro.pghft_drainage_area(dra_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; + +UPDATE pghydro.pghft_hydro_intel hin +SET hin_dra_pk = b.dra_pk +FROM +( +SELECT dra_pk, drn_pk +FROM pghydro.pghft_drainage_area dra, pghydro.pghft_drainage_line drn +WHERE ST_Intersects(drn.drn_gm_point, dra.dra_gm) +AND (drn.drn_gm_point && dra.dra_gm) +) as b +WHERE b.drn_pk = hin.hin_drn_pk; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 11 : %', time_; + +DROP INDEX IF EXISTS pghydro.hin_dra_pk_idx; + +CREATE INDEX hin_dra_pk_idx ON pghydro.pghft_hydro_intel(hin_dra_pk); + +INSERT INTO pghydro.pghft_hydro_intel (hin_dra_pk) +SELECT dra_pk +FROM pghydro.pghft_drainage_area a +WHERE NOT EXISTS +( +SELECT hin_dra_pk +FROM pghydro.pghft_hydro_intel b +WHERE b.hin_dra_pk = a.dra_pk +); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 12 : %', time_; + +UPDATE pghydro.pghft_hydro_intel a +SET hin_count_drn_pk = b.hin_count_drn_pk +FROM +( +SELECT hin_drn_pk, count(hin_drn_pk) as hin_count_drn_pk +FROM pghydro.pghft_hydro_intel +GROUP BY hin_drn_pk +) as b +WHERE a.hin_drn_pk = b.hin_drn_pk; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 13 : %', time_; + +UPDATE pghydro.pghft_hydro_intel a +SET hin_count_dra_pk = b.hin_count_dra_pk +FROM +( +SELECT hin_dra_pk, count(hin_dra_pk) as hin_count_dra_pk +FROM pghydro.pghft_hydro_intel +GROUP BY hin_dra_pk +) as b +WHERE a.hin_dra_pk = b.hin_dra_pk; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 14 : %', time_; + +PERFORM setval(('pghydro.drn_pk_seq'::text)::regclass, a.nextval::bigint, false) +FROM +( +SELECT max(drn_pk)+1 as nextval +FROM pghydro.pghft_drainage_line +) as a; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 15 : %', time_; + +PERFORM setval(('pghydro.dra_pk_seq'::text)::regclass, a.nextval::bigint, false) +FROM +( +SELECT max(dra_pk)+1 as nextval +FROM pghydro.pghft_drainage_area +) as a; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 16 : %', time_; + +UPDATE pghydro.pghft_drainage_line SET drn_dra_pk = null, drn_rcl_pk_dra = null; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 17 : %', time_; + +UPDATE pghydro.pghft_drainage_line drn +SET drn_dra_pk = hin.hin_dra_pk, drn_rcl_pk_dra = 12 +FROM pghydro.pghft_hydro_intel hin +WHERE drn.drn_pk = hin.hin_drn_pk; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 18 : %', time_; + +DROP INDEX IF EXISTS pghydro.hin_drn_pk_idx; + +DROP INDEX IF EXISTS pghydro.hin_dra_pk_idx; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +DROP INDEX IF EXISTS pghydro.dra_pk_idx; + +DROP INDEX IF EXISTS pghydro.dra_gm_idx; + +DROP INDEX IF EXISTS pghydro.drn_gm_point_idx; + +time_ := timeofday(); +RAISE NOTICE 'END OF ALL PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + + +---------------------------------------------------------------------- +--FUNCTION pghydro.pghfn_CalculateDrainageLineLength(integer, integer) +---------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_CalculateDrainageLineLength(integer, integer) +RETURNS character varying AS +$$ +DECLARE + +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +UPDATE pghydro.pghft_drainage_line +SET drn_gm_length = ST_Length(ST_Transform(drn_gm, $1))/$2; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + + +-------------------------------------------------------------------- +--FUNCTION pghydro.pghfn_CalculateDrainageAreaArea(integer, integer) +-------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_CalculateDrainageAreaArea(integer, integer) +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +UPDATE pghydro.pghft_drainage_area +SET dra_gm_area = ST_Area(ST_Transform(dra_gm, $1))/$2; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + + +---------------------------------------------------------- +--FUNCTION pghydro.pghfn_Downstream_DrainageLines(integer) +---------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_Downstream_DrainageLines(integer) +RETURNS SETOF integer +AS $$ +DECLARE + +r record; + +BEGIN + +FOR r IN +WITH RECURSIVE downstream(drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode) AS ( + SELECT b.drn_pk, b.drn_drp_pk_targetnode, b.drn_drp_pk_sourcenode + FROM pghydro.pghft_drainage_line b, + ( + SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode + FROM pghydro.pghft_drainage_line + WHERE drn_pk = $1 + ) as d + WHERE d.drn_drp_pk_targetnode = b.drn_drp_pk_sourcenode +UNION ALL + SELECT a.drn_pk, a.drn_drp_pk_targetnode, a.drn_drp_pk_sourcenode + FROM pghydro.pghft_drainage_line a, downstream c + WHERE a.drn_drp_pk_sourcenode = c.drn_drp_pk_targetnode +) +SELECT drn_pk +FROM downstream + +LOOP + +RETURN NEXT r.drn_pk; + +END LOOP; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + + +------------------------------------------------------------------- +--FUNCTION pghydro.pghfn_Downstream_DrainageLines(integer, integer) +------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_Downstream_DrainageLines(integer, integer) +RETURNS SETOF integer +AS $$ +DECLARE + +var1 integer; + +BEGIN + +IF $1 <> $2 THEN + +SELECT INTO var1 drn_drp_pk_targetnode FROM pghydro.pghft_drainage_line WHERE drn_pk = $2; + +RETURN QUERY + +WITH RECURSIVE downstream(drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode) AS +( + SELECT b.drn_pk, b.drn_drp_pk_targetnode, b.drn_drp_pk_sourcenode + FROM pghydro.pghft_drainage_line b, + ( + SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode + FROM pghydro.pghft_drainage_line + WHERE drn_pk = $1 + ) as d + WHERE d.drn_drp_pk_targetnode = b.drn_drp_pk_sourcenode +UNION ALL + SELECT a.drn_pk, a.drn_drp_pk_targetnode, a.drn_drp_pk_sourcenode + FROM pghydro.pghft_drainage_line a, downstream c + WHERE a.drn_drp_pk_sourcenode = c.drn_drp_pk_targetnode + AND c.drn_drp_pk_targetnode <> var1 +) +SELECT drn_pk +FROM downstream; + +END IF; + +RETURN; + +END; + +$$ +LANGUAGE PLPGSQL; + + +--------------------------------------------------------- +--FUNCTION pghydro.pghfn_DownstreamDrainageLines(integer) +--------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_DownstreamDrainageLines(integer) +RETURNS SETOF integer +AS $$ +DECLARE +r record; +var1 integer; + +BEGIN + +SELECT INTO var1 ssp_drn_pk FROM pghydro.pghft_shoreline_starting_point; + +FOR r IN +WITH RECURSIVE downstream(drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode) AS ( + SELECT b.drn_pk, b.drn_drp_pk_targetnode, b.drn_drp_pk_sourcenode + FROM pghydro.pghft_drainage_line b, + ( + SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode + FROM pghydro.pghft_drainage_line + WHERE drn_pk = $1 --DrainageLine_target + ) as d + WHERE d.drn_drp_pk_targetnode = b.drn_drp_pk_sourcenode +UNION ALL + SELECT a.drn_pk, a.drn_drp_pk_targetnode, a.drn_drp_pk_sourcenode + FROM pghydro.pghft_drainage_line a, downstream c + WHERE a.drn_drp_pk_sourcenode = c.drn_drp_pk_targetnode +) +SELECT b.drn_pk +FROM downstream b +WHERE NOT EXISTS +( +SELECT drn_pk +FROM +( +SELECT var1 as drn_pk --DrainageLine_source +UNION ALL +SELECT pghydro.pghfn_downstream_DrainageLines(var1) as drn_pk --DrainageLine_source +) as a +WHERE a.drn_pk = b.drn_pk +) +LOOP + +RETURN NEXT r.drn_pk; + +END LOOP; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + + +------------------------------------------------------------ +--FUNCTION pghydro.pghfn_numDownstreamDrainageLines(integer) +------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pghydro.pghfn_numDownstreamDrainageLines(integer) +RETURNS bigint AS +$$ +SELECT count(drn_pk) +FROM +( +SELECT pghydro.pghfn_DownstreamDrainageLines($1) as drn_pk +) as a; +$$ +LANGUAGE SQL; + + +------------------------------------------------------------------- +--FUNCTION pghydro.pghfn_DownstreamDrainageLinesN(integer, integer) +------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_DownstreamDrainageLinesN(integer, integer) +RETURNS integer AS +$$ +SELECT drn_pk +FROM +( +SELECT ROW_NUMBER() OVER() AS seq_drn_pk, drn_pk +FROM +( +SELECT pghydro.pghfn_DownstreamDrainageLines($1) as drn_pk --DrainageLine +) as a +) as b +WHERE seq_drn_pk = $2;--sequencial +$$ +LANGUAGE SQL; + + +------------------------------------------------------------ +--FUNCTION pghydro.pghfn_distance_to_mouth(integer, numeric) +------------------------------------------------------------ +--DROP FUNCTION pghydro.pghfn_distance_to_mouth(IN integer, OUT distance_to_mouth numeric) + + +CREATE OR REPLACE FUNCTION pghydro.pghfn_distance_to_mouth(IN integer, OUT distance_to_mouth numeric) +AS $$ +BEGIN +SELECT INTO distance_to_mouth COALESCE(sum(c.drn_gm_length),0) +FROM +( +SELECT b.drn_pk, a.drn_gm_length--::numeric +FROM pghydro.pghft_drainage_line a, +( +SELECT pghydro.pghfn_downstreamDrainageLines($1) as drn_pk +) as b +WHERE a.drn_pk = b.drn_pk +) as c; +END; +$$ +LANGUAGE PLPGSQL; + + +---------------------------------------------------------- +--FUNCTION pghydro.pghfn_UpstreamDrainageLines(integer) +---------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_upstreamDrainageLines(integer) +RETURNS SETOF integer +AS $$ +DECLARE +r record; +BEGIN +FOR r IN +WITH RECURSIVE upstream(drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode) AS ( + SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode + FROM pghydro.pghft_drainage_line + WHERE drn_pk = $1 +UNION ALL + SELECT a.drn_pk, a.drn_drp_pk_targetnode, a.drn_drp_pk_sourcenode + FROM pghydro.pghft_drainage_line a, upstream c + WHERE a.drn_drp_pk_targetnode = c.drn_drp_pk_sourcenode +) +SELECT drn_pk +FROM upstream +LOOP +RETURN NEXT r.drn_pk; +END LOOP; +RETURN; +END; +$$ +LANGUAGE PLPGSQL; + + +------------------------------------------------ +--FUNCTION pghydro.pghfn_numUpstreamDrainageLines(integer) +------------------------------------------------ + +CREATE OR REPLACE FUNCTION pghydro.pghfn_numUpstreamDrainageLines(integer) +RETURNS bigint AS +$$ +SELECT count(drn_pk) +FROM +( +SELECT pghydro.pghfn_upstreamDrainageLines($1) as drn_pk +) as a; +$$ +LANGUAGE SQL; + + +---------------------------------------------------------- +--FUNCTION pghydro.pghfn_UpstreamDrainageLinesN(integer, integer) +---------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_UpstreamDrainageLinesN(integer, integer) +RETURNS integer AS +$$ +SELECT drn_pk +FROM +( +SELECT ROW_NUMBER() OVER() AS seq_drn_pk, drn_pk +FROM +( +SELECT pghydro.pghfn_upstreamDrainageLines($1) as drn_pk --DrainageLine +) as a +) as b +WHERE seq_drn_pk = $2;--sequencial +$$ +LANGUAGE SQL; + + +---------------------------------------------------------- +--FUNCTION pghydro.pghfn_UpstreamDrainageLines(integer, integer) +---------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_upstreamDrainageLines(integer, integer) +RETURNS SETOF integer +AS $$ +DECLARE + +var1 integer; + +BEGIN + +SELECT INTO var1 drn_drp_pk_sourcenode FROM pghydro.pghft_drainage_line WHERE drn_pk = $2; + +RETURN QUERY + +WITH RECURSIVE upstream(drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode) AS +( + SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode + FROM pghydro.pghft_drainage_line + WHERE drn_pk = $1 +UNION ALL + SELECT a.drn_pk, a.drn_drp_pk_targetnode, a.drn_drp_pk_sourcenode + FROM pghydro.pghft_drainage_line a, upstream c + WHERE a.drn_drp_pk_targetnode = c.drn_drp_pk_sourcenode + AND c.drn_drp_pk_sourcenode <> var1 + +) +SELECT drn_pk +FROM upstream; + +RETURN; + +END; + +$$ +LANGUAGE PLPGSQL; + + +-------------------------------------------------------------------- +--FUNCTION pghydro.pghfn_UpstreamDrainageLinesArea(integer, numeric) +-------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_UpstreamDrainageLinesArea(IN integer, OUT upstream_area numeric) +AS $$ +BEGIN +SELECT INTO upstream_area COALESCE(sum(c.dra_gm_area),0) +FROM +( +SELECT b.drn_pk, c.dra_gm_area +FROM pghydro.pghft_drainage_line a, +( +SELECT pghydro.pghfn_upstreamDrainageLines($1) as drn_pk +) as b, +pghydro.pghft_drainage_area c +WHERE a.drn_pk = b.drn_pk +AND a.drn_dra_pk = c.dra_pk +) as c; +END; +$$ +LANGUAGE PLPGSQL; + + +---------------------------------------------------------- +--FUNCTION pghydro.pghfn_DownstreamDrainageLine(integer) +---------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_DownstreamDrainageLine(integer) +RETURNS integer AS +$$ +SELECT drn_pk +FROM pghydro.pghft_drainage_line +WHERE drn_drp_pk_sourcenode = +( +SELECT drn_drp_pk_targetnode +FROM pghydro.pghft_drainage_line +WHERE drn_pk = $1 +) +AND drn_pk <> $1; +$$ +LANGUAGE SQL; + + +---------------------------------------------------------- +--FUNCTION pghydro.pghfn_UpstreamDrainageLine(integer) +---------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_UpstreamDrainageLine(integer) +RETURNS integer AS +$$ +SELECT drn_pk +FROM pghydro.pghft_drainage_line +WHERE drn_drp_pk_targetnode = +( +SELECT drn_drp_pk_targetnode +FROM pghydro.pghft_drainage_line +WHERE drn_pk = $1 +) +AND drn_pk <> $1; +$$ +LANGUAGE SQL; + + +-------------------------------------------------------- +--FUNCTION pghydro.pghfn_CalculateDistanceToSea(numeric) +-------------------------------------------------------- + + +CREATE OR REPLACE FUNCTION pghydro.pghfn_CalculateDistanceToSea(numeric) +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; +var1 integer; +i integer; +j integer; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +SELECT INTO var1 ssp_drn_pk FROM pghydro.pghft_shoreline_starting_point; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +j := max(drn_pk) FROM pghydro.pghft_drainage_line; + +FOR i IN 1..j LOOP + +UPDATE pghydro.pghft_drainage_line drn +SET drn_nu_distancetosea = pghydro.pghfn_distance_to_mouth(drn_pk)+$1--offset distance to sea +WHERE drn.drn_pk = i; + +RAISE NOTICE 'DRAINAGE %/%', i, j; + +END LOOP; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +UPDATE pghydro.pghft_drainage_line drn +SET drn_nu_distancetosea = null +FROM +( +SELECT pghydro.pghfn_downstream_drainagelines(var1) as drn_pk +UNION +SELECT var1 as drn_pk +) as a +WHERE drn.drn_pk = a.drn_pk; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +END; +$$ +LANGUAGE PLPGSQL; + + +---------------------------------------------------- +--FUNCTION pghydro.pghfn_CalculateUpstreamArea() +---------------------------------------------------- + + +CREATE OR REPLACE FUNCTION pghydro.pghfn_CalculateUpstreamArea() +RETURNS character varying AS +$$ +DECLARE +var1 integer; +time_ timestamp; +i integer; +j integer; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +SELECT INTO var1 ssp_drn_pk FROM pghydro.pghft_shoreline_starting_point; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; + +DROP INDEX IF EXISTS pghydro.dra_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +CREATE INDEX drn_dra_pk_idx ON pghydro.pghft_drainage_line(drn_dra_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +CREATE INDEX dra_pk_idx ON pghydro.pghft_drainage_area(dra_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; + +j := max(drn_pk) FROM pghydro.pghft_drainage_line; + +FOR i IN 1..j LOOP + +UPDATE pghydro.pghft_drainage_line drn +SET drn_nu_upstreamarea = pghydro.pghfn_Upstreamdrainagelinesarea(drn_pk) +WHERE drn.drn_pk = i; + +RAISE NOTICE 'DRAINAGE %/%', i, j; + +END LOOP; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; + +UPDATE pghydro.pghft_drainage_line drn +SET drn_nu_upstreamarea = dra.dra_gm_area +FROM +( +SELECT pghydro.pghfn_downstream_drainagelines(var1) as drn_pk +UNION +SELECT var1 as drn_pk +) as a, pghydro.pghft_drainage_area dra +WHERE drn.drn_pk = a.drn_pk +AND drn.drn_dra_pk = dra.dra_pk; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; + +DROP INDEX IF EXISTS pghydro.dra_pk_idx; + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +END; +$$ +LANGUAGE PLPGSQL; + +--------------------------------------------------------- +--FUNCTION pghydro.pghfn_CalculateUpstreamDrainageLine() +--------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_CalculateUpstreamDrainageLine() +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +UPDATE pghydro.pghft_drainage_line +SET drn_drn_pk_upstreamDrainageLine = pghydro.pghfn_UpstreamDrainageLine(drn_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +END; +$$ +LANGUAGE PLPGSQL; + + +---------------------------------------------------------- +--FUNCTION pghydro.pghfn_CalculateDownstreamDrainageLine() +---------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_CalculateDownstreamDrainageLine() +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +UPDATE pghydro.pghft_drainage_line +SET drn_drn_pk_downstreamDrainageLine = pghydro.pghfn_DownstreamDrainageLine(drn_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +END; +$$ +LANGUAGE PLPGSQL; + + +-------------------------------------------------------- +--FUNCTION pghydro.pghfn_ExportTopologicalTable(varchar) +-------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_ExportTopologicalTable(varchar) +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; + +DROP INDEX IF EXISTS pghydro.dra_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +CREATE INDEX drn_dra_pk_idx ON pghydro.pghft_drainage_line(drn_dra_pk); + +CREATE INDEX dra_pk_idx ON pghydro.pghft_drainage_area(dra_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +EXECUTE ' +COPY +( +SELECT drn.drn_pk, drn.drn_drp_pk_sourcenode, drn.drn_drp_pk_targetnode, drn.drn_gm_length, dra.dra_gm_area +FROM pghydro.pghft_drainage_line drn, pghydro.pghft_drainage_area dra +WHERE drn.drn_dra_pk = dra.dra_pk +) +TO '''||$1||''' WITH DELIMITER '' ''; +'; + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; + +DROP INDEX IF EXISTS pghydro.dra_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +END; +$$ +LANGUAGE PLPGSQL; + + +-------------------------------------------------------- +--FUNCTION pghydro.pghfn_ImportTopologicalTable(varchar) +-------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_ImportTopologicalTable(varchar) +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; + +DROP INDEX IF EXISTS pghydro.dra_pk_idx; + +DROP INDEX IF EXISTS pghydro.pbc_drn_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +CREATE INDEX drn_dra_pk_idx ON pghydro.pghft_drainage_line(drn_dra_pk); + +CREATE INDEX dra_pk_idx ON pghydro.pghft_drainage_area(dra_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +DROP TABLE IF EXISTS pghydro.pghtb_input_pfafstetterbasincode; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +CREATE TABLE pghydro.pghtb_input_pfafstetterbasincode( +pbc_drn_pk integer, +pbc_drn_wtc_cd_pfafstetterwatercourse varchar, +pbc_dra_cd_pfafstetterbasin varchar, +pbc_drn_bo_flowdirection varchar, +pbc_drn_gm_length numeric, +pbc_drn_nu_distancetosea numeric, +pbc_drn_wtc_nu_distancetosea numeric, +pbc_drn_dra_gm_area numeric, +pbc_drn_nu_upstreamarea numeric +); + +--Importar as tabelas com as informações do topologia hídrica + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +EXECUTE ' +COPY +pghydro.pghtb_input_pfafstetterbasincode +FROM '''||$1||''' +WITH CSV; + +'; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +CREATE INDEX pbc_drn_pk_idx ON pghydro.pghtb_input_pfafstetterbasincode(pbc_drn_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +UPDATE pghydro.pghft_drainage_area dra +SET dra_cd_pfafstetterbasin = pbc.pbc_dra_cd_pfafstetterbasin +FROM pghydro.pghtb_input_pfafstetterbasincode pbc, pghydro.pghft_drainage_line drn +WHERE pbc.pbc_drn_pk = drn.drn_pk +AND drn.drn_dra_pk = dra.dra_pk; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; + +DROP TABLE pghydro.pghtb_input_pfafstetterbasincode; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; + +DROP INDEX IF EXISTS pghydro.dra_pk_idx; + +DROP INDEX IF EXISTS pghydro.pbc_drn_pk_idx; + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +END; +$$ +LANGUAGE PLPGSQL; + + +---------------------------------------------------------------- +--FUNCTION pghydro.pghfn_main_watercourse_DrainageLines(integer) +---------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_main_watercourse_DrainageLines(integer) +RETURNS TABLE(drn_pk_ integer, n_ integer) +AS $$ +DECLARE + +var1 integer; + +BEGIN + +SELECT INTO var1 ssp_drn_pk FROM pghydro.pghft_shoreline_starting_point; + +IF $1 IN (SELECT pghydro.pghfn_Downstream_DrainageLines(var1)) THEN + +RETURN QUERY + +SELECT drn_pk, (ROW_NUMBER() OVER ())::integer AS n +FROM +( +SELECT drn_pk, (ROW_NUMBER() OVER ())::integer AS m +FROM +( +SELECT var1 as drn_pk +UNION ALL +SELECT pghydro.pghfn_Downstream_DrainageLines(var1) as drn_pk +) as l +WHERE NOT EXISTS +( +SELECT drn_pk +FROM +( +SELECT pghydro.pghfn_Downstream_DrainageLines($1) as drn_pk +) as r +WHERE r.drn_pk = l.drn_pk +) +ORDER BY m DESC +) as a; + +ELSE + +RETURN QUERY + +WITH RECURSIVE main_watercourse_DrainageLines(drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode, drn_nu_upstreamarea) AS +( + SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode, drn_nu_upstreamarea + FROM pghydro.pghft_drainage_line + WHERE drn_pk = $1 +UNION ALL + SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode, drn_nu_upstreamarea + FROM + ( + SELECT a.drn_pk, a.drn_drp_pk_targetnode, a.drn_drp_pk_sourcenode, a.drn_nu_upstreamarea + FROM pghydro.pghft_drainage_line a, main_watercourse_DrainageLines c + WHERE a.drn_drp_pk_targetnode = c.drn_drp_pk_sourcenode + ORDER BY drn_nu_upstreamarea DESC + LIMIT 1 + ) as foo +) +SELECT drn_pk, (ROW_NUMBER() OVER ())::integer AS n +FROM main_watercourse_DrainageLines; + +RETURN; + +END IF; + +END; +$$ +LANGUAGE PLPGSQL; + +------------------------------------------------------------------------- +--FUNCTION pghydro.pghfn_main_watercourse_DrainageLines(integer, integer) +------------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_main_watercourse_DrainageLines(integer, integer) +RETURNS TABLE(drn_pk_ integer, n_ integer) +AS $$ +DECLARE + +var1 integer; +var2 integer; + +BEGIN + +SELECT INTO var1 drn_drp_pk_sourcenode FROM pghydro.pghft_drainage_line WHERE drn_pk = $2; + +SELECT INTO var2 ssp_drn_pk FROM pghydro.pghft_shoreline_starting_point; + +IF $1 IN (SELECT pghydro.pghfn_Downstream_DrainageLines(var2)) THEN + +RETURN QUERY + +SELECT drn_pk, (ROW_NUMBER() OVER ())::integer AS n +FROM +( +SELECT drn_pk, (ROW_NUMBER() OVER ())::integer AS m +FROM +( +SELECT $2 as drn_pk +UNION ALL +SELECT pghydro.pghfn_Downstream_DrainageLines($2) as drn_pk +) as l +WHERE NOT EXISTS +( +SELECT drn_pk +FROM +( +SELECT pghydro.pghfn_Downstream_DrainageLines($1) as drn_pk +) as r +WHERE r.drn_pk = l.drn_pk +) +ORDER BY m DESC +) as a; + +ELSE + +RETURN QUERY + +WITH RECURSIVE main_watercourse_DrainageLines(drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode, drn_nu_upstreamarea) AS +( + SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode, drn_nu_upstreamarea + FROM pghydro.pghft_drainage_line + WHERE drn_pk = $1 +UNION ALL + SELECT drn_pk, drn_drp_pk_targetnode, drn_drp_pk_sourcenode, drn_nu_upstreamarea + FROM + ( + SELECT a.drn_pk, a.drn_drp_pk_targetnode, a.drn_drp_pk_sourcenode, a.drn_nu_upstreamarea + FROM pghydro.pghft_drainage_line a, main_watercourse_DrainageLines c + WHERE a.drn_drp_pk_targetnode = c.drn_drp_pk_sourcenode + AND c.drn_drp_pk_sourcenode <> var1 + ORDER BY drn_nu_upstreamarea DESC + LIMIT 1 + ) as foo +) +SELECT drn_pk, (ROW_NUMBER() OVER ())::integer AS n +FROM main_watercourse_DrainageLines; + +RETURN; + +END IF; + +END; +$$ +LANGUAGE PLPGSQL; + +-------------------------------------------------------------- +--FUNCTION pghydro.pghfn_main_watercourse_confluences(integer) +-------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_main_watercourse_confluences(integer) +RETURNS TABLE(_drn_pk integer, _n integer) +AS $$ +DECLARE + +var1 integer; + +BEGIN + +RETURN QUERY + +SELECT drn_pk, n +FROM +( +SELECT drn.drn_pk, drn.drn_nu_upstreamarea, pwc.n +FROM pghydro.pghft_drainage_line drn +INNER JOIN +( +SELECT drn_pk_ as drn_pk, n_ as n +FROM pghydro.pghfn_main_watercourse_DrainageLines($1) +EXCEPT ALL +SELECT $1 as drn_pk, 1 as n +) pwc ON pwc.drn_pk = drn.drn_drn_pk_upstreamDrainageLine +ORDER BY pwc.n +) as a +ORDER BY drn_nu_upstreamarea DESC; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + +----------------------------------------------------------------------- +--FUNCTION pghydro.pghfn_main_watercourse_confluences(integer, integer) +----------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_main_watercourse_confluences(integer, integer) +RETURNS TABLE(_drn_pk integer, _n integer) +AS $$ + +BEGIN + +RETURN QUERY + +SELECT drn_pk, n +FROM +( +SELECT drn.drn_pk, drn.drn_nu_upstreamarea, pwc.n +FROM pghydro.pghft_drainage_line drn +INNER JOIN +( +SELECT drn_pk_ as drn_pk, n_ as n +FROM pghydro.pghfn_main_watercourse_DrainageLines($1, $2) +EXCEPT ALL +SELECT $1 as drn_pk, 1 as n +) pwc ON pwc.drn_pk = drn.drn_drn_pk_upstreamDrainageLine +ORDER BY pwc.n +) as a +ORDER BY drn_nu_upstreamarea DESC; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + +------------------------------------------------------------------- +--FUNCTION pghydro.pghfn_main_watercourse_4_confluences(in integer) +------------------------------------------------------------------- + + +CREATE OR REPLACE FUNCTION pghydro.pghfn_main_watercourse_4_confluences(in integer) +RETURNS SETOF integer +AS $$ +BEGIN + +RETURN QUERY + +SELECT drn_pk +FROM +( +SELECT _drn_pk as drn_pk, _n as n +FROM pghydro.pghfn_main_watercourse_confluences($1) +LIMIT 4 +) as a +ORDER BY n; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + +------------------------------------------------------------------------- +--FUNCTION pghydro.pghfn_main_watercourse_4_confluences(integer, integer) +------------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_main_watercourse_4_confluences(integer, integer) +RETURNS SETOF integer +AS $$ + +BEGIN + +RETURN QUERY + +SELECT drn_pk +FROM +( +SELECT _drn_pk as drn_pk, _n as n +FROM pghydro.pghfn_main_watercourse_confluences($1, $2) +LIMIT 4 +) as a +ORDER BY n; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + + +------------------------------------------------------------------------- +--FUNCTION pghydro.pghfn_main_watercourse_9_confluences(integer, integer) +------------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_main_watercourse_9_confluences(integer, integer) +RETURNS TABLE(vard integer, varu integer)AS $$ + +DECLARE + +var1d integer; +var1u integer; +var2 integer; +var3d integer; +var3u integer; +var4 integer; +var5d integer; +var5u integer; +var6 integer; +var7d integer; +var7u integer; +var8 integer; +var9d integer; +var9u integer; +var9 integer; +con4 integer[]; +drn_pk_count integer; + +BEGIN + +IF $2 = -99 THEN + +SELECT INTO con4 ARRAY(SELECT pghydro.pghfn_main_watercourse_4_confluences($1)); + +ELSE + +SELECT INTO con4 ARRAY(SELECT pghydro.pghfn_main_watercourse_4_confluences($1, $2)); + +END IF; + +SELECT INTO drn_pk_count array_length(con4, 1); + +SELECT INTO var2 con4[1]; + +SELECT INTO var4 con4[2]; + +SELECT INTO var6 con4[3]; + +SELECT INTO var8 con4[4]; + +var9 = var8; + +var1d = $1; + +SELECT INTO var1u drn_drn_pk_downstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var2; + +SELECT INTO var3d drn_drn_pk_upstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var2; + +SELECT INTO var3u drn_drn_pk_downstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var4; + +SELECT INTO var5d drn_drn_pk_upstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var4; + +SELECT INTO var5u drn_drn_pk_downstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var6; + +SELECT INTO var7d drn_drn_pk_upstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var6; + +SELECT INTO var7u drn_drn_pk_downstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var8; + +SELECT INTO var9d drn_drn_pk_upstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var8; + +SELECT INTO var9u drn_drn_pk_downstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var9; + +IF $2 = -99 AND drn_pk_count = 1 THEN RETURN QUERY +SELECT d, u +FROM +( +SELECT var1d as d, var1u as u, 1 as i +UNION +SELECT var2 as d, -99 as u, 2 as i +UNION +SELECT var3d as d, -99 as u, 3 as i +) as a +ORDER BY i; + +ELSIF $2 = -99 AND drn_pk_count = 2 THEN RETURN QUERY +SELECT d, u +FROM +( +SELECT var1d as d, var1u as u, 1 as i +UNION +SELECT var2 as d, -99 as u, 2 as i +UNION +SELECT var3d as d, var3u as u, 3 as i +UNION +SELECT var4 as d, -99 as u, 4 as i +UNION +SELECT var5d as d, -99 as u, 5 as i +) as a +ORDER BY i; + +ELSIF $2 = -99 AND drn_pk_count = 3 THEN RETURN QUERY +SELECT d, u +FROM +( +SELECT var1d as d, var1u as u, 1 as i +UNION +SELECT var2 as d, -99 as u, 2 as i +UNION +SELECT var3d as d, var3u as u, 3 as i +UNION +SELECT var4 as d, -99 as u, 4 as i +UNION +SELECT var5d as d, var5u as u, 5 as i +UNION +SELECT var6 as d, -99 as u, 6 as i +UNION +SELECT var7d as d, -99 as u, 7 as i +) as a +ORDER BY i; + +ELSIF $2 = -99 AND drn_pk_count = 4 THEN RETURN QUERY +SELECT d, u +FROM +( +SELECT var1d as d, var1u as u, 1 as i +UNION +SELECT var2 as d, -99 as u, 2 as i +UNION +SELECT var3d as d, var3u as u, 3 as i +UNION +SELECT var4 as d, -99 as u, 4 as i +UNION +SELECT var5d as d, var5u as u, 5 as i +UNION +SELECT var6 as d, -99 as u, 6 as i +UNION +SELECT var7d as d, var7u as u, 7 as i +UNION +SELECT var8 as d, -99 as u, 8 as i +UNION +SELECT var9d as d, -99 as u, 9 as i +) as a +ORDER BY i; + +ELSIF $2 <> -99 AND drn_pk_count = 1 THEN RETURN QUERY +SELECT d, u +FROM +( +SELECT var1d as d, var1u as u, 1 as i +UNION +SELECT var2 as d, -99 as u, 2 as i +UNION +SELECT var3d as d, $2 as u, 3 as i +) as a +ORDER BY i; + +ELSIF $2 <> -99 AND drn_pk_count = 2 THEN RETURN QUERY +SELECT d, u +FROM +( +SELECT var1d as d, var1u as u, 1 as i +UNION +SELECT var2 as d, -99 as u, 2 as i +UNION +SELECT var3d as d, var3u as u, 3 as i +UNION +SELECT var4 as d, -99 as u, 4 as i +UNION +SELECT var5d as d, $2 as u, 5 as i +) as a +ORDER BY i; + +ELSIF $2 <> -99 AND drn_pk_count = 3 THEN RETURN QUERY +SELECT d, u +FROM +( +SELECT var1d as d, var1u as u, 1 as i +UNION +SELECT var2 as d, -99 as u, 2 as i +UNION +SELECT var3d as d, var3u as u, 3 as i +UNION +SELECT var4 as d, -99 as u, 4 as i +UNION +SELECT var5d as d, var5u as u, 5 as i +UNION +SELECT var6 as d, -99 as u, 6 as i +UNION +SELECT var7d as d, $2 as u, 7 as i +) as a +ORDER BY i; + +ELSIF $2 <> -99 AND drn_pk_count = 4 THEN RETURN QUERY +SELECT d, u +FROM +( +SELECT var1d as d, var1u as u, 1 as i +UNION +SELECT var2 as d, -99 as u, 2 as i +UNION +SELECT var3d as d, var3u as u, 3 as i +UNION +SELECT var4 as d, -99 as u, 4 as i +UNION +SELECT var5d as d, var5u as u, 5 as i +UNION +SELECT var6 as d, -99 as u, 6 as i +UNION +SELECT var7d as d, var7u as u, 7 as i +UNION +SELECT var8 as d, -99 as u, 8 as i +UNION +SELECT var9d as d, $2 as u, 9 as i +) as a +ORDER BY i; + +END IF +; +END; +$$ +LANGUAGE PLPGSQL; + + +------------------------------------------------------------------- +--FUNCTION pghydro.pghfn_pfafstetter_codification(integer, integer) +------------------------------------------------------------------- +CREATE OR REPLACE FUNCTION pghydro.pghfn_pfafstetter_codification(integer, integer) +RETURNS TABLE(drn_pk_ integer, pfafstetter_codification_ integer) +AS $$ + +DECLARE + +var1d integer; +var1u integer; +var2 integer; +var3d integer; +var3u integer; +var4 integer; +var5d integer; +var5u integer; +var6 integer; +var7d integer; +var7u integer; +var8 integer; +var9d integer; +con4 integer[]; + +BEGIN + + +IF $2 = -99 THEN + +SELECT INTO con4 ARRAY(SELECT pghydro.pghfn_main_watercourse_4_confluences($1)); + +ELSE + +SELECT INTO con4 ARRAY(SELECT pghydro.pghfn_main_watercourse_4_confluences($1, $2)); + +END IF; + +SELECT INTO var2 con4[1]; + +SELECT INTO var4 con4[2]; + +SELECT INTO var6 con4[3]; + +SELECT INTO var8 con4[4]; + +var1d = $1; + +SELECT INTO var1u drn_drn_pk_downstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var2; + +SELECT INTO var3d drn_drn_pk_upstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var2; + +SELECT INTO var3u drn_drn_pk_downstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var4; + +SELECT INTO var5d drn_drn_pk_upstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var4; + +SELECT INTO var5u drn_drn_pk_downstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var6; + +SELECT INTO var7d drn_drn_pk_upstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var6; + +SELECT INTO var7u drn_drn_pk_downstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var8; + +SELECT INTO var9d drn_drn_pk_upstreamDrainageLine FROM pghydro.pghft_drainage_line WHERE drn_pk = var8; + +IF $2 = -99 THEN RETURN QUERY + +---pfafstetter_basin_codification 1 + +SELECT pghydro.pghfn_upstreamDrainageLines($1, var1u) as drn_pk, 1 as pfafstetter_codification + +UNION ALL + +---pfafstetter_basin_codification 2 + +SELECT pghydro.pghfn_upstreamDrainageLines(var2) as drn_pk, 2 as pfafstetter_codification + +UNION ALL + +---pfafstetter_basin_codification 3 + +SELECT pghydro.pghfn_upstreamDrainageLines(var3d, var3u) as drn_pk, 3 as pfafstetter_codification + +UNION ALL + +---pfafstetter_basin_codification 4 + +SELECT pghydro.pghfn_upstreamDrainageLines(var4) as drn_pk, 4 as pfafstetter_codification + +UNION ALL + +---pfafstetter_basin_codification 5 + +SELECT pghydro.pghfn_upstreamDrainageLines(var5d, var5u) as drn_pk, 5 as pfafstetter_codification + +UNION ALL + +---pfafstetter_basin_codification 6 + +SELECT pghydro.pghfn_upstreamDrainageLines(var6) as drn_pk, 6 as pfafstetter_codification + +UNION ALL + +---pfafstetter_basin_codification 7 + +SELECT pghydro.pghfn_upstreamDrainageLines(var7d, var7u) as drn_pk, 7 as pfafstetter_codification + +UNION ALL + +---pfafstetter_basin_codification 8 + +SELECT pghydro.pghfn_upstreamDrainageLines(var8) as drn_pk, 8 as pfafstetter_codification + +UNION ALL + +---pfafstetter_basin_codification 9 + +SELECT pghydro.pghfn_upstreamDrainageLines(var9d) as drn_pk, 9 as pfafstetter_codification; + +ELSIF $2 <> -99 THEN RETURN QUERY + +SELECT pghydro.pghfn_upstreamDrainageLines($1, var1u) as drn_pk, 1 as pfafstetter_codification + +UNION ALL + +---pfafstetter_basin_codification 2 + +SELECT pghydro.pghfn_upstreamDrainageLines(var2) as drn_pk, 2 as pfafstetter_codification + +UNION ALL + +-----pfafstetter_basin_codification 3 + +SELECT pghydro.pghfn_upstreamDrainageLines(var3d, var3u) as drn_pk, 3 as pfafstetter_codification + +UNION ALL + +---pfafstetter_basin_codification 4 + +SELECT pghydro.pghfn_upstreamDrainageLines(var4) as drn_pk, 4 as pfafstetter_codification +UNION ALL + +-----pfafstetter_basin_codification 5 + +SELECT pghydro.pghfn_upstreamDrainageLines(var5d, var5u) as drn_pk, 5 as pfafstetter_codification + +UNION ALL + +---pfafstetter_basin_codification 6 + +SELECT pghydro.pghfn_upstreamDrainageLines(var6) as drn_pk, 6 as pfafstetter_codification + +UNION ALL + +-----pfafstetter_basin_codification 7 + +SELECT pghydro.pghfn_upstreamDrainageLines(var7d, var7u) as drn_pk, 7 as pfafstetter_codification + +UNION ALL + +---pfafstetter_basin_codification 8 + +SELECT pghydro.pghfn_upstreamDrainageLines(var8) as drn_pk, 8 as pfafstetter_codification +UNION ALL + +---pfafstetter_basin_codification 9 + +SELECT pghydro.pghfn_upstreamDrainageLines(var9d, $2) as drn_pk, 9 as pfafstetter_codification; + +END IF + +; +END; +$$ +LANGUAGE PLPGSQL; + +-------------------------------------------------------------------- +--FUNCTION pghydro.pghfn_pfafstetter_codifications(integer, integer) +-------------------------------------------------------------------- +CREATE OR REPLACE FUNCTION pghydro.pghfn_pfafstetter_codifications(integer, integer) +RETURNS TABLE(drn_pk_ integer, pfafstetter_codification_ integer, depth_ integer) +AS $$ +BEGIN + +RETURN QUERY + +SELECT (pghfn_pfafstetter_codification).drn_pk_, (pghfn_pfafstetter_codification).pfafstetter_codification_, d.depth +FROM +( +----- +SELECT pghydro.pghfn_pfafstetter_codification(vard, varu), e.depth +FROM +( +---- +WITH cod as +( +WITH RECURSIVE cod(vard, varu, vard2, varu2, depth) AS +( + SELECT $1 as vard, $2 as varu, 0 as vard2, 0 as varu, 1 as depth +UNION ALL + SELECT (pghfn_main_watercourse_9_confluences).vard as vard, (pghfn_main_watercourse_9_confluences).varu, vard2, varu2, depth + FROM + ( + SELECT pghydro.pghfn_main_watercourse_9_confluences(vard, varu), c.vard as vard2, c.varu as varu2, c.depth + 1 as depth + FROM cod c + WHERE vard = c.vard + AND varu = c.varu + ) as b +) +SELECT vard, varu, vard2, varu2, depth +FROM cod +WHERE vard <> varu +) +SELECT vard, varu, depth +FROM cod +WHERE vard in (SELECT DISTINCT vard2 FROM cod) +---- +) as e +----- +) as d +; +END; +$$ +LANGUAGE PLPGSQL; + +----------------------------------------------------------------------------- +--FUNCTION pghydro.pghfn_Calculate_Pfafstetter_Codification(integer, integer) +----------------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_Calculate_Pfafstetter_Codification(integer, integer) +RETURNS varchar AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +DROP INDEX IF EXISTS pghydro.dra_pk_idx; + +DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; + +DROP INDEX IF EXISTS pghydro.pbc_drn_pk_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drn_pk_downstreamDrainageLine_idx; + +DROP INDEX IF EXISTS pghydro.drn_drn_pk_upstreamDrainageLine_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +CREATE INDEX dra_pk_idx ON pghydro.pghft_drainage_area(dra_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +CREATE INDEX drn_dra_pk_idx ON pghydro.pghft_drainage_line(drn_dra_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +CREATE INDEX drn_drn_pk_downstreamDrainageLine_idx ON pghydro.pghft_drainage_line(drn_drn_pk_downstreamDrainageLine); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; + +CREATE INDEX drn_drn_pk_upstreamDrainageLine_idx ON pghydro.pghft_drainage_line(drn_drn_pk_upstreamDrainageLine); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; + +DROP TABLE IF EXISTS pghydro.pghtb_input_pfafstetterbasincode; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; + +CREATE TABLE pghydro.pghtb_input_pfafstetterbasincode AS + +SELECT drn_pk_ as pbc_drn_pk, 'R'||string_agg((pfafstetter_codification_),'' ORDER BY depth) as pbc_dra_cd_pfafstetterbasin +FROM +( +SELECT (pghfn_pfafstetter_codifications).drn_pk_, ((pghfn_pfafstetter_codifications).pfafstetter_codification_)::text, ((pghfn_pfafstetter_codifications).depth_) as depth +FROM pghydro.pghfn_pfafstetter_codifications($1, $2) +) as a +GROUP BY drn_pk_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 11 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drn_pk_downstreamDrainageLine_idx; + +DROP INDEX IF EXISTS pghydro.drn_drn_pk_upstreamDrainageLine_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 12 : %', time_; + +CREATE INDEX pbc_drn_pk_idx ON pghydro.pghtb_input_pfafstetterbasincode(pbc_drn_pk); + +UPDATE pghydro.pghft_drainage_area dra +SET dra_cd_pfafstetterbasin = pbc.pbc_dra_cd_pfafstetterbasin +FROM pghydro.pghtb_input_pfafstetterbasincode pbc, pghydro.pghft_drainage_line drn +WHERE pbc.pbc_drn_pk = drn.drn_pk +AND drn.drn_dra_pk = dra.dra_pk; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 13 : %', time_; + +DROP TABLE pghydro.pghtb_input_pfafstetterbasincode; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +DROP INDEX IF EXISTS pghydro.dra_pk_idx; + +DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; + +DROP INDEX IF EXISTS pghydro.pbc_drn_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'END OF ALL PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +--------------------------------------------------------------------- +--FUNCTION pghydro.pghfn_Calculate_Pfafstetter_Codification() +--------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_Calculate_Pfafstetter_Codification() +RETURNS varchar AS +$$ +DECLARE +time_ timestamp; +var1 integer; +var2 integer; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +DROP INDEX IF EXISTS pghydro.dra_pk_idx; + +DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; + +DROP INDEX IF EXISTS pghydro.pbc_drn_pk_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drn_pk_downstreamDrainageLine_idx; + +DROP INDEX IF EXISTS pghydro.drn_drn_pk_upstreamDrainageLine_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +CREATE INDEX dra_pk_idx ON pghydro.pghft_drainage_area(dra_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +CREATE INDEX drn_dra_pk_idx ON pghydro.pghft_drainage_line(drn_dra_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +CREATE INDEX drn_drn_pk_downstreamDrainageLine_idx ON pghydro.pghft_drainage_line(drn_drn_pk_downstreamDrainageLine); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; + +CREATE INDEX drn_drn_pk_upstreamDrainageLine_idx ON pghydro.pghft_drainage_line(drn_drn_pk_upstreamDrainageLine); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; + +SELECT INTO var1 drn_pk +FROM +( +SELECT drn_pk +FROM pghydro.pghft_drainage_line +WHERE drn_drp_pk_targetnode = +( +SELECT sep_drp_pk +FROM pghydro.pghft_shoreline_ending_point +) +) as a; + +SELECT INTO var2 drn_pk +FROM +( +SELECT drn_pk +FROM pghydro.pghft_drainage_line +WHERE drn_drp_pk_sourcenode = +( +SELECT ssp_drp_pk +FROM pghydro.pghft_shoreline_starting_point +) +) as a; + +IF var2 is null THEN var2 = -99; +END IF; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; + +DROP TABLE IF EXISTS pghydro.pghtb_input_pfafstetterbasincode; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 11 : %', time_; + +CREATE TABLE pghydro.pghtb_input_pfafstetterbasincode AS + +SELECT drn_pk_ as pbc_drn_pk, 'R'||string_agg((pfafstetter_codification_),'' ORDER BY depth) as pbc_dra_cd_pfafstetterbasin +FROM +( +SELECT (pghfn_pfafstetter_codifications).drn_pk_, ((pghfn_pfafstetter_codifications).pfafstetter_codification_)::text, ((pghfn_pfafstetter_codifications).depth_) as depth +FROM pghydro.pghfn_pfafstetter_codifications(var1, var2) +) as a +GROUP BY drn_pk_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 12 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drn_pk_downstreamDrainageLine_idx; + +DROP INDEX IF EXISTS pghydro.drn_drn_pk_upstreamDrainageLine_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 13 : %', time_; + +CREATE INDEX pbc_drn_pk_idx ON pghydro.pghtb_input_pfafstetterbasincode(pbc_drn_pk); + +UPDATE pghydro.pghft_drainage_area dra +SET dra_cd_pfafstetterbasin = pbc.pbc_dra_cd_pfafstetterbasin +FROM pghydro.pghtb_input_pfafstetterbasincode pbc, pghydro.pghft_drainage_line drn +WHERE pbc.pbc_drn_pk = drn.drn_pk +AND drn.drn_dra_pk = dra.dra_pk; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 14 : %', time_; + +DROP TABLE pghydro.pghtb_input_pfafstetterbasincode; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +DROP INDEX IF EXISTS pghydro.dra_pk_idx; + +DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; + +DROP INDEX IF EXISTS pghydro.pbc_drn_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'END OF ALL PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +------------------------------------------------------------ +--FUNCTION pghydro.pghfn_UpdatePfafstetterBasinCode(varchar) +------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdatePfafstetterBasinCode(varchar) +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +UPDATE pghydro.pghft_drainage_area +SET dra_cd_pfafstetterbasin = $1||ltrim(dra_cd_pfafstetterbasin, 'R'); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +UPDATE pghydro.pghft_drainage_area +SET dra_nu_pfafstetterbasincodelevel = length(dra_cd_pfafstetterbasin); + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF ALL PROCESS IN : %', time_; + +END; +$$ +LANGUAGE PLPGSQL; + + +------------------------------------------------------------ +--FUNCTION pghydro.pghfn_UpdatePfafstetterWatercourseCode() +------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdatePfafstetterWatercourseCode() +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +DROP TABLE IF EXISTS pghydro.pghft_drainage_line_temp; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +DROP INDEX IF EXISTS pghydro.dra_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +CREATE TABLE pghydro.pghft_drainage_line_temp( +drn_pk integer, +wtc_cd_pfafstetterwatercourse character varying, +wtc_nu_pfafstetterwatercoursecodeorder smallint, +wtc_nu_pfafstetterwatercoursecodelevel smallint, +wtc_gm_area numeric, +wtc_nu_distancetosea numeric, +wtc_cd_pfafstetterwatercourse_downstream character varying, +wtc_gm_length numeric +); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +--drn_pk + +INSERT INTO pghydro.pghft_drainage_line_temp(drn_pk) +SELECT drn_pk +FROM pghydro.pghft_drainage_line +WHERE drn_nu_distancetosea is not null; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; + +CREATE INDEX dra_pk_idx ON pghydro.pghft_drainage_area(dra_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; + +CREATE INDEX drn_dra_pk_idx ON pghydro.pghft_drainage_line(drn_dra_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; + +--wtc_cd_pfafstetterwatercourse + +UPDATE pghydro.pghft_drainage_line_temp tmp +SET wtc_cd_pfafstetterwatercourse = rtrim(dra.dra_cd_pfafstetterbasin, '13579') +FROM pghydro.pghft_drainage_area dra, pghydro.pghft_drainage_line drn +WHERE drn.drn_dra_pk = dra.dra_pk +AND drn.drn_pk = tmp.drn_pk; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 11 : %', time_; + +--wtc_nu_pfafstetterwatercoursecodeorder + +UPDATE pghydro.pghft_drainage_line_temp +SET wtc_nu_pfafstetterwatercoursecodeorder = length(translate(wtc_cd_pfafstetterwatercourse, '13579', '')); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 12 : %', time_; + +--wtc_nu_pfafstetterwatercoursecodelevel + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 13 : %', time_; + +UPDATE pghydro.pghft_drainage_line_temp +SET wtc_nu_pfafstetterwatercoursecodelevel = length(wtc_cd_pfafstetterwatercourse); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 14 : %', time_; + +--wtc_nu_distancetosea + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 15 : %', time_; + +UPDATE pghydro.pghft_drainage_line_temp tmp +SET wtc_nu_distancetosea = a.wtc_nu_distancetosea +FROM +( +SELECT tmp.wtc_cd_pfafstetterwatercourse, min(drn.drn_nu_distancetosea) as wtc_nu_distancetosea +FROM pghydro.pghft_drainage_line_temp tmp, pghydro.pghft_drainage_line drn +WHERE drn.drn_pk = tmp.drn_pk +GROUP BY tmp.wtc_cd_pfafstetterwatercourse +) as a +WHERE tmp.wtc_cd_pfafstetterwatercourse = a.wtc_cd_pfafstetterwatercourse; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 16 : %', time_; + +--wtc_gm_area + +UPDATE pghydro.pghft_drainage_line_temp tmp +SET wtc_gm_area = a.wtc_gm_area +FROM +( +SELECT tmp.wtc_cd_pfafstetterwatercourse, max(drn.drn_nu_upstreamarea) as wtc_gm_area +FROM pghydro.pghft_drainage_line_temp tmp, pghydro.pghft_drainage_line drn +WHERE drn.drn_pk = tmp.drn_pk +GROUP BY tmp.wtc_cd_pfafstetterwatercourse +) as a +WHERE tmp.wtc_cd_pfafstetterwatercourse = a.wtc_cd_pfafstetterwatercourse; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 17 : %', time_; + +--wtc_cd_pfafstetterwatercourse_downstream + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 18 : %', time_; + +UPDATE pghydro.pghft_drainage_line_temp +SET wtc_cd_pfafstetterwatercourse_downstream = rtrim(substring(wtc_cd_pfafstetterwatercourse from 1 for (wtc_nu_pfafstetterwatercoursecodelevel-1)), '13579'); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 19 : %', time_; + +--wtc_gm_length + +UPDATE pghydro.pghft_drainage_line_temp tmp +SET wtc_gm_length = a.wtc_gm_length +FROM +( +SELECT tmp.wtc_cd_pfafstetterwatercourse, sum(drn.drn_gm_length) as wtc_gm_length +FROM pghydro.pghft_drainage_line_temp tmp, pghydro.pghft_drainage_line drn +WHERE drn.drn_pk = tmp.drn_pk +GROUP BY tmp.wtc_cd_pfafstetterwatercourse +) as a +WHERE tmp.wtc_cd_pfafstetterwatercourse = a.wtc_cd_pfafstetterwatercourse; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 20 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 21 : %', time_; + +DROP INDEX IF EXISTS pghydro.dra_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 22 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx; + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF ALL PROCESS IN : %', time_; + +END; + +$$ +LANGUAGE PLPGSQL; + + +---------------------------------------------------- +--FUNCTION pghydro.pghfn_UpdateWatercourse() +---------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdateWatercourse() +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF ALL PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +TRUNCATE pghydro.pghft_watercourse; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +TRUNCATE pghydro.pghft_stream_mouth; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +TRUNCATE pghydro.pghft_watercourse_ending_point; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +TRUNCATE pghydro.pghft_watercourse_starting_point; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +PERFORM setval(('pghydro.wtc_pk_seq'::text)::regclass, 1, false); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +DROP INDEX IF EXISTS pghydro.wtc_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_wtc_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; + +DROP INDEX IF EXISTS pghydro.tmp_drn_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; + +DROP INDEX IF EXISTS pghydro.tmp_wtc_cd_pfafstetterwatercourse_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 11 : %', time_; + +--wtc_cd_pfafstetterwatercourse + +INSERT INTO pghydro.pghft_watercourse +( +wtc_cd_pfafstetterwatercourse +) +SELECT DISTINCT +wtc_cd_pfafstetterwatercourse +FROM pghydro.pghft_drainage_line_temp; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 12 : %', time_; + +CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 13 : %', time_; + +CREATE INDEX tmp_drn_pk_idx ON pghydro.pghft_drainage_line_temp(drn_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 14 : %', time_; + +CREATE INDEX tmp_wtc_cd_pfafstetterwatercourse_idx ON pghydro.pghft_drainage_line_temp(wtc_cd_pfafstetterwatercourse); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 15 : %', time_; + +--wtc_gm + +UPDATE pghydro.pghft_watercourse wtc +SET wtc_gm = a.wtc_gm +FROM +( +SELECT tmp.wtc_cd_pfafstetterwatercourse, ST_UNION(drn.drn_gm) as wtc_gm +FROM pghydro.pghft_drainage_line_temp tmp, pghydro.pghft_drainage_line drn +WHERE tmp.drn_pk = drn.drn_pk +GROUP BY tmp.wtc_cd_pfafstetterwatercourse +) as a +WHERE a.wtc_cd_pfafstetterwatercourse = wtc.wtc_cd_pfafstetterwatercourse; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 16 : %', time_; + +--wtc_nu_distancetosea + +UPDATE pghydro.pghft_watercourse wtc +SET wtc_nu_distancetosea = tmp.wtc_nu_distancetosea +FROM pghydro.pghft_drainage_line_temp tmp +WHERE tmp.wtc_cd_pfafstetterwatercourse = wtc.wtc_cd_pfafstetterwatercourse; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 17 : %', time_; + +--wtc_cd_pfafstetterwatercourse_downstream + +UPDATE pghydro.pghft_watercourse wtc +SET wtc_cd_pfafstetterwatercourse_downstream = tmp.wtc_cd_pfafstetterwatercourse_downstream +FROM pghydro.pghft_drainage_line_temp tmp +WHERE tmp.wtc_cd_pfafstetterwatercourse = wtc.wtc_cd_pfafstetterwatercourse; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 18 : %', time_; + +--wtc_gm_area + +UPDATE pghydro.pghft_watercourse wtc +SET wtc_gm_area = tmp.wtc_gm_area +FROM pghydro.pghft_drainage_line_temp tmp +WHERE tmp.wtc_cd_pfafstetterwatercourse = wtc.wtc_cd_pfafstetterwatercourse; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 19 : %', time_; + +--wtc_cd_pfafstetterwatercourse + +UPDATE pghydro.pghft_watercourse wtc +SET wtc_cd_pfafstetterwatercourse = tmp.wtc_cd_pfafstetterwatercourse +FROM pghydro.pghft_drainage_line_temp tmp +WHERE tmp.wtc_cd_pfafstetterwatercourse = wtc.wtc_cd_pfafstetterwatercourse; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 20 : %', time_; + +--wtc_nu_pfafstetterwatercoursecodelevel + +UPDATE pghydro.pghft_watercourse wtc +SET wtc_nu_pfafstetterwatercoursecodelevel = tmp.wtc_nu_pfafstetterwatercoursecodelevel +FROM pghydro.pghft_drainage_line_temp tmp +WHERE tmp.wtc_cd_pfafstetterwatercourse = wtc.wtc_cd_pfafstetterwatercourse; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 21 : %', time_; + +--wtc_nu_pfafstetterwatercoursecodeorder + +UPDATE pghydro.pghft_watercourse wtc +SET wtc_nu_pfafstetterwatercoursecodeorder = tmp.wtc_nu_pfafstetterwatercoursecodeorder +FROM pghydro.pghft_drainage_line_temp tmp +WHERE tmp.wtc_cd_pfafstetterwatercourse = wtc.wtc_cd_pfafstetterwatercourse; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 22 : %', time_; + +--wtc_gm_length + +UPDATE pghydro.pghft_watercourse wtc +SET wtc_gm_length = tmp.wtc_gm_length +FROM pghydro.pghft_drainage_line_temp tmp +WHERE tmp.wtc_cd_pfafstetterwatercourse = wtc.wtc_cd_pfafstetterwatercourse; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 23 : %', time_; + +--drn_wtc_pk + +UPDATE pghydro.pghft_drainage_line drn +SET drn_wtc_pk = wtc.wtc_pk +FROM pghydro.pghft_watercourse wtc, pghydro.pghft_drainage_line_temp tmp +WHERE drn.drn_pk = tmp.drn_pk +AND wtc.wtc_cd_pfafstetterwatercourse = tmp.wtc_cd_pfafstetterwatercourse; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 24 : %', time_; + +--drn_rcl_pk_wtc + +UPDATE pghydro.pghft_drainage_line +SET drn_rcl_pk_wtc = 13; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 25 : %', time_; + +CREATE INDEX wtc_pk_idx ON pghydro.pghft_watercourse(wtc_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 26 : %', time_; + +CREATE INDEX drn_wtc_pk_idx ON pghydro.pghft_drainage_line(drn_wtc_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 27 : %', time_; + +--drn_nu_distancetowatercourse + +UPDATE pghydro.pghft_drainage_line drn +SET drn_nu_distancetowatercourse = drn.drn_nu_distancetosea - wtc.wtc_nu_distancetosea +FROM pghydro.pghft_watercourse wtc +WHERE drn.drn_wtc_pk = wtc.wtc_pk; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 28 : %', time_; + +DROP INDEX IF EXISTS pghydro.wtc_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 29 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_wtc_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 30 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 31 : %', time_; + +DROP INDEX IF EXISTS pghydro.tmp_drn_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 32 : %', time_; + +DROP INDEX IF EXISTS pghydro.tmp_wtc_cd_pfafstetterwatercourse_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 33 : %', time_; + +DROP TABLE IF EXISTS pghydro.pghft_drainage_line_temp; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; +END; +$$ +LANGUAGE PLPGSQL; + + +---------------------------------------------------------- +--FUNCTION pghydro.pghfn_PfafstetterBasinCodeLevel() +---------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_PfafstetterBasinCodeLevel() +RETURNS SETOF smallint AS +$$ +SELECT DISTINCT dra_nu_pfafstetterbasincodelevel +FROM pghydro.pghft_drainage_area +ORDER BY dra_nu_pfafstetterbasincodelevel; +$$ +LANGUAGE SQL; + + +-------------------------------------------------------- +--FUNCTION pghydro.pghfn_numPfafstetterBasinCodeLevel() +-------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_numPfafstetterBasinCodeLevel() +RETURNS bigint AS +$$ +SELECT count(dra_nu_pfafstetterbasincodelevel) +FROM +( +SELECT pghydro.pghfn_PfafstetterBasinCodeLevel() as dra_nu_pfafstetterbasincodelevel +) as a; +$$ +LANGUAGE SQL; + + +---------------------------------------------------------- +--FUNCTION pghydro.pghfn_PfafstetterBasinCodeLevelN(integer) +---------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_PfafstetterBasinCodeLevelN(integer) +RETURNS smallint AS +$$ +SELECT dra_nu_pfafstetterbasincodelevel +FROM +( +SELECT (ROW_NUMBER() OVER ())::integer AS seq_dra_nu_pfafstetterbasincodelevel, dra_nu_pfafstetterbasincodelevel +FROM +( +SELECT pghydro.pghfn_PfafstetterBasinCodeLevel() as dra_nu_pfafstetterbasincodelevel +) as a +) as b +WHERE seq_dra_nu_pfafstetterbasincodelevel = $1; +$$ +LANGUAGE SQL; + +-------------------------------------------------------------- +--FUNCTION pghydro.pghfn_UpdateWatershedDrainageArea(integer) +-------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdateWatershedDrainageArea(integer) +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +INSERT INTO pghydro.pghft_watershed (wts_cd_pfafstetterbasin, wts_cd_pfafstetterbasincodelevel, wts_gm_area, wts_gm) +SELECT dra_cd_pfafstetterbasin, $1 as dra_nu_pfafstetterbasincodelevel, SUM(dra_gm_area) as dra_gm_area, ST_Multi((ST_UNION(dra_gm))) as dra_gm +FROM +( +SELECT substring(dra_cd_pfafstetterbasin FROM 1 FOR $1) as dra_cd_pfafstetterbasin, dra_gm_area, dra_gm +FROM pghydro.pghft_drainage_area +) as a +GROUP BY dra_cd_pfafstetterbasin; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +UPDATE pghydro.pghft_watershed wts +SET wts_gm = a.wts_gm +FROM +( +SELECT wts_pk, ST_Collect(ST_MakePolygon(wts_gm)) As wts_gm +FROM ( + SELECT wts_pk, ST_ExteriorRing((ST_Dump(wts_gm)).geom) As wts_gm + FROM pghydro.pghft_watershed + ) as a +GROUP BY wts_pk +) as a +WHERE a.wts_pk = wts.wts_pk +AND wts.wts_cd_pfafstetterbasincodelevel = $1; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RAISE NOTICE 'BASIN LEVEL % FINISHED', $1; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +---------------------------------------------------- +--FUNCTION pghydro.pghfn_UpdateWatershed(integer) +---------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdateWatershed(integer) +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +DROP INDEX IF EXISTS pghydro.wts_cd_pfafstetterbasincodelevel_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +CREATE INDEX wts_cd_pfafstetterbasincodelevel_idx ON pghydro.pghft_watershed(wts_cd_pfafstetterbasincodelevel); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +INSERT INTO pghydro.pghft_watershed (wts_cd_pfafstetterbasin, wts_cd_pfafstetterbasincodelevel, wts_gm_area, wts_gm) +SELECT wts_cd_pfafstetterbasin, $1-1 as wts_cd_pfafstetterbasincodelevel, SUM(wts_gm_area) as wts_gm_area, ST_Multi(ST_UNION(wts_gm)) as wts_gm +FROM +( +SELECT substring(wts_cd_pfafstetterbasin FROM 1 FOR $1-1) as wts_cd_pfafstetterbasin, wts_gm_area, wts_gm +FROM +( +SELECT wts_cd_pfafstetterbasin, wts_cd_pfafstetterbasincodelevel, wts_gm_area, wts_gm +FROM pghydro.pghft_watershed +WHERE wts_cd_pfafstetterbasincodelevel = $1 +) as b +) as a +GROUP BY wts_cd_pfafstetterbasin; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +UPDATE pghydro.pghft_watershed wts +SET wts_gm = a.wts_gm +FROM +( +SELECT wts_pk, ST_Collect(ST_MakePolygon(wts_gm)) As wts_gm +FROM ( + SELECT wts_pk, ST_ExteriorRing((ST_Dump(wts_gm)).geom) As wts_gm + FROM pghydro.pghft_watershed + ) as a +GROUP BY wts_pk +) as a +WHERE a.wts_pk = wts.wts_pk +AND wts.wts_cd_pfafstetterbasincodelevel = $1-1; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +DROP INDEX IF EXISTS pghydro.wts_cd_pfafstetterbasincodelevel_idx; + +RAISE NOTICE 'BASIN LEVEL % FINISHED', $1-1; + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +END; +$$ +LANGUAGE PLPGSQL; + +---------------------------------------------------------------- +--FUNCTION pghydro.pghfn_InsertColumnPfafstetterBasinCodeLevel() +---------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_InsertColumnPfafstetterBasinCodeLevel() +RETURNS character varying AS +$$ + +DECLARE +min_var integer; +max_var integer; +time_ timestamp; +i integer; +j integer; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +SELECT INTO max_var max(dra_nu_pfafstetterbasincodelevel) FROM pghydro.pghft_drainage_area; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +SELECT INTO min_var min(dra_nu_pfafstetterbasincodelevel) FROM pghydro.pghft_drainage_area; + +i := max_var; +j := min_var; + +RAISE NOTICE 'MAX LEVEL : %', i; +RAISE NOTICE 'MIN LEVEL : %', j; + +WHILE (i >= j) LOOP + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF LOOP : %', time_; +RAISE NOTICE 'LEVEL : %', i; + +BEGIN +EXECUTE ' +ALTER TABLE pghydro.pghft_drainage_area +DROP COLUMN dra_cd_pfafstetterbasin_level_'||i||';'; +EXCEPTION WHEN undefined_column THEN + --DO NOTHING +END; + +BEGIN +EXECUTE ' +ALTER TABLE pghydro.pghft_drainage_area +ADD COLUMN dra_cd_pfafstetterbasin_level_'||i||' character varying;'; +EXCEPTION WHEN duplicate_column THEN + --DO NOTHING +END; + +EXECUTE ' +UPDATE pghydro.pghft_drainage_area +SET dra_cd_pfafstetterbasin_level_'||i||' = substring(dra_cd_pfafstetterbasin FROM 1 FOR '||i||');'; + +i := i - 1; + +END LOOP; + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + + + +END; +$$ +LANGUAGE PLPGSQL; + + +----------------------------------------------------------- +--FUNCTION pghydro.pghfn_UpdateWatercourse_Starting_Point() +----------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdateWatercourse_Starting_Point() +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +TRUNCATE pghydro.pghft_watercourse_starting_point CASCADE; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +PERFORM setval(('pghydro.wsp_pk_seq'::text)::regclass, 1, false); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +DROP INDEX IF EXISTS pghydro.drp_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +DROP INDEX IF EXISTS pghydro.drp_nu_valence_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_wtc_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +DROP INDEX IF EXISTS pghydro.wtc_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; + +DROP INDEX IF EXISTS pghydro.wtc_cd_pfafstetterwatercourse_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; + +CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; + +CREATE INDEX drp_pk_idx ON pghydro.pghft_drainage_point(drp_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 11 : %', time_; + +CREATE INDEX drp_nu_valence_idx ON pghydro.pghft_drainage_point(drp_nu_valence); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 12 : %', time_; + +CREATE INDEX drn_wtc_pk_idx ON pghydro.pghft_drainage_line(drn_wtc_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 13 : %', time_; + +CREATE INDEX wtc_pk_idx ON pghydro.pghft_watercourse(wtc_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 14 : %', time_; + +CREATE INDEX wtc_cd_pfafstetterwatercourse_idx ON pghydro.pghft_watercourse(wtc_cd_pfafstetterwatercourse); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 15 : %', time_; + +INSERT INTO pghydro.pghft_watercourse_starting_point(wsp_drp_pk, wsp_rcl_pk_drp, wsp_wtc_pk, wsp_rcl_pk_wtc, wsp_gm) +SELECT drp.drp_pk, 9 as wsp_rcl_pk_drp, drn.drn_wtc_pk, 15 as wsp_rcl_pk_wtc, drp.drp_gm +FROM pghydro.pghft_drainage_point drp, pghydro.pghft_drainage_line drn, pghydro.pghft_watercourse wtc +WHERE drn.drn_drp_pk_sourcenode = drp.drp_pk +AND drp.drp_nu_valence = 1 +AND drn.drn_wtc_pk = wtc.wtc_pk +AND wtc.wtc_cd_pfafstetterwatercourse <> ''; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 16 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 17 : %', time_; + +DROP INDEX IF EXISTS pghydro.drp_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 18 : %', time_; + +DROP INDEX IF EXISTS pghydro.drp_nu_valence_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 19 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_wtc_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 20 : %', time_; + +DROP INDEX IF EXISTS pghydro.wtc_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 21 : %', time_; + +DROP INDEX IF EXISTS pghydro.wtc_cd_pfafstetterwatercourse_idx; + +RETURN 'OK'; + + + +END; +$$ +LANGUAGE PLPGSQL; + + +--------------------------------------------------------- +--FUNCTION pghydro.pghfn_UpdateWatercourse_Ending_Point() +--------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdateWatercourse_Ending_Point() +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +TRUNCATE pghydro.pghft_watercourse_ending_point CASCADE; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +PERFORM setval(('pghydro.wep_pk_seq'::text)::regclass, 1, false); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +DROP INDEX IF EXISTS pghydro.drp_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_wtc_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +DROP INDEX IF EXISTS pghydro.wtc_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; + +CREATE INDEX drp_pk_idx ON pghydro.pghft_drainage_point(drp_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; + +CREATE INDEX drn_wtc_pk_idx ON pghydro.pghft_drainage_line(drn_wtc_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; + +CREATE INDEX wtc_pk_idx ON pghydro.pghft_watercourse(wtc_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 11 : %', time_; + +INSERT INTO pghydro.pghft_watercourse_ending_point(wep_drp_pk, wep_rcl_pk_drp, wep_wtc_pk, wep_rcl_pk_wtc, wep_gm) +SELECT drp.drp_pk, 9 as con_rcl_pk_drp, drn.drn_wtc_pk, 15 as con_rcl_pk_wtc, drp.drp_gm +FROM pghydro.pghft_drainage_point drp, pghydro.pghft_drainage_line drn, pghydro.pghft_watercourse wtc +WHERE drn.drn_drp_pk_targetnode = drp.drp_pk +AND drn.drn_wtc_pk = wtc.wtc_pk +AND drn.drn_nu_distancetowatercourse = 0 +AND drn.drn_nu_distancetosea > 0; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 12 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 13 : %', time_; + +DROP INDEX IF EXISTS pghydro.drp_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 14 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_wtc_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 15 : %', time_; + +DROP INDEX IF EXISTS pghydro.wtc_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + + +---------------------------------------------------- +--FUNCTION pghydro.pghfn_UpdateStream_Mouth() +---------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdateStream_Mouth() +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +TRUNCATE pghydro.pghft_stream_mouth CASCADE; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +PERFORM setval(('pghydro.stm_pk_seq'::text)::regclass, 1, false); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +DROP INDEX IF EXISTS pghydro.drp_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_wtc_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +DROP INDEX IF EXISTS pghydro.wtc_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; + +CREATE INDEX drp_pk_idx ON pghydro.pghft_drainage_point(drp_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; + +CREATE INDEX drn_wtc_pk_idx ON pghydro.pghft_drainage_line(drn_wtc_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; + +CREATE INDEX wtc_pk_idx ON pghydro.pghft_watercourse(wtc_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 11 : %', time_; + +INSERT INTO pghydro.pghft_stream_mouth(stm_drp_pk, stm_rcl_pk_drp, stm_wtc_pk, stm_rcl_pk_wtc, stm_gm) +SELECT drp.drp_pk, 9 as con_rcl_pk_drp, drn.drn_wtc_pk, 15 as con_rcl_pk_wtc, drp.drp_gm +FROM pghydro.pghft_drainage_point drp, pghydro.pghft_drainage_line drn, pghydro.pghft_watercourse wtc +WHERE drn.drn_drp_pk_targetnode = drp.drp_pk +AND drn.drn_wtc_pk = wtc.wtc_pk +AND drn.drn_nu_distancetowatercourse = 0 +AND drn.drn_nu_distancetosea = 0; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 12 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 13 : %', time_; + +DROP INDEX IF EXISTS pghydro.drp_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 14 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_wtc_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 15 : %', time_; + +DROP INDEX IF EXISTS pghydro.wtc_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + + +---------------------------------------------------- +--FUNCTION pghydro.pghfn_UpdateShoreline() +---------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdateShoreline() +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +DELETE FROM pghydro.pghft_shoreline; + +INSERT INTO pghydro.pghft_shoreline(sho_pk, sho_nm, sho_gm_length, sho_gm) +SELECT 1 as sho_pk, 'Linha de Costa'::text as sho_nm, SUM(drn_gm_length) as sho_gm_length, ST_UNION(drn_gm) as sho_gm +FROM pghydro.pghft_drainage_line +WHERE drn_nu_distancetosea is null; + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF ALL PROCESS IN : %', time_; + +END; + +$$ +LANGUAGE PLPGSQL; + + +---------------------------------------------------- +--FUNCTION pghydro.pghfn_UpdateDomainColumn() +---------------------------------------------------- + + +CREATE OR REPLACE FUNCTION pghydro.pghfn_UpdateDomainColumn() +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_wtc_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +CREATE INDEX drn_wtc_pk_idx ON pghydro.pghft_drainage_line(drn_wtc_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_tdm_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +CREATE INDEX drn_tdm_pk_idx ON pghydro.pghft_drainage_line(drn_tdm_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +UPDATE pghydro.pghft_drainage_line a +SET drn_tdm_pk = 1 +FROM +( +SELECT drn_wtc_pk +FROM pghydro.pghft_drainage_line +WHERE drn_tdm_pk = 1 +) as b +WHERE b.drn_wtc_pk = a.drn_wtc_pk; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +UPDATE pghydro.pghft_watercourse a +SET wtc_tdm_pk = null; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +DROP INDEX IF EXISTS pghydro.wtc_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 8 : %', time_; + +CREATE INDEX wtc_pk_idx ON pghydro.pghft_watercourse(wtc_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 9 : %', time_; + +UPDATE pghydro.pghft_watercourse a +SET wtc_tdm_pk = 1 +FROM +( +SELECT drn_wtc_pk +FROM pghydro.pghft_drainage_line +WHERE drn_tdm_pk = 1 +) as b +WHERE b.drn_wtc_pk = a.wtc_pk; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 10 : %', time_; + +UPDATE pghydro.pghft_drainage_line +SET drn_tdm_pk = 0 +WHERE drn_tdm_pk is null; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 11 : %', time_; + +UPDATE pghydro.pghft_watercourse +SET wtc_tdm_pk = 0 +WHERE wtc_tdm_pk is null; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 12 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 13 : %', time_; + +CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 14 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 15 : %', time_; + +CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 16 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 17 : %', time_; + +CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 18 : %', time_; + +UPDATE pghydro.pghft_drainage_line drn +SET drn_tdm_pk = 3 +FROM +( +SELECT ssp_drn_pk as drn_pk +FROM pghydro.pghft_shoreline_starting_point +UNION +SELECT pghydro.pghfn_downstream_drainagelines(drn_pk) as drn_pk +FROM +( +SELECT ssp_drn_pk as drn_pk +FROM pghydro.pghft_shoreline_starting_point +) as a +) as a +WHERE a.drn_pk = drn.drn_pk; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 19 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 20 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 21 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 22 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_wtc_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 23 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_tdm_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 24 : %', time_; + +DROP INDEX IF EXISTS pghydro.wtc_pk_idx; + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + + + +END; +$$ +LANGUAGE PLPGSQL; + + +------------------------------------------------------------------ +--FUNCTION pghydro.pghfn_downstream_drainageline_strahler(integer) +------------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pghydro.pghfn_downstream_drainageline_strahler(integer) +RETURNS SETOF integer AS +$$ + +BEGIN + +RETURN QUERY + +SELECT drn_1 as drn_pk +FROM +( +SELECT pghydro.pghfn_downstreamdrainageline(hin_drn_pk) as drn_1, hin_drn_pk as drn_2, pghydro.pghfn_upstreamdrainageline(hin_drn_pk) as drn_3 +FROM pghydro.pghft_hydro_intel +WHERE hin_strahler = $1 +ORDER BY drn_1 +) as a +GROUP BY drn_1 +HAVING count(drn_1) > 1; + +RETURN; + +END; +$$ +LANGUAGE PLPGSQL; + + +------------------------------------------------------------------ +--FUNCTION pghydro.pghfn_calculatestrahlernumber() +------------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pghydro.pghfn_calculatestrahlernumber() +RETURNS varchar AS +$$ + +DECLARE + +time_ timestamp; +i INTEGER; +j INTEGER; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1: %', time_; + +UPDATE pghydro.pghft_hydro_intel hin +SET hin_strahler = null; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2: %', time_; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); + +DROP INDEX IF EXISTS pghydro.drp_nu_valence_idx; + +CREATE INDEX drp_nu_valence_idx ON pghydro.pghft_drainage_point(drp_nu_valence); + +DROP INDEX IF EXISTS pghydro.drp_pk_idx; + +CREATE INDEX drp_pk_idx ON pghydro.pghft_drainage_point(drp_pk); + +DROP INDEX IF EXISTS pghydro.hin_drn_pk_idx; + +CREATE INDEX hin_drn_pk_idx ON pghydro.pghft_hydro_intel(hin_drn_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3: %', time_; + +UPDATE pghydro.pghft_hydro_intel hin +SET hin_strahler = 1 +FROM +( +SELECT drn_pk +FROM +( +SELECT drn.drn_pk +FROM pghydro.pghft_drainage_line drn, pghydro.pghft_drainage_point drp +WHERE drp.drp_nu_valence = 1 +AND drp.drp_pk = drn.drn_drp_pk_sourcenode +) as a +WHERE drn_pk NOT IN +( +SELECT ssp_drn_pk as drn_pk +FROM pghydro.pghft_shoreline_starting_point +) +) as a +WHERE hin.hin_drn_pk = a.drn_pk; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4: %', time_; + +i = 1; + +LOOP + +DROP INDEX IF EXISTS pghydro.hin_strahler_idx; + +CREATE INDEX hin_strahler_idx ON pghydro.pghft_hydro_intel(hin_strahler); + +SELECT INTO j count(drn_pk) +FROM +( +SELECT pghydro.pghfn_downstream_drainageline_strahler(i) as drn_pk +) as a; + +RAISE NOTICE 'STRAHLER NUMBER/OCORRENCES %/% IN %', i, j, time_; + +EXIT WHEN j < 1; + +UPDATE pghydro.pghft_hydro_intel hin +SET hin_strahler = i+1 +FROM +( +SELECT pghydro.pghfn_downstream_drainageline_strahler(i) as drn_pk +UNION +SELECT DISTINCT pghydro.pghfn_downstreamdrainagelines(drn_pk) as drn_pk +FROM +( +SELECT pghydro.pghfn_downstream_drainageline_strahler(i) as drn_pk +) as a +) as a +WHERE hin.hin_drn_pk = a.drn_pk; + +i = i+1; + +END LOOP; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5: %', time_; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +DROP INDEX IF EXISTS pghydro.drp_nu_valence_idx; + +DROP INDEX IF EXISTS pghydro.drp_pk_idx; + +DROP INDEX IF EXISTS pghydro.hin_drn_pk_idx; + +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +RETURN 'OK'; + +END; +$$ +LANGUAGE PLPGSQL; + +--------------------------------------------------------------------------------------------------------------------------- +--FUNCTION pghydro.pghfn_VariableToSea(id integer, variable_table varchar, variable_fk varchar, variable_attribute varchar) +--------------------------------------------------------------------------------------------------------------------------- + +--DROP FUNCTION pghydro.pghfn_VariableToSea(id integer, variable_table varchar, variable_fk varchar, variable_attribute varchar) + +CREATE OR REPLACE FUNCTION pghydro.pghfn_VariableToSea(id integer, variable_table varchar, variable_fk varchar, variable_attribute varchar) +RETURNS numeric +AS $$ + +DECLARE +variable numeric; + +BEGIN + +EXECUTE ' +SELECT COALESCE(sum(c.'||variable_attribute||'),0) +FROM +( + +SELECT a.drn_pk, vat.'||variable_attribute||'::numeric +FROM +( +SELECT pghydro.pghfn_downstreamDrainageLines('||id||') as drn_pk +) as a, '||variable_table||' vat +WHERE a.drn_pk = vat.'||variable_fk||' + +) as c; +' INTO variable; + +RETURN variable; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pghydro.pghfn_VariableToSea(251994, 'pghydro.pghft_sparrow', 'spr_drn_pk', 'spr_nu_tp_eq14'); + +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +--FUNCTION pghydro.pghfn_CalculateVariableToSea(offset_value numeric, variable_table varchar, variable_fk varchar, variable_attribute varchar, final_variable_attribute varchar) +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION pghydro.pghfn_CalculateVariableToSea(offset_value numeric, variable_table varchar, variable_fk varchar, variable_attribute varchar, final_variable_attribute varchar) +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; +var1 integer; +i integer; +j integer; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +j := max(drn_pk) FROM pghydro.pghft_drainage_line; + +FOR i IN 1..j LOOP + +EXECUTE ' + +UPDATE '||variable_table||' vat +SET '||final_variable_attribute||' = pghydro.pghfn_VariableToSea('||i||', '''||variable_table||''', '''||variable_fk||''', '''||variable_attribute||''') + '||offset_value||' +FROM pghydro.pghft_drainage_line drn +WHERE drn.drn_pk = '||i||' +AND vat.'||variable_fk||' = '||i||'; + +'; + +RAISE NOTICE '%/%', i, j; + +END LOOP; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +SELECT INTO var1 ssp_drn_pk FROM pghydro.pghft_shoreline_starting_point; + +IF var1 >=0 THEN + +EXECUTE ' + +UPDATE '||variable_table||' vat +SET '||final_variable_attribute||' = null +FROM +( +SELECT pghydro.pghfn_downstream_drainagelines('||var1||') as drn_pk +UNION +SELECT '||var1||' as drn_pk +) as a +WHERE vat.'||variable_fk||' = a.drn_pk; + +'; + +END IF; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pghydro.pghfn_CalculateVariableToSea('pghydro.pghft_sparrow', 'spr_drn_pk', 'spr_nu_tp_eq14'); + +------------------------------------------------------------------------------------------------------------------------------- +--FUNCTION pghydro.pghfn_VariableUpstream(id integer, variable_table varchar, variable_fk varchar, variable_attribute varchar) +------------------------------------------------------------------------------------------------------------------------------- + +--DROP FUNCTION pghydro.pghfn_VariableUpstream(id integer, variable_table varchar, variable_fk varchar, variable_attribute varchar) + +CREATE OR REPLACE FUNCTION pghydro.pghfn_VariableUpstream(id integer, variable_table varchar, variable_fk varchar, variable_attribute varchar) +RETURNS numeric +AS $$ + +DECLARE +variable numeric; + +BEGIN + +EXECUTE ' +SELECT COALESCE(sum(c.'||variable_attribute||'),0) +FROM +( +SELECT a.drn_pk, vat.'||variable_attribute||'::numeric +FROM +( +SELECT pghydro.pghfn_upstreamDrainageLines('||id||') as drn_pk +) as a, '||variable_table||' vat +WHERE a.drn_pk = vat.'||variable_fk||' +) as c; +' INTO variable; + +RETURN variable; + +END; +$$ +LANGUAGE PLPGSQL; + +--SELECT pghydro.pghfn_VariableUpstream(5, 'pghydro.pghft_drainage_line', 'drn_pk', 'drn_gm_length'); + +------------------------------------------------------------------------------------------------------------------------------------ +--FUNCTION pghydro.pghfn_CalculateVariableUpstream(variable_table varchar, variable_fk varchar, variable_attribute varchar) +------------------------------------------------------------------------------------------------------------------------------------ + +CREATE OR REPLACE FUNCTION pghydro.pghfn_CalculateVariableUpstream(offset_value numeric, variable_table varchar, variable_fk varchar, variable_attribute varchar, final_variable_attribute varchar) +RETURNS character varying AS +$$ +DECLARE +time_ timestamp; +var1 integer; +i integer; +j integer; + +BEGIN + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS IN : %', time_; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 1 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 2 : %', time_; + +CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 3 : %', time_; + +CREATE INDEX drn_drp_pk_sourcenode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_sourcenode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 4 : %', time_; + +CREATE INDEX drn_drp_pk_targetnode_idx ON pghydro.pghft_drainage_line(drn_drp_pk_targetnode); + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 5 : %', time_; + +j := max(drn_pk) FROM pghydro.pghft_drainage_line; + +FOR i IN 1..j LOOP + +EXECUTE ' + +UPDATE '||variable_table||' vat +SET '||final_variable_attribute||' = pghydro.pghfn_VariableUpstream('||i||', '''||variable_table||''', '''||variable_fk||''', '''||variable_attribute||''') + '||offset_value||' +FROM pghydro.pghft_drainage_line drn +WHERE drn.drn_pk = '||i||' +AND vat.'||variable_fk||' = '||i||'; + +'; + +RAISE NOTICE '%/%', i, j; + +END LOOP; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 6 : %', time_; + +SELECT INTO var1 ssp_drn_pk FROM pghydro.pghft_shoreline_starting_point; + +IF var1 >=0 THEN + +EXECUTE ' + +UPDATE '||variable_table||' vat +SET '||final_variable_attribute||' = '||variable_attribute||' +FROM +( +SELECT pghydro.pghfn_downstream_drainagelines('||var1||') as drn_pk +UNION +SELECT '||var1||' as drn_pk +) as a +WHERE vat.'||variable_fk||' = a.drn_pk; + +'; + +END IF; + +time_ := timeofday(); +RAISE NOTICE 'BEGIN OF PROCESS 7 : %', time_; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_sourcenode_idx; + +DROP INDEX IF EXISTS pghydro.drn_drp_pk_targetnode_idx; + +DROP INDEX IF EXISTS pghydro.drn_pk_idx; + +RETURN 'OK'; + +time_ := timeofday(); +RAISE NOTICE 'END OF PROCESS IN : %', time_; + +END; +$$ +LANGUAGE PLPGSQL; + --SELECT pghydro.pghfn_CalculateVariableUpstream('pghydro.pghft_drainage_area', 'dra_drn_pk', 'dra_gm_area'); \ No newline at end of file diff --git a/pghydro--6.2_README.txt b/pghydro--6.2_README.txt new file mode 100644 index 0000000..2a25773 --- /dev/null +++ b/pghydro--6.2_README.txt @@ -0,0 +1,5 @@ +INSTALLATION (v.6.2) + +1 - Download the last pghydro stable release file Source code (zip) from the site https://github.com/pghydro/pghydro/releases + +2 - Unzip, copy and paste *.sql and *.control files to \PostgreSQL\x.x\share\extension \ No newline at end of file diff --git a/pghydro--6.0_tutorial.sql b/pghydro--6.2_tutorial.sql similarity index 98% rename from pghydro--6.0_tutorial.sql rename to pghydro--6.2_tutorial.sql index 811571e..be2d872 100644 --- a/pghydro--6.0_tutorial.sql +++ b/pghydro--6.2_tutorial.sql @@ -19,12 +19,15 @@ --Postgresql version 9.1+ --PostGIS version 2.0+ ---PgHydro version 6.0.1 +--PgHydro version 6.2 ---Download the files *.sql and *.control in https://github.com/pghydro/pghydro/tree/master and copy the content to \PostgreSQL\x.x\share\extension +--INSTALLATION + +--1 - Download the last pghydro stable release file Source code (zip) from the site https://github.com/pghydro/pghydro/releases +--2 - Unzip, copy and paste *.sql and *.control files to \PostgreSQL\x.x\share\extension --------------------------------------------------------------------------------- ---PgHYDRO Tutorial version 6.0.1 of xx/xx/xxxx +--PgHYDRO Tutorial version 6.2 of 17/01/2018 --------------------------------------------------------------------------------- --============================================= diff --git a/pghydro.control b/pghydro.control index 6c9e4d5..b8d6173 100644 --- a/pghydro.control +++ b/pghydro.control @@ -1,6 +1,6 @@ # pghydro extension comment = 'pghydro extension' -default_version = '6.0' +default_version = '6.2' encoding = 'latin1' requires = 'plpgsql' requires = 'postgis' \ No newline at end of file