Skip to content

Commit

Permalink
Merge pull request #304 from nlextract/302-adres-from-adres-plus
Browse files Browse the repository at this point in the history
#302 adres en adres-full uit adres-plus afleiden met tests
  • Loading branch information
justb4 committed Feb 10, 2021
2 parents 3cb2da5 + 8714df7 commit 90ef64a
Show file tree
Hide file tree
Showing 10 changed files with 518 additions and 25 deletions.
53 changes: 52 additions & 1 deletion bag/db/script/adres-full2csv.sql
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,58 @@
-- dump is in /tmp omdat postgres absolute pad wil...daar is vast ook wel iets op te bedenken.
--
-- 18.okt.2015: forceer puntcomma als CSV veld-delimiter, zie https://github.com/nlextract/NLExtract/issues/147
\COPY (SELECT openbareruimtenaam as openbareruimte,huisnummer,huisletter,huisnummertoevoeging,postcode,woonplaatsnaam as woonplaats,gemeentenaam as gemeente,provincienaam as provincie,nummeraanduiding,verblijfsobjectgebruiksdoel,oppervlakteverblijfsobject,verblijfsobjectstatus,adresseerbaarobject as object_id,typeadresseerbaarobject as object_type,nevenadres,pandid,pandstatus,pandbouwjaar,ST_X(geopunt) as x,ST_Y(geopunt) as y,ST_X(ST_Transform(geopunt, 4326)) as lon,ST_Y(ST_Transform(geopunt, 4326)) as lat, verkorteopenbareruimtenaam as verkorteopenbareruimte FROM adres_full ORDER BY postcode,openbareruimtenaam,huisnummer,huisletter,huisnummertoevoeging) TO '/tmp/bagadres-full.csv' WITH CSV HEADER DELIMITER ';'
-- \COPY (SELECT openbareruimtenaam as openbareruimte,huisnummer,huisletter,huisnummertoevoeging,postcode,woonplaatsnaam as woonplaats,gemeentenaam as gemeente,provincienaam as provincie,nummeraanduiding,verblijfsobjectgebruiksdoel,oppervlakteverblijfsobject,verblijfsobjectstatus,adresseerbaarobject as object_id,typeadresseerbaarobject as object_type,nevenadres,pandid,pandstatus,pandbouwjaar,ST_X(geopunt) as x,ST_Y(geopunt) as y,ST_X(ST_Transform(geopunt, 4326)) as lon,ST_Y(ST_Transform(geopunt, 4326)) as lat, verkorteopenbareruimtenaam as verkorteopenbareruimte FROM adres_full ORDER BY postcode,openbareruimtenaam,huisnummer,huisletter,huisnummertoevoeging) TO '/tmp/bagadres-full.csv' WITH CSV HEADER DELIMITER ';'
-- adres_full tabel conversie naar CSV.

-- 10.feb2021: adres-full nu afgeleid van adres-plus:
-- oppervlakteadresseerbaarobject en adresseerbaarobjectstatus vervangen resp. oppervlakteverblijfsobject en verblijfsobjectstatus
\COPY (SELECT openbareruimtenaam as openbareruimte,huisnummer,huisletter,huisnummertoevoeging, postcode, woonplaatsnaam as woonplaats,gemeentenaam as gemeente,provincienaam as provincie,nummeraanduiding,verblijfsobjectgebruiksdoel,oppervlakteadresseerbaarobject,adresseerbaarobjectstatus as verblijfsobjectstatus,adresseerbaarobject as object_id,typeadresseerbaarobject as object_type,nevenadres,pandid,pandstatus,pandbouwjaar,ST_X(geopunt) as x,ST_Y(geopunt) as y,ST_X(ST_Transform(geopunt, 4326)) as lon,ST_Y(ST_Transform(geopunt, 4326)) as lat,verkorteopenbareruimtenaam as verkorteopenbareruimte FROM adres_full ORDER BY postcode,openbareruimtenaam,huisnummer,huisletter,huisnummertoevoeging) TO '/tmp/bagadres-full.csv' WITH CSV HEADER DELIMITER ';'

-- Varianten
-- Windows pad:
-- \COPY (SELECT openbareruimtenaam as openbareruimte,huisnummer...huisnummertoevoeging) TO 'C:\temp\bagadres.csv' WITH CSV HEADER DELIMITER ';'

