From 8a9a5e9f791ba8789e6142c483ece0f94977d806 Mon Sep 17 00:00:00 2001 From: Just van den Broecke Date: Tue, 18 Jan 2022 15:15:59 +0100 Subject: [PATCH] #345 add BGT SQL from Willem for reference - not used in ETL --- bgt/etl/sql/create-actueelbestaand-tables.sql | 33 ++++++++ bgt/etl/sql/create-vlakken-table.sql | 84 +++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 bgt/etl/sql/create-actueelbestaand-tables.sql create mode 100644 bgt/etl/sql/create-vlakken-table.sql diff --git a/bgt/etl/sql/create-actueelbestaand-tables.sql b/bgt/etl/sql/create-actueelbestaand-tables.sql new file mode 100644 index 00000000..84d44a31 --- /dev/null +++ b/bgt/etl/sql/create-actueelbestaand-tables.sql @@ -0,0 +1,33 @@ +-- Bijdrage van Willem Hoffmans - 18 jan 2022 +-- NB: Gaat ervan uit dat schema 'bgt' heet! + +-- Opschonen BGT (en BAG?) NLExtract dumps. +-- Alle historie eruit gooien, zodat je alleen actueelbestaand overhoudt +-- Alle 'actueel' en 'actueelbestaand' views eruit gooien, die zijn dan overbodig. + +-- Dit werkt met een loopje vanuit de systeemtabellen, is een stuk efficiƫnter qua code. +DO LANGUAGE plpgsql +$$ +DECLARE + currenttabel record; + tabelnaam VARCHAR; +BEGIN + FOR currenttabel IN + SELECT c.relname AS tabel + FROM pg_namespace AS n JOIN pg_class AS c ON n.oid = c.relnamespace + WHERE n.nspname = 'bgt' and c.relkind = 'r' + ORDER BY tabel + LOOP + BEGIN + RAISE NOTICE 'Verwerken tabel %', currenttabel.tabel; + -- Historie leeghalen + EXECUTE FORMAT ('DELETE FROM bgt.%s WHERE NOT (eindregistratie IS NULL AND bgt_status::text = ''bestaand''::text AND plus_status::text <> ''plan''::text AND plus_status::text <> ''historie''::text);', currenttabel.tabel); + -- Views weggooien + EXECUTE FORMAT ('DROP VIEW IF EXISTS bgt.%sactueel CASCADE;DROP VIEW IF EXISTS bgt.%sactueelbestaand CASCADE;', currenttabel.tabel, currenttabel.tabel); + EXCEPTION + WHEN OTHERS THEN + RAISE NOTICE 'Foutje in tabel %', currenttabel.tabel; + END; + END LOOP; +END; +$$; diff --git a/bgt/etl/sql/create-vlakken-table.sql b/bgt/etl/sql/create-vlakken-table.sql new file mode 100644 index 00000000..dc0ca962 --- /dev/null +++ b/bgt/etl/sql/create-vlakken-table.sql @@ -0,0 +1,84 @@ +-- Bijdrage van Willem Hoffmans - 18 jan 2022 +-- Maak landsdekkende vlakken tabel uit alle BGT tabellen + +-- landsdekkend vlakkenbestand maken +DROP TABLE IF EXISTS bgtvlakken CASCADE; +CREATE TABLE bgtvlakken +(gid SERIAL PRIMARY KEY, +laagnaam VARCHAR, +lokaalid VARCHAR, +relatievehoogteligging INTEGER, +bgt_functie VARCHAR, +plus_functie VARCHAR, +bgt_fysiekvoorkomen VARCHAR, +plus_fysiekvoorkomen VARCHAR, +bgt_type VARCHAR, +plus_type VARCHAR, +geom geometry (MultiSurface, 28992) +); + + +TRUNCATE TABLE bgtvlakken; +INSERT INTO bgtvlakken (laagnaam, lokaalid, relatievehoogteligging, bgt_fysiekvoorkomen, plus_fysiekvoorkomen, geom) +SELECT 'begroeidterreindeel', lokaalid, relatievehoogteligging, bgt_fysiekvoorkomen, plus_fysiekvoorkomen, ST_Multi(geometrie_vlak) +FROM begroeidterreindeel AS l1 WHERE geometrie_vlak IS NOT NULL; +INSERT INTO bgtvlakken (laagnaam, lokaalid, relatievehoogteligging, bgt_type, plus_type, geom) +SELECT 'gebouwinstallatie', lokaalid, relatievehoogteligging, bgt_type, plus_type, ST_Multi(geometrie_vlak) +FROM gebouwinstallatie AS l1 WHERE geometrie_vlak IS NOT NULL; +-- Kunstwerkdeel: enkele en multi geom's +INSERT INTO bgtvlakken (laagnaam, lokaalid, relatievehoogteligging, bgt_type, plus_type, geom) +SELECT 'kunstwerkdeel', lokaalid, relatievehoogteligging, bgt_type, plus_type, ST_Multi(geometrie_vlak) +FROM kunstwerkdeel AS l1 WHERE geometrie_vlak IS NOT NULL; +INSERT INTO bgtvlakken (laagnaam, lokaalid, relatievehoogteligging, bgt_type, plus_type, geom) +SELECT 'kunstwerkdeel', lokaalid, relatievehoogteligging, bgt_type, plus_type, geometrie_multivlak +FROM kunstwerkdeel AS l1 WHERE geometrie_multivlak IS NOT NULL; +INSERT INTO bgtvlakken (laagnaam, lokaalid, relatievehoogteligging, bgt_fysiekvoorkomen, plus_fysiekvoorkomen, geom) +SELECT 'onbegroeidterreindeel', lokaalid, relatievehoogteligging, bgt_fysiekvoorkomen, plus_fysiekvoorkomen, ST_Multi(geometrie_vlak) +FROM onbegroeidterreindeel AS l1 WHERE geometrie_vlak IS NOT NULL; +INSERT INTO bgtvlakken (laagnaam, lokaalid, relatievehoogteligging, bgt_type, plus_type, geom) +SELECT 'ondersteunendwaterdeel', lokaalid, relatievehoogteligging, bgt_type, plus_type, ST_Multi(geometrie_vlak) +FROM ondersteunendwaterdeel AS l1 WHERE geometrie_vlak IS NOT NULL; +INSERT INTO bgtvlakken (laagnaam, lokaalid, relatievehoogteligging, bgt_functie, plus_functie, bgt_fysiekvoorkomen, plus_fysiekvoorkomen, geom) +SELECT 'ondersteunendwegdeel', lokaalid, relatievehoogteligging, bgt_functie, plus_functie, bgt_fysiekvoorkomen, plus_fysiekvoorkomen, ST_Multi(geometrie_vlak) +FROM ondersteunendwegdeel AS l1 WHERE geometrie_vlak IS NOT NULL; +INSERT INTO bgtvlakken (laagnaam, lokaalid, relatievehoogteligging, geom) +SELECT 'ongeclassificeerdobject', lokaalid, relatievehoogteligging, ST_Multi(geometrie_vlak) +FROM ongeclassificeerdobject AS l1 WHERE geometrie_vlak IS NOT NULL; +INSERT INTO bgtvlakken (laagnaam, lokaalid, relatievehoogteligging, geom) +SELECT 'openbareruimte', lokaalid, relatievehoogteligging, ST_Multi(geometrie_vlak) +FROM openbareruimte AS l1 WHERE geometrie_vlak IS NOT NULL; +INSERT INTO bgtvlakken (laagnaam, lokaalid, relatievehoogteligging, bgt_type, plus_type, geom) +SELECT 'overigbouwwerk', lokaalid, relatievehoogteligging, bgt_type, plus_type, ST_Multi(geometrie_vlak) +FROM overigbouwwerk AS l1 WHERE geometrie_vlak IS NOT NULL; +INSERT INTO bgtvlakken (laagnaam, lokaalid, relatievehoogteligging, plus_type, geom) +SELECT 'overigescheiding', lokaalid, relatievehoogteligging, plus_type, ST_Multi(geometrie_vlak) +FROM overigescheiding AS l1 WHERE geometrie_vlak IS NOT NULL; +INSERT INTO bgtvlakken (laagnaam, lokaalid, relatievehoogteligging, geom) +SELECT 'pand', lokaalid, relatievehoogteligging, ST_Multi(geometrie_vlak) +FROM pand AS l1 WHERE geometrie_vlak IS NOT NULL; +INSERT INTO bgtvlakken (laagnaam, lokaalid, relatievehoogteligging, bgt_type, plus_type, geom) +SELECT 'scheiding', lokaalid, relatievehoogteligging, bgt_type, plus_type, ST_Multi(geometrie_vlak) +FROM scheiding AS l1 WHERE geometrie_vlak IS NOT NULL; +INSERT INTO bgtvlakken (laagnaam, lokaalid, relatievehoogteligging, bgt_type, plus_type, geom) +SELECT 'vegetatieobject', lokaalid, relatievehoogteligging, bgt_type, plus_type, ST_Multi(geometrie_vlak) +FROM vegetatieobject AS l1 WHERE geometrie_vlak IS NOT NULL; +INSERT INTO bgtvlakken (laagnaam, lokaalid, relatievehoogteligging, bgt_type, plus_type, geom) +SELECT 'waterdeel', lokaalid, relatievehoogteligging, bgt_type, plus_type, ST_Multi(geometrie_vlak) +FROM waterdeel AS l1 WHERE geometrie_vlak IS NOT NULL; +INSERT INTO bgtvlakken (laagnaam, lokaalid, relatievehoogteligging, bgt_functie, plus_functie, bgt_fysiekvoorkomen, plus_fysiekvoorkomen, geom) +SELECT 'wegdeel', lokaalid, relatievehoogteligging, bgt_functie, plus_functie, bgt_fysiekvoorkomen, plus_fysiekvoorkomen, ST_Multi(geometrie_vlak) +FROM wegdeel AS l1 WHERE geometrie_vlak IS NOT NULL; +INSERT INTO bgtvlakken (laagnaam, lokaalid, relatievehoogteligging, bgt_type, plus_type, geom) +SELECT 'weginrichtingselement', lokaalid, relatievehoogteligging, bgt_type, plus_type, ST_Multi(geometrie_vlak) +FROM weginrichtingselement AS l1 WHERE geometrie_vlak IS NOT NULL; + +CREATE INDEX idx_bgtvlakken_geom ON bgtvlakken USING gist(geom); +CREATE INDEX idx_bgtvlakken_laagnaam ON bgtvlakken USING btree(laagnaam); +CREATE INDEX idx_bgtvlakken_lokaalid ON bgtvlakken USING btree(lokaalid); +CREATE INDEX idx_bgtvlakken_gid ON bgtvlakken USING btree(gid); +CREATE INDEX idx_bgtvlakken_relatievehoogteligging ON bgtvlakken USING btree(relatievehoogteligging); + +-- Afgeleide views, o.a. hoogteligging = 0 +CREATE OR REPLACE VIEW bgtvlakken_hoogte0 AS +SELECT * FROM bgtvlakken WHERE relatievehoogteligging = 0; +