HTTP 400 code bij importeren BAG3D Tiles met ogr2ogr

De WFS service van de BAG3D bevat 4 datasets: 3 daarvan met objecten (Lod12, Lod13 en Lod22) en één met de TileIndex. Zie: BAG3D.

Met ogr2ogr probeer ik de gegevens voor een deel van Nederland in een geopackage te importeren. Dit gaat prima voor de objecten, maar bij het importeren van de Tiles krijg ik een HTTP 400 fout (“Bad request”).

Gebruikte commandoregel:
ogr2ogr -f gpkg /home/willem/Desktop/test.gpkg WFS:"https://data.3dbag.nl/api/BAG3D/wfs" "BAG3D:Tiles" -overwrite -spat 84500 447000 85500 447700 -nln tegeltjes

Ik heb aardig wat dingen geprobeerd om het resultaat te beïnvloeden (multigeometrieën maken, CRS expliciet opgeven, query erop zetten), maar dit heeft zo te zien geen invloed, de HTTP 400 komt consequent terug.

Als ik de Tiles uit de WFS eerst als laag in QGIS toevoeg en dan bijvoorbeeld via DB Manager met Importeer Dataset in een geopackage of PostGIS database
importeer gaat alles wél goed, maar ik kan niet achterhalen of hier ‘onder de motorkap’ ook ogr2ogr wordt aangeroepen.

Iemand een idee waar dit aan ligt?

Is een heel andere aanpak (geen ogr2gr) ook een optie? Zelf gebruik ik vanuit de 3DBAG de FlatGeobuf tile-index. Die kun je direct ruimtelijk filteren op een bbox en daarin staan per tegel de downloadlinks naar OBJ, CityJSON en GPKG.

In Python komt dat neer op:

import flatgeobuf as fgb

tile_index = fgb.HTTPReader(
    "https://data.3dbag.nl/latest/tile_index.fgb",
    bbox=(84500, 447000, 85500, 447700)
)

for tile in tile_index:
    print(tile.properties["tile_id"])
    print(tile.properties["gpkg_download"])

Daarna kun je de GPKG’s per tegel downloaden en eventueel lokaal samenvoegen/importeren. Daarmee omzeil je de WFS-fout. Maar goed, dit is niet letterlijk antwoord op je vraag (maar misschien heb je er wel wat aan)…

1 like

Hoi Marco, dank voor de tip!

Dit is inderdaad een mogelijkheid. Echter, ook met ogr2ogr kun je direct vanaf het web flatgeobuf converteren, dus:
ogr2ogr -f gpkg /home/willem/Desktop/test.gpkg https://data.3dbag.nl/latest/tile_index.fgb -overwrite -spat 84500 447000 85500 447700 -nln tegeltjes

Dit werkt wél.

Maar … toch een belangrijk issue is dat ik vooral graag wil weten waarom bij de WFS conversie die HTTP 400 fout optreedt. Dus als iemand daar nog een antwoord op weet hou ik me aanbevolen!

He Willem, weet niet waarom maar met WFS 1.0 werkt het

ogr2ogr -f GPKG test1.gpkg "WFS:https://data.3dbag.nl/api/BAG3D/wfs?service=WFS&version=1.0.0&request=GetFeature&typeName=BAG3D:Tiles" BAG3D:Tiles -spat 84500 447000 85500 447700  -nln tegeltjes -overwrite

Inderdaad. En met WFS 1.1.0 werkt het ook, blijkt nu. Maar de default (zie het Capabilities document) is 2.0.0, en die werkt dus niet, althans niet bij de Tiles.

zo werkt het, is iets met paging van resultaten in wfs 2.0 maar er is geen primary key in deze dataset (–debug=ON to the rescue)

ogr2ogr -f gpkg test.gpkg WFS:"https://data.3dbag.nl/api/BAG3D/wfs" "BAG3D:Tiles" -overwrite -spat 84500 447000 85500 447700 -nln tegeltjes  --config OGR_WFS_PAGING_ALLOWED OFF