-- Toevoegen aan einde regel om te exporteren in "Dutch_Netherlands.1252" formaat. (LC_CTYPE staat hier ook op!) Dit is handig omdat Excel niet standaard in UTF-8 formaat inleest.
-- ENCODING 'windows-1252'
-- \COPY (SELECT openbareruimtenaam as openbareruimte,huisnummer...huisnummertoevoeging) TO '/tmp/bagadres-full.csv' WITH CSV HEADER DELIMITER ';' ENCODING 'windows-1252'

-- Export Filteren op b.v. provincienaam:
-- Voeg tussen "FROM adres_full" en "ORDER BY" toe
-- WHERE provincienaam = 'Groningen'
-- \COPY (SELECT openbareruimtenaam as openbareruimte,huisnummer...as lat FROM adres_full WHERE provincienaam = 'Groningen' ORDER BY postcode,openbareruimtenaam,huisnummer,huisletter,huisnummertoevoeging) TO 'C:\temp\bagadres-Groningen.csv' WITH CSV HEADER DELIMITER ';'

-- ID velden aanvullen met voorloop nullen
-- lpad(pandid::text,16,'0')
-- \COPY (SELECT openbareruimtenaam as openbareruimte,huisnummer,huisletter,huisnummertoevoeging,postcode,woonplaatsnaam as woonplaats,gemeentenaam as gemeente,provincienaam as provincie,lpad(nummeraanduiding::text,16,'0'),verblijfsobjectgebruiksdoel,oppervlakteverblijfsobject,verblijfsobjectstatus,lpad(adresseerbaarobject::text,16,'0') as object_id,typeadresseerbaarobject as object_type,nevenadres,lpad(pandid::text,16,'0'),pandstatus,pandbouwjaar,ST_X(geopunt) as x,ST_Y(geopunt) as y,ST_X(ST_Transform(geopunt, 4326)) as lon,ST_Y(ST_Transform(geopunt, 4326)) as lat FROM adres_full ORDER BY postcode,openbareruimtenaam,huisnummer,huisletter,huisnummertoevoeging) TO 'C:\temp\bagadres.csv' WITH CSV HEADER DELIMITER ';'

-- Default nullen als veld leeg (LIG en STA)
-- lpad(coalesce(pandid::text,'0000000000000000'),16,'0')
-- \COPY (SELECT openbareruimtenaam as openbareruimte,huisnummer,huisletter,huisnummertoevoeging,postcode,woonplaatsnaam as woonplaats,gemeentenaam as gemeente,provincienaam as provincie,lpad(coalesce(nummeraanduiding::text,'0000000000000000'),16,'0'),verblijfsobjectgebruiksdoel,oppervlakteverblijfsobject,verblijfsobjectstatus,lpad(coalesce(adresseerbaarobject::text,'0000000000000000'),16,'0') as object_id,typeadresseerbaarobject as object_type,nevenadres,lpad(coalesce(pandid::text,'0000000000000000'),16,'0'),pandstatus,pandbouwjaar,ST_X(geopunt) as x,ST_Y(geopunt) as y,ST_X(ST_Transform(geopunt, 4326)) as lon,ST_Y(ST_Transform(geopunt, 4326)) as lat FROM adres_full ORDER BY postcode,openbareruimtenaam,huisnummer,huisletter,huisnummertoevoeging) TO 'C:\temp\bagadres.csv' WITH CSV HEADER DELIMITER ';'

-- Alles Gecombineerd:
-- \COPY (SELECT openbareruimtenaam as openbareruimte,huisnummer,huisletter,huisnummertoevoeging,postcode,woonplaatsnaam as woonplaats,gemeentenaam as gemeente,provincienaam as provincie,lpad(coalesce(nummeraanduiding::text,'0000000000000000'),16,'0'),verblijfsobjectgebruiksdoel,oppervlakteverblijfsobject,verblijfsobjectstatus,lpad(coalesce(adresseerbaarobject::text,'0000000000000000'),16,'0') as object_id,typeadresseerbaarobject as object_type,nevenadres,lpad(coalesce(pandid::text,'0000000000000000'),16,'0'),pandstatus,pandbouwjaar,ST_X(geopunt) as x,ST_Y(geopunt) as y,ST_X(ST_Transform(geopunt, 4326)) as lon,ST_Y(ST_Transform(geopunt, 4326)) as lat FROM adres_full WHERE provincienaam = 'Groningen' ORDER BY postcode,openbareruimtenaam,huisnummer,huisletter,huisnummertoevoeging) TO 'C:\temp\bagadres-Groningen.csv' WITH CSV HEADER DELIMITER ';' ENCODING 'windows-1252'

