BAG-V2 Extract

Hieronder de handleiding voor het gebruik van de tools voor BAG versie 2 (dus VERSIE 2 van de Kadaster BAG brondata) verwerking. Deze tooling heet hieronder NLExtract-BAGv2.

Achtergrond

Het Kadaster heeft ongeveer in de periode 2015-2020 versie 2 van de BAG ontwikkeld. D.w.z. een tweede versie voor de structuur van de BAG, gevat in het IMBAG model en uiteindelijk in de XML Schema’s (XSDs) en leveringen zoals LV BAG Extract, de BAG XML brondata. BAG v2 is al enige tijd verkrijgbaar.

Voor NLExtract zijn de belangrijkste wijzigingen van BAG v1 naar v2:

  • uitbreiden van het aantal tekens voor het brondocumentnummer van 24 naar 40;
  • 2 nieuwe statussen van Panden en Verblijfsobjecten: verbouwing en ten onrechte opgevoerd
  • drie nieuwe typen tijdstippen: tijdstipRegistratie, eindRegistratie en LV-registratiedatum.

In 2021 wordt versie 2 definitief uitgerold en wordt versie 1 uitgefaseerd. De details zijn op dit moment (maart 2021):

  • BAG v1: wordt tot en met maart 2021 geleverd, met handmatige controle, voor enkele problemen
  • BAG v1: april-sept 2021 ook maar zonder controle, wel verwacht 99.9% correct
  • BAG v2: per 1 okt 2021 defnitief, dan BAG v1 uitgefaseerd
  • BAG Compact product levering stopt ook met BAG v2

Op dit moment is de versie IMBAGLV 2.1.0 met XSDs van datum: 1 juni 2020 (202020601).

Dankzij een sponsoring van de OpenGeoGroep, kon vanaf dec 2020 begonnen worden met de ontwikkeling van NLExtract voor BAG v2. Op 6 maart 2021 is voor het eerst de gehele LV BAG verwerkt in PostGIS. Hoofdontwikkelaar was/is Just van den Broecke.

Handleiding NLExtract-BAGv2

NLExtract-BAGv2 is onderdeel van de NLExtract tools voor het inlezen en verrijken van Kadaster BAG (Basisregistratie Adressen en Gebouwen) product “BAG Extract” (versie 2) leveringen in (voorlopig) een PostgreSQL/Postgis database.

BAG Bronbestanden downloaden

De BAG bronbestanden zoals geleverd door Kadaster heten het “BAG Extract” product. Er was ook bijv BAG Compact, maar deze wordt niet meer voor BAG v2 geleverd.

BAG PostGIS dumps downloaden

Als je geen zin/tijd hebt om NLExtract-BAG zelf te installeren en te draaien, dan kun je ook kant-en-klare PostGIS database en CSV adressen dumps downloaden via https://geotoko.nl.

Vanaf april 2021 zullen via geotoko.nl ook BAG v2 producten geleverd worden. Beide versies (BAG v1 en v2) zullen van 1 april t/m 30 sept 2021 naast elkaar bestaan. Ook zal een BAG Compact-equivalent product beschikbaar komen voor BAG versie 2.

Deze worden maandelijks ververst direct na uitkomen nieuwe BAG-levering. Er wordt leveringsbijdrage gevraagd. De baten komen ook weer ten goede aan de ontwikkeling van Stetl en NLExtract.

Wat doet NLExtract-BAGv2?

NLExtract-BAGv2 biedt de volgende functionaliteiten:

  • Laden van een Kadaster BAG Extract levering vanuit Kadaster (.zip GML)
  • Verrijken BAG met gemeenten en provincies
  • Database VIEWs om bagobjecten te selecteren die actueel, of actueel en bestaand zijn

Nog te doen (12 maart 2021):

  • Verrijken: tabel met volledige “ACN-achtige” adressen genereren in 3 varianten: Basis, Uitgebreid en Plus
  • Checkpointing: bijhouden welke bestanden reeds verwerkt t.b.v. herstarts en mutatie-verwerking
  • Logging in database zodat gechecked kan worden waar evt fouten zijn en welke bestanden verwerkt
  • Toepassen van Kadaster BAG mutaties vanuit Kadaster (.zip GML) levering

