Skip to content

[NL] LV BAG 2.0 converteren

Bart Noordervliet edited this page Apr 25, 2022 · 7 revisions

(This page is in Dutch because it describes using xml-to-postgres to convert an open dataset from the Dutch central government.)

xml-to-postgres kan gebruikt worden om de volledige BAG 2.0 Extract te importeren in PostgreSQL. Dit extract wordt sinds november 2021 kosteloos aangeboden door het Kadaster via deze link. Download hiervoor eerst de benodigde xml-to-postgres configuratiebestanden in deze ZIP. Deze voorbeeld-configuraties beperken de import op een paar vlakken: historische records worden weggelaten (d.w.z. records met een 'Historie:eindGeldigheid') en records met een niet-actieve status (bijv. 'Pand gesloopt' of 'Naamgeving ingetrokken'). Deze filters kunnen eenvoudig worden aangepast via de 'incl' en 'excl' opties in de YAML-bestanden. Verder maken deze voorbeeld-configuraties gebruik van de 'conv: gml-to-ewkb' functie om de geometriën in de BAG gelijk in te lezen als PostGIS geometries. Het is mijn indruk dat dit voor de LV-BAG correct werkt, maar het gebruik van deze functie blijft voor eigen risico. Lees vooral ook deze uitleg en disclaimer over GML-conversie.

Scripting

Hieronder een voorbeeld om de BAG Extract gescript te importeren:

#!/bin/sh

echo "Download BAG Extract..."
wget https://service.pdok.nl/kadaster/adressen/atom/v1_0/downloads/lvbag-extract-nl.zip || exit

echo "Unzip..."
unzip lvbag-extract-nl.zip 9999PND*.zip 9999VBO*.zip 9999NUM*.zip 9999WPL*.zip || exit

echo "Process PND..."
unzip -p 9999PND*.zip | xml-to-postgres bag-pand.yaml

echo "Process VBO..."
unzip -p 9999VBO*.zip | xml-to-postgres bag-verblijfsobject.yaml

echo "Process NUM..."
unzip -p 9999NUM*.zip | xml-to-postgres bag-nummeraanduiding.yaml

echo "Process WPL..."
unzip -p 9999WPL*.zip | xml-to-postgres bag-woonplaats.yaml

Dit script gebruikt streaming ZIP input en pakt de bron-XML dus nooit helemaal uit. Piek schijfruimte-gebruik hiermee is 14GB (12 als je tussentijds lvbag-extract-nl.zip verwijdert).

Performance

Op een redelijk snelle server (Intel Xeon E-2236 CPU @ 3.40GHz) draait deze voorbeeld-conversie in zo'n 16 minuten. De hoeveelheid RAM is niet relevant; het gebruik blijft onder de 10MB. Aantal cores is ook niet relevant, want xml-to-postgres is vooralsnog single-threaded. Dit laatste zal nog wel eens veranderen, maar er is niet veel gelegenheid voor parallellisme omdat de XML lineair verwerkt wordt.

Clone this wiki locally