-- VBO Velden:
-- openbareruimtenaam
-- huisnummer
-- huisletter
-- huisnummertoevoeging
-- postcode
-- woonplaatsnaam
-- gemeentenaam
-- provincienaam
-- verblijfsobjectgebruiksdoel
-- oppervlakteverblijfsobject
-- verblijfsobjectstatus
-- typeadresseerbaarobject
-- adresseerbaarobject
-- (pand gegevens gerelateerd aan VBO)
-- pandid
-- pandstatus
-- pandbouwjaar
-- nummeraanduiding
-- nevenadres
-- geopunt (RD x,y)

-- Windows pad:
-- \COPY (SELECT openbareruimtenaam as openbareruimte,huisnummer,huisletter,huisnummertoevoeging,postcode,woonplaatsnaam as woonplaats,gemeentenaam as gemeente,provincienaam as provincie,nummeraanduiding,verblijfsobjectgebruiksdoel,oppervlakteverblijfsobject,verblijfsobjectstatus,adresseerbaarobject as object_id,typeadresseerbaarobject as object_type,nevenadres,pandid,pandstatus,pandbouwjaar,ST_X(geopunt) as x,ST_Y(geopunt) as y,ST_X(ST_Transform(geopunt, 4326)) as lon,ST_Y(ST_Transform(geopunt, 4326)) as lat FROM adres_full ORDER BY postcode,openbareruimtenaam,huisnummer,huisletter,huisnummertoevoeging) TO 'C:\temp\bagadres.csv' WITH CSV HEADER DELIMITER ';'
Expand Down
115 changes: 115 additions & 0 deletions bag/db/script/adres-plus2adres-full-tabel.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
--
-- Maakt en tabel "adres full" (Uitgebreid) aan met volledige adressen uit de adres_plus tabel
--
-- De BAG bevat geen echte adressen zoals bijv. ACN (Adres Coordinaten Nederland), dwz
-- een tabel met straat, huisnummer, woonplaats, gemeente, provincie etc.
-- De elementen voor een compleet adres zitten wel in de (verrijkte) BAG.
-- Via SQL scripts hieronder wordt een echte "adres_full" tabel aangemaakt en gevuld
-- uit adres_plus tabel.
--
-- Auteur: Just van den Broecke
--

-- huisnummer ,
-- huisletter character varying(1) COLLATE pg_catalog."default",
-- huisnummertoevoeging character varying(4) COLLATE pg_catalog."default",
-- postcode character varying(6) COLLATE pg_catalog."default",
-- woonplaatsnaam character varying(80) COLLATE pg_catalog."default",
-- gemeentenaam character varying(80) COLLATE pg_catalog."default",
-- provincienaam character varying(16) COLLATE pg_catalog."default",
-- verblijfsobjectgebruiksdoel character varying COLLATE pg_catalog."default",
-- oppervlakteverblijfsobject numeric(6,0) DEFAULT 0,
-- verblijfsobjectstatus character varying COLLATE pg_catalog."default",
-- typeadresseerbaarobject character varying(3) COLLATE pg_catalog."default",
-- adresseerbaarobject character varying(16) COLLATE pg_catalog."default",
-- pandid character varying(16) COLLATE pg_catalog."default",
-- pandstatus character varying COLLATE pg_catalog."default",
-- pandbouwjaar numeric(4,0),
-- nummeraanduiding character varying(16) COLLATE pg_catalog."default",
-- nevenadres boolean DEFAULT false,
-- geopunt geometry(PointZ,28992),
-- textsearchable_adres tsvector,
-- verkorteopenbareruimtenaam character varying(24) COLLATE pg_catalog."default" DEFAULT NULL::character varying,