BAG-Extract downloaden

Afhankelijkheden

Installatie (Linux)

Nog te doen.

Installatie (Windows)

Nog te doen.

Installatie (Mac OSX)

Beste via Homebrew, nog te doen.

Commando

  • etl.sh <opties> - opties via standaard Stetl -a <optie of args-bestand>.

Instellingen

  • onder etl/options

Ontwerp

De implementatie van NLExtract-BAGv2 is radikaal anders dan v1: er wordt gebruikt gemaakt van Stetl net als de overige NLExtract Basisregistratie verwerkingen.

NOG AAN TE VULLEN - samengevat:

# Stetl-Process-chains for extracting BAG VERSION 2 source data from input zip files to PostGIS.
# A Chain is a series of Components: one Input, zero or more Filters and one Output.
# The output of a Component is connected to the input of the next Component (except for
# the final Output Component, which writes to the final destination, e.g. PostGIS or GeoPackage..
# Stetl is the ETL tool used. No custom Python code is needed!
#
# Currently the following chains are executed in the following order:
# - SQL pre:  DB initialization, create schema and tables
# - Process "Leveringsdoc" put meta info like dataset date in nlx_bag_info table
# - Process CBS gemeente provincie koppelingen
# - BAG Woonplaats-Gemeente Koppeling (onderdeel van BAG Extract Kadaster product)
# - input_bag_zip_file: inlezen BAG in PostGIS met LVBAG Driver
# - input_sql_post: post-processing o.a. aanmaken indexen en VIEWs

Het basis Postgres Database schema is hieronder weergegeven.

basis DB schema

VIEWs en adres-tabellen worden hiervan afegeleid, aangevuld met CBS data. De multipliciteit van de tabel-relaties reflecteert die van het (IM)BAG model:

  • een VBO hoort bij 1 of meer PND (bijna altijd 1)
  • een Adresseerbaarobject (NUM, STA, LIG) heeft 1 Hoofdadres (NUM) en 0 of meer Nevenadressen (NUM)
  • NUM verwijst naar 1 OPR
  • OPR verwijst naar 1 WPL
  • NUM kan ook direct naar WPL verwijzen (bijv. straat doorlopend in andere WPL)

GDAL LVBAG Driver

Deze wordt gebruikt voor verwerking BAG object XML bestanden. In Stetl kan daardoor de ogr2ogr gebaseerde Stetl-Output gebruikt worden.

BAG v1 Compatibiliteit

Omdat veel implementaties al jaren gestoeld zijn op BAG v1 en de daarbij behorende attribuut/kolom namen, is besloten om zoveel mogelijk de NLExtract-BAG versie 1 structuur en naamgeving aan te houden.

  • tussentabellen (VBO-PND N-M relatie) en multivalue tabellen (VBO Gebruiksdoelen, Nevenadressen) zijn behouden.
  • NB: wel met ook de nieuwe ARRAY typen (zie onder) zijn veel handiger queries te maken
  • hernoemen: begin/eindgeldigheid (v2) –> begin/einddatumtijdvakgeldigheid
  • afleiden: aanduidingRecordInactief (zie onder) t.b.v. “actueel” in o.a. VIEWs
  • alle status namen en typen
  • idem voor naam (WPL en OPR)
  • alle geometrie-kolommen 2D (was gedeeltelijk 3D in v1), maar in feite is 3D overbodig (altijd 0.0)

Nieuwe status-waarden VBO en PND:

  • Pand: ‘Verbouwing pand’,’Pand ten onrechte opgevoerd’
  • VBO: ‘Verbouwing verblijfsobject’,’Verblijfsobject ten onrechte opgevoerd’

Array Typen

Sommige kolommen in BAG zijn “multi-valued”. Voor BAG v2 is voor Array typen (OGR StringList) gekozen i.p.v. tussentabellen uit NLExtract-BAG v1.

