De BGT opvragen via API en wegschrijven met ogr2ogr

Via onderstaande commando probeer ik de bgt op te vragen en weg te schrijven naar een POSTgis database.

Ik wil alleen de records opvragen met een creation_date > van 01-01-2025 of later. Hoe kan ik dit doen?

creation_date > 2001-01-01 of creation_date > 2-8-2023 00:00:00 (UTC) heb ik toegevoegd maar dat werkt niet. Onderstaande werkt wel via osgeo4w Shell.

ogr2ogr -f "PostgreSQL" PG:"host=localhost port=5432 user=user dbname=databasename password=password" -where "eind_registratie IS NULL" -nln bgt_wegdeel_test4 -lco SCHEMA=mijn_schema -lco GEOMETRY_NAME=geom -progress -overwrite -s_srs EPSG:28992 -t_srs EPSG:28992 OAPIF:https://api.pdok.nl/lv/bgt/ogc/v1 wegdeel

Heeft iemand een tip hoe ik kan filteren op deze datum?

Beste Bas,

Filteren op het veld creation_date is momenteel niet mogelijk in de BGT OGC API. Als je specifiek op dit veld wilt filteren dan zal je dat client-side moeten doen. Dus meer binnen halen en dan zelf filteren op creation_date.

De API heeft wel ondersteuning voor filteren op tijd via een peildatum. Bijv: https://api.pdok.nl/lv/bgt/ogc/v1/collections/wegdeel/items?datetime=2025-01-01T00%3A00%3A00.000Z&limit=10. Dus via de generieke datetime parameter.

Hiermee filter je in geval van de BGT op een peildatum tussen tijdstip_registratie en eind_registratie (incl. lege eind_registratie). Mogelijk kan je dit gebruiken? Eventueel door hiermee alleen de actuele data (van 2025) op te halen en vervolgens lokaal verder op creation_date te filteren?

Om dit via ogr2ogr te doen kan je de -oo DATETIME=<waarde> optie meegeven op de command line. Voorbeeld (ik gebruik even GeoPackage als output ipv Postgres maar het idee is hetzelfde):

ogr2ogr -overwrite -f GPKG -s_srs EPSG:28992 -t_srs EPSG:28992 wegdeel.gpkg -oo DATETIME=2025-01-01T00:00:00.000Z OAPIF:https://api.pdok.nl/lv/bgt/ogc/v1 wegdeel

Tip: met --debug on krijg je meer logging te zien.

Voorbeeld output:

ogr2ogr --debug on -overwrite -f GPKG -s_srs EPSG:28992 -t_srs EPSG:28992 wegdeel.gpkg -oo DATETIME=2025-01-01T00:00:00.000Z OAPIF:https://api.pdok.nl/lv/bgt/ogc/v1 wegdeel
HTTP: Establish persistent session named 'OAPIF:0x14d812360'.
HTTP: Fetch(https://api.pdok.nl/lv/bgt/ogc/v1/collections)
HTTP: libcurl/8.7.1 (SecureTransport) LibreSSL/3.3.6 zlib/1.2.12 nghttp2/1.63.0
GDAL: GDALOpen(OAPIF:https://api.pdok.nl/lv/bgt/ogc/v1, this=0x14d812360) succeeds as OAPIF.
GPKG: GeoPackage v1.2.0
GDAL: GDALOpen(wegdeel.gpkg, this=0x14d081200) succeeds as GPKG.
HTTP: Fetch(https://api.pdok.nl/lv/bgt/ogc/v1)
HTTP: Fetch(https://api.pdok.nl/lv/bgt/ogc/v1/api?f=json)
HTTP: Fetch(https://api.pdok.nl/lv/bgt/ogc/v1/collections/wegdeel/items?f=json&limit=20)
GeoJSON: First pass: 100.00 %
ogr2ogr: Switching layer active SRS to Amersfoort / RD New
HTTP: Fetch(https://api.pdok.nl/lv/bgt/ogc/v1/collections/wegdeel/items?f=json&limit=1000&crs=http://www.opengis.net/def/crs/EPSG/0/28992&datetime=2025-01-01T00:00:00.000Z)
GeoJSON: First pass: 25.91 %
GeoJSON: First pass: 51.81 %
GeoJSON: First pass: 77.72 %
GeoJSON: First pass: 100.00 %
HTTP: Fetch(https://api.pdok.nl/lv/bgt/ogc/v1/collections/wegdeel/items?crs=http%3A%2F%2Fwww.opengis.net%2Fdef%2Fcrs%2FEPSG%2F0%2F28992&cursor=FCA%7CsdVOzQ&datetime=2025-01-01T00%3A00%3A00.000Z&f=json&limit=1000)
GeoJSON: First pass: 46.81 %
GeoJSON: First pass: 93.63 %
GeoJSON: First pass: 100.00 %
HTTP: Fetch(https://api.pdok.nl/lv/bgt/ogc/v1/collections/wegdeel/items?crs=http%3A%2F%2Fwww.opengis.net%2Fdef%2Fcrs%2FEPSG%2F0%2F28992&cursor=Io0%7CsdVOzQ&datetime=2025-01-01T00%3A00%3A00.000Z&f=json&limit=1000)
GeoJSON: First pass: 40.49 %
GeoJSON: First pass: 80.99 %
GeoJSON: First pass: 100.00 %
HTTP: Fetch(https://api.pdok.nl/lv/bgt/ogc/v1/collections/wegdeel/items?crs=http%3A%2F%2Fwww.opengis.net%2Fdef%2Fcrs%2FEPSG%2F0%2F28992&cursor=M_o%7CsdVOzQ&datetime=2025-01-01T00%3A00%3A00.000Z&f=json&limit=1000)
.....
.....
4 likes

image
Ik heb een en ander getest met ogr2ogr, maar de filtering op DATETIME lijkt bij mij niet te werken. Zie bovenstaande 2 commando’s. Beide leveren identieke resultaten op: de complete BGT bak tabel, inclusief alle historie. Iemand een idee hoe dit kan?

Welke GDAL versie gebruik je? Volgens de documentatie werkt -oo DATETIME pas vanaf versie 3.10 namelijk. Bij mij geeft GDAL 3.6 ook de warning driver OAPIF does not support open option DATETIME.

1 like

Te controleren via ogr2ogr --version. Vereist inderdaad GDAL 3.10 (nov 2024).

1 like

OK, dat zou 't wel eens kunnen zijn. Ik heb GDAL 3.4. Dank voor de info, dat verklaart veel!

1 like

Is er trouwens bekend of er in de toekomst meer filtermogelijkheden op deze datasets komen? Ik neem toch aan dat men niet wil dat gebruikers de hele BGT binnenhalen terwijl ze wellicht maar een hele specifieke selectie nodig hebben. Als je zo slecht kan filteren bij de bron werk je in de hand dat er veel te veel data wordt gedownload.

1 like

Beste Willem e.a.
PDOK werkt hard om haar gehele platform eenduidig te voorzien van bevragingsservices in API’s (OGC). Dit traject loopt tot na de zomer. Filtering heeft impact op ons hele platform. Wij hebben inderdaad wel de ambitie om dit uit te breiden, maar dat zal zeer geleidelijk gaan gebeuren en daarvoor zullen we eerst flink wat experimenten gaan uitvoeren.
Kortom: helaas niet op korte termijn beschikbaar.