DROP TABLE IF EXISTS adres_full CASCADE;
CREATE TABLE adres_full AS SELECT
cast(openbareruimtenaam AS character varying(80)),
cast(huisnummer AS numeric(5,0)),
cast(huisletter AS character varying(1)),
cast(huisnummertoevoeging AS character varying(4)),
cast(postcode AS character varying(6)),
cast(woonplaatsnaam AS character varying(80)),
cast(gemeentenaam AS character varying(80)),
cast(provincienaam AS character varying(16)),
-- https://stackoverflow.com/questions/33743900/concatenating-multiple-boolean-columns-to-single-varchar-column
concat_ws(',',
CASE
WHEN woonfunctie = 1 THEN 'woonfunctie'
END,
CASE
WHEN bijeenkomstfunctie = 1 THEN 'bijeenkomstfunctie'
END,
CASE
WHEN celfunctie = 1 THEN 'celfunctie'
END,
CASE
WHEN gezondheidszorgfunctie = 1 THEN 'gezondheidszorgfunctie'
END,
CASE
WHEN industriefunctie = 1 THEN 'industriefunctie'
END,
CASE
WHEN kantoorfunctie = 1 THEN 'kantoorfunctie'
END,
CASE
WHEN logiesfunctie = 1 THEN 'logiesfunctie'
END,
CASE
WHEN onderwijsfunctie = 1 THEN 'onderwijsfunctie'
END,
CASE
WHEN sportfunctie = 1 THEN 'sportfunctie'
END,
CASE
WHEN winkelfunctie = 1 THEN 'winkelfunctie'
END,
CASE
WHEN overige_gebruiksfunctie = 1 THEN 'overige gebruiksfunctie'
END)
AS verblijfsobjectgebruiksdoel,
cast(opp_adresseerbaarobject_m2 AS numeric(6,0)) AS oppervlakteadresseerbaarobject,
cast(adresseerbaarobject_status AS character varying) AS adresseerbaarobjectstatus,
cast(CASE
WHEN typeadresseerbaarobject = 'Verblijfsobject' THEN 'VBO'
WHEN typeadresseerbaarobject = 'Ligplaats' THEN 'LIG'
WHEN typeadresseerbaarobject = 'Standplaats' THEN 'STA'
ELSE ''
END AS character varying(3)) AS typeadresseerbaarobject,
cast(adresseerbaarobject_id AS character varying(16)) AS adresseerbaarobject,
cast(pand_id AS character varying(16)) AS pandid,
cast(pandstatus AS character varying),
cast(bouwjaar AS numeric(4,0)) AS pandbouwjaar,
cast(nummeraanduiding_id AS character varying(16)) AS nummeraanduiding,
cast(nevenadres AS BOOLEAN),
cast(geopunt AS geometry(PointZ, 28992)),
cast(verkorteopenbareruimtenaam AS character varying(24))
FROM adres_plus ORDER BY openbareruimtenaam,huisnummer,huisletter,huisnummertoevoeging,woonplaatsnaam;

-- Vul de text vector kolom voor full text search
ALTER TABLE adres_full ADD COLUMN textsearchable_adres tsvector;
-- Vul de text vector kolom voor full text search
UPDATE adres_full set textsearchable_adres = to_tsvector(openbareruimtenaam||' '||huisnummer||' '||trim(coalesce(huisletter,'')||' '||coalesce(huisnummertoevoeging,''))||' '||woonplaatsnaam);

ALTER TABLE adres_full ADD COLUMN gid SERIAL PRIMARY KEY;

-- Maak indexen aan na inserten
DROP INDEX IF EXISTS adres_full_geom_idx CASCADE;
DROP INDEX IF EXISTS adres_full_adresseerbaarobject CASCADE;
DROP INDEX IF EXISTS adres_full_nummeraanduiding CASCADE;
DROP INDEX IF EXISTS adres_full_pandid CASCADE;
DROP INDEX IF EXISTS adres_full_idx CASCADE;
CREATE INDEX adres_full_geom_idx ON adres_full USING gist (geopunt);
CREATE INDEX adres_full_adresseerbaarobject ON adres_full USING btree (adresseerbaarobject);
CREATE INDEX adres_full_nummeraanduiding ON adres_full USING btree (nummeraanduiding);
CREATE INDEX adres_full_pandid ON adres_full USING btree (pandid);
CREATE INDEX adres_full_idx ON adres_full USING gin (textsearchable_adres);
62 changes: 62 additions & 0 deletions bag/db/script/adres-plus2adres-tabel.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
--
-- Maakt en tabel "adres" aan met volledige adressen uit de adres_plus tabel
--
-- De BAG bevat geen echte adressen zoals bijv. ACN (Adres Coordinaten Nederland), dwz
-- een tabel met straat, huisnummer, woonplaats, gemeente, provincie etc.
-- De elementen voor een compleet adres zitten wel in de (verrijkte) BAG.
-- Via SQL scripts hieronder wordt een echte "adres" tabel aangemaakt en gevuld
-- uit adres_plus tabel.
--
-- Auteur: Just van den Broecke
--