De velden zijn:

  • VBO, LIG, STA: nevenadressen
  • VBO: panden (VBO behoort tot 1 of meerdere PND)
  • VBO: een of meer gebruiksdoelen

Daardoor kunnen gemakkelijker allerlei selecties gedaan worden (ipv tussentabellen of (sub)String matching):

# Selecteer 1e gebruiksdoel en pand identificaties (arrays in PG beginnen op index 1)
select identificatie,gebruiksdoel[1],pandref[1] from doesburg.verblijfsobject limit 10

 identificatie   | gebruiksdoel |     pandref
------------------+--------------+------------------
0221010000330136 | woonfunctie  | 0221100000316077
0221010000330136 | woonfunctie  | 0221100000316077
0221010000330138 | woonfunctie  | 0221100000316082
0221010000330138 | woonfunctie  | 0221100000316082
0221010000330140 | woonfunctie  | 0221100000316086
0221010000330142 | woonfunctie  | 0221100000316090
0221010000330142 | woonfunctie  | 0221100000316090
0221010000330144 | woonfunctie  | 0221100000316096
0221010000330144 | woonfunctie  | 0221100000316096
0221010000330146 | woonfunctie  | 0221100000316101

# Hoeveel VBOs hebben Nevenadressen?
select count(gid) from doesburg.verblijfsobject where array_length(nevenadresnummeraanduidingref,1) > 0

# Hoeveel VBOs zijn gekoppeld aan meer dan 1 PND?
select count(gid) from doesburg.verblijfsobject where array_length(pandref,1) > 1


# Hoeveel VBOs hebben meer dan 1 gebruiksdoel?
select count(gid) from doesburg.verblijfsobject where array_length(gebruiksdoel,1) > 1

Veranderingen Kadaster BAG Levering v2

Voorkomen en Historie

Bronnen:

actueel

Formeel op grond bovenstaande is in BAG v2 de “actuele” conditie:

begingeldigheid <= now()
AND (eindgeldigheid is NULL OR eindgeldigheid > now())
AND (tijdstipinactief is NULL AND tijdstipinactiefLV is NULL AND tijdstipnietbaglv is NULL)

De laatste 3 worden in NLExtract vervat in aanduidingrecordinactief kolom.

bestaand

Extra status enum waarden:

  • Pand: ‘Verbouwing pand’,’Pand ten onrechte opgevoerd’
  • VBO: ‘Verbouwing verblijfsobject’,’Verblijfsobject ten onrechte opgevoerd’

aanduidingrecordcorrectie

P Dijkstra: “De aanduidingrecordcorrectie bestaat niet meer. De aanduiding correctie is groter dan 0 als een object in BAG 1.0 de indicatie inactief ‘J’ kreeg. Voorkomens met dezelfde sleutel kunnen meerdere keren inactief worden gemaakt, dat is dan te zien aan een oplopend getal bij de indicatie correctie. Een çorrectie is in BAG 2.0 te herkennen aan een gevuld tijdstip Niet BAG en/of een gevuld tijdstip Inactief(LV). Omdat het in BAG 2.0 een tijdstip is (in plaats van een indicatie) is het in BAG 2.0 niet meer nodig ook nog een correctie te leveren.”

geconstateerd

P Dijkstra: “De indicatie geconstateerd is ooit in het BAG 1.0 extract terecht gekomen als officieel. Dit is aangepast in het BAG 2.0 extract. Inhoudelijk gezien is hier niets aan gewijzigd. Als de indicatie geconstateerd ‘J’ is betekent dit dat het object niet op basis van een formeel brondocument in de registratie is opgenomen. Dit geeft aan dat er sprake is van een mogelijk illegaal object.”

inonderzoek

P Dijkstra: “inonderzoek is in BAG 2.0 geen attribuut van een voorkomen meer. Het is als het ware een apart object op basis van het ID van het object en het in onderzoek geplaatste gegeven met een eigen tijdlijn.”

comments powered by Disqus