DROP TABLE IF EXISTS adres CASCADE;
CREATE TABLE adres AS SELECT
cast(openbareruimtenaam AS character varying(80)),
cast(huisnummer AS numeric(5,0)),
cast(huisletter AS character varying(1)),
cast(huisnummertoevoeging AS character varying(4)),
cast(postcode AS character varying(6)),
cast(woonplaatsnaam AS character varying(80)),
cast(gemeentenaam AS character varying(80)),
cast(provincienaam AS character varying(16)),
cast(CASE
WHEN typeadresseerbaarobject = 'Verblijfsobject' THEN 'VBO'
WHEN typeadresseerbaarobject = 'Ligplaats' THEN 'LIG'
WHEN typeadresseerbaarobject = 'Standplaats' THEN 'STA'
ELSE ''
END AS character varying(3)) AS typeadresseerbaarobject,
cast(adresseerbaarobject_id AS character varying(16)) AS adresseerbaarobject,
cast(nummeraanduiding_id AS character varying(16)) AS nummeraanduiding,
cast (nevenadres as BOOLEAN),
cast(geopunt AS geometry(PointZ, 28992))
FROM adres_plus ORDER BY openbareruimtenaam,huisnummer,huisletter,huisnummertoevoeging,woonplaatsnaam;;

-- Vul de text vector kolom voor full text search
ALTER TABLE adres ADD COLUMN textsearchable_adres tsvector;
UPDATE adres set textsearchable_adres = to_tsvector(openbareruimtenaam||' '||huisnummer||' '||trim(coalesce(huisletter,'')||' '||coalesce(huisnummertoevoeging,''))||' '||woonplaatsnaam);

-- Maak indexen aan na inserten (betere performance)
ALTER TABLE adres ADD COLUMN gid SERIAL PRIMARY KEY;

DROP INDEX IF EXISTS adres_geom_idx CASCADE;
DROP INDEX IF EXISTS adres_adresseerbaarobject CASCADE;
DROP INDEX IF EXISTS adres_nummeraanduiding CASCADE;
DROP INDEX IF EXISTS adresvol_idx CASCADE;

CREATE INDEX adres_geom_idx ON adres USING gist (geopunt);
CREATE INDEX adres_adresseerbaarobject ON adres USING btree (adresseerbaarobject);
CREATE INDEX adres_nummeraanduiding ON adres USING btree (nummeraanduiding);
CREATE INDEX adresvol_idx ON adres USING gin (textsearchable_adres);

-- OUD - niet meer nodig
-- Populeert public.geometry_columns
-- Dummy voor PostGIS 2+
-- SELECT public.probe_geometry_columns();

-- DROP SEQUENCE IF EXISTS adres_gid_seq;
-- CREATE SEQUENCE adres_gid_seq;
-- ALTER TABLE adres ADD gid integer UNIQUE;
-- ALTER TABLE adres ALTER COLUMN gid SET DEFAULT NEXTVAL('adres_gid_seq');
-- UPDATE adres SET gid = NEXTVAL('adres_gid_seq');
-- ALTER TABLE adres ADD PRIMARY KEY (gid);
1 change: 1 addition & 0 deletions bag/db/script/adres-tabel-full.sql
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
-- Auteur: Just van den Broecke
-- Aanvullingen: Michel de Groot
--
-- OBSOLETE: we gebruiken nu adres-plus2adres-tabel.sql

-- Maak een "echte" adressen tabel
DROP TABLE IF EXISTS adres_full CASCADE;
Expand Down
1 change: 1 addition & 0 deletions bag/db/script/adres-tabel.sql
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
--
-- Auteur: Just van den Broecke
--
-- OBSOLETE: we gebruiken nu adres-plus2adres-tabel.sql

-- Maak een "echte" adressen tabel
DROP TABLE IF EXISTS adres CASCADE;
Expand Down

0 comments on commit 90ef64a

Please sign in to comment.