Genereren van 3D Tiles: pg2b3dm

3dtilesnederland.nl

Laatst bijgewerkt: 25 juni 2024
getest met gp2b3dm versie 2.8.1

Onder volgt stapsgewijs een instructie om met behulp van pg2b3dm tilesets te genereren.

  • Download de data vanaf 3dbag.nl
    Je kunt ervoor kiezen om een specifieke tile te
    downloaden of de hele database.
Klik om de afbeelding in een nieuw tabblad te bekijken

  • Een specifieke tile

– Klik op ‘Downloads per tile’
– Kies een tile naar wens
– Download de GPKG file

Klik om de afbeelding in een nieuw tabblad te bekijken
  • De hele database
    GPKG file (3dbag_nl.gpkg.zip)
    Let op de beschikbare diskruimte. Gezipped is deze bijna 20 GB maar uitgepakt is deze 108 GB. Op enig moment heb je dus bijna 130 GB nodig.
    Unzip het bestand 3dbag_nl.gpkg.zip
Klik om de afbeelding in een nieuw tabblad te bekijken
  • Download Postgres software
    Deze software stelt ons in staat om Postgres databases aan te maken.

Kies in het keuzemenu alle producten waaronder pgAdmin.
Met deze GUI tool kunnen we nieuwe databases aanmaken en beheer uitvoeren in onze databases.

Klik om de afbeelding in een nieuw tabblad te bekijken
  • Installeer de software op jouw computer.
    Geef een master wachtwoord in en laat de poort staan op de default waarde, poort: 5432.
    Bij Locale houdt je ook de default waarde ‘[default locale]’ aan.

Ga vervolgens door de Stack Builder Wizard

Klik om de afbeelding in een nieuw tabblad te bekijken
  • Zorg ervoor dat de Postgis Bundle wordt geïnstalleerd.
    Postgis zorgt voor de functionaliteiten om spatial functies uit te voeren in een database
Klik om de afbeelding in een nieuw tabblad te bekijken
  • Kies in de volgende stap alle opties behalve ‘Create Spatial Database’.
    In een volgende stap doen wij dat zelf.
Klik om de afbeelding in een nieuw tabblad te bekijken
  • Maak een nieuwe Postgres database aan.

Start pgAdmin
Klik op servers en voer het master wachtwoord in

Klik om de afbeelding in een nieuw tabblad te bekijken
  • Klik op de ‘PostgreSQL 16’ node > Create > Database
Klik om de afbeelding in een nieuw tabblad te bekijken
  • Noem deze ‘BAG_V20230809’
    (BAG gevolgd door het versienummer).
    Al andere opties kun je ongemoeid laten.
Klik om de afbeelding in een nieuw tabblad te bekijken
  • Installeer de Postgis extentie .
    Deze extentie zorgt ervoor dat je de beschikking krijgt over spatial functionaliteiten in de database.
    De database bestaat grotendeels uit gedetailleerde coördinaten waarmee gebouwen gevormd kunnen worden en gepositioneerd kunnen worden in een kaart.
Klik om de afbeelding in een nieuw tabblad te bekijken
  • De beoogde database structuur
Klik om de afbeelding in een nieuw tabblad te bekijken
  • Om een GPKG package te converteren / importeren in onze Postgres database gebruiken we de open source tool ogr2ogr.

De tool wordt standaard meegeleverd met QGIS, een gratis softwarepakket dat veel van onze lezers al zullen hebben.
Het installeren van QGIS is de makkelijkste weg om de beschikking te krijgen over og2ogr.

 

Als je QGIS niet wilt installeren dan kun je ogr2ogr downloaden vanaf de GDAL download website. Je haalt dan een gdal-3.7.2.tar.gz bestand binnen.
Een gz bestand is een gecomprimeerd bestand. Dit bestand moet uitgepakt worden net als een zip file. Windows beschikt niet standaard over een programma om gz files uit te pakken.
Een gratis programma als 7zip kan dat wel. Download en installeer 7zip als dat nodig blijkt te zijn.
Je hebt bovendien Conda nodig om de gdal package te installeren.
Zie voor verdere instructies de download pagina van GDAL.

Klik om de afbeelding in een nieuw tabblad te bekijken
  • Open een Windows command window.

Navigeer naar de bin folder van QGIS.
Bij een standaard installatie luidt deze als volgt:
C:\Program Files\QGIS 3.32.3\bin

 

Met og2ogr kunnen kunnen conversies uitgevoerd tussen
projectiesystemen.
Dat kan nodig zijn om de 3D tiles aan te laten sluiten met
het terrein.
De 3DBAG database is standaard epsg:7415. Als het terrein ook epsg:7415 is dan is de conversie niet nodig.
Is het terrein echter gebaseerd op WGS 84 dan zul je een conversie moeten uitvoeren.

Voor een conversie maak je gebruik van de optie -t_srs.
Bijvoorbeeld: -t_srs epsg:4979

 

Let op:
Er zijn vele projectiesystemen. Standaard beschikt ogr2ogr niet
over alle projectiesystemen. Deze projectiesystemen zullen dan extra gedownload moeten worden.
Het is gebleken dat je geen foutmelding krijgt tijdens het uitvoeren van ogr2ogr. Het eindresultaat is niet correct. De panden zijn mogelijk net niet correct gepositioneerd.

 

Voer een test uit als volgt:
C:\Program Files\QGIS 3.32.3\bin>
echo 121302 487371 2.68 | cs2cs epsg:7415 epsg:4979

 

Is het resultaat:
52d22’23.445″N  4d53’32.521″E 45.663

De hoogte is correct aangepast van 2.68 naar 45.663.

 

Is het resultaat:
121302dN 487371dE 2.680
dan is of zijn de SRS niet bekend op jouw systeem.

 

Is het resultaat:
C:\Program Files\QGIS 3.28.2\bin>echo 121302 487371 2.68 | cs2cs epsg:4326 epsg:4979
DeprecationWarning: PROJ_LIB environment variable is deprecated, and will be removed in a future release. You are encouraged to set PROJ_DATA instead.
proj_create: C:\Program Files\PostgreSQL\15\share\contrib\postgis-3.3\proj\proj.db contains DATABASE.LAYOUT.VERSION.MINOR = 0 whereas a number >= 2 is expected. It comes from another PROJ installation.
proj_create: no database context specified
Rel. 9.1.1, December 1st, 2022
<cs2cs>:
cannot instantiate source coordinate system
program abnormally terminated

 

Dan verwijst de environment variabele ‘PROJ_LIB’ waarschijnlijk naar een foutieve proj.db.
Er kunnen meerdere proj.db aanwezig zijn op jouw computer. Programma’s als Postgres, QGIS en UNREAL komen
met een eigen proj.db
Bovendien is de PROJ_LIB enviornment variabele verouderd. Gebruik de environment variabele PROJ_DATA.

Laat de environment variabele PROJ_DATA verwijzen naar de QGIS proj.db
set PROJ_DATA=C:\Program Files\QGIS 3.28.2\share\proj\

 

 

Update grids

 

Optie 1
projsync.exe
projsync — PROJ 9.3.1 documentation

Je kunt gebruik maken van het programma projsync.exe om projectiesystem te downloaden en te installeren.
Voer het onderstaande commando uit om alle projectiesystemen te downloaden
projsync –all

 

Optie 2
Indien je niet alle projectiesystemen wilt downloaden dan kun je ook gebruik maken van de netwerk optie.
In dat geval kun je een environment variabele PROJ_NETWERK maken en daarin de waarde ON opnemen.
Een Windows herstart is nodig om de variabelen te activeren

Klik om de afbeelding in een nieuw tabblad te bekijken
  • Enkele voorbeelden van het ogr2ogr commnando

 

Import met conversie
Verwerk de GPKG
Sla het resultaat op in de tabel tile4979
Gebruik de tabel-structuur lod22_3d

 

Voer in een commando window het onderstaande commando uit:
C:\Program Files\QGIS 3.28.2\bin>ogr2ogr -f “PostgreSQL” PG:”host=localhost port=5432 dbname=BAG_v20240420 user=postgres password=XXXX” -t_srs epsg:4979 “C:\Users\xxxx\Downloads\9-264-480.gpkg” lod22_3d -nln tile4979

 

Import zonder conversie
Verwerk de GPKG
Sla het resultaat op in de tabel tile7415
Gebruik de tabel-structuur lod22_3d

 

Voer in een commando window het onderstaande commando uit:
C:\Program Files\QGIS 3.28.2\bin>ogr2ogr -f “PostgreSQL” PG:”host=localhost port=5432 dbname=BAG_v20240420 user=postgres password=XXXX” “C:\Users\xxxx\Downloads\9-264-480.gpkg” lod22_3d -nln tile7415

 

Klik om de afbeelding in een nieuw tabblad te bekijken
  • Import zonder conversie
    Verwerk de GPKG van heel Nederland 

    Voer in een commando window het onderstaande commando uit:
    C:\Program Files\QGIS 3.28.2\bin>ogr2ogr -f “PostgreSQL” PG:”host=localhost port=5432 dbname=BAG_v20240420 user=postgres password=XXXX”  “C:\Users\xxxx\Downloads\3dbag_nl.gpkg”

Resultaat import Nederland

Na verloop van tijd (dat kan best even duren) zijn de BAG tabellen zichtbaar in de  database.
We zien direct dat de BAG de verschillende beschikbare LOD opslaat in verschillende tabellen. Deze database structuur zien we niet altijd zo terug. Een veelgebruikte open source database structuur de is de CityDB . In de CityDB vinden we een andere structuur. pg2b3m kan echter ook op deze database aangesloten worden al zijn daar wel extra handelingen voor nodig.
In dit voorbeeld gaan we uit van de meest gedetailleerde LOD: lod22_3d.

Klik om de afbeelding in een nieuw tabblad te bekijken
  • pg2b3m is geschreven met behulp van C#. Het programma is een .NET applicatie. Daarom hebben we  .NET 6.0 SDK nodig.
    .NET 6.0 SDK kun hier downloaden.
    .NET 6.0 SDK wordt ook automatisch meegeleverd met Microsoft Visual Studio. Wanneer je de laatstgenoemde installeert dan kun je de source code inzien en eventueel persoonlijke aanpassingen doorvoeren.
    Installeer één van de bovengenoemde opties.
Klik om de afbeelding in een nieuw tabblad te bekijken
  • Download de pg2b3m zip file van GitHub.
    Download regelmatig de nieuwste versie. De ontwikkelingen volgen elkaar snel op.
    Bezoek de GitHub pagina regelmatig om op de hoogte te blijven van de nieuwste ontwikkelingen.
    Op de GitHub pagina zijn instructies te vinden over het gebruik van pg2b3dm.
    Via 3dtilesnederland.nl verstrekken we een globaal voorbeeld (Quick Start) maar de tool kan meer!
Klik om de afbeelding in een nieuw tabblad te bekijken
  • Unzip de file en zet de bestanden op een door jouw gewenste locatie op je computer.

Open een Windows commando window en navigeer naar de
folder waar met de uitgepakte bestanden.
Installeer vervolgens pg2b3m

Klik om de afbeelding in een nieuw tabblad te bekijken
  • Selecties

Soms is het handig om een sub-selectie maken maar merk op dat deze stap optioneel is.
De tool pg2b3dm bevat een invoer parameter ‘query’ waarmee ook een sub-selectie gemaakt kan worden.

 

Met deze optionele stap kunnen flexibel de meest uitgebreide selecties gemaakt worden.

De tabel lod22_3d bevat zoveel data dat er mogelijk time-outs
zullen optreden.

Dit kun je voorkomen door indexen te plaatsen of een bepaalde selectie
uit de lod22_3d tabel te pakken en deze op te slaan in een nieuwe tabel.
In onderstaand voorbeeld selecteren we 1 specifiek gebouw maar je kunt ook gemeenten of stadsdelen selecteren.
Op GitHub van pg2b3dm vind je ook een voorbeeld van een spatial selectie.

 

— creëer enkele hulpindexen

CREATE INDEX ON lod22_3d USING gist(st_centroid(st_envelope(geom)));

CREATE INDEX lod22_3d_identificatie_n1 on lod22_3d (identificatie);

CREATE INDEX pand_identificatie_n1 on pand (identificatie);

 

— delete bag_selectie als de tabel bestaat
DROP TABLE bag_selectie;

— creeer een nieuwe tijdelijke tabel met een subselectie
CREATE TABLE bag_selectie
AS
SELECT *
FROM lod22_3d
WHERE identificatie=’NL.IMBAG.Pand.0568100000110624′
;

Klik om de afbeelding in een nieuw tabblad te bekijken
  • Start pg2b3dm met onderstaande opdracht:

pg2b3dm –h localhost -U postgres -p 5432 -d BAG_v20240420 -t bag_selectie -c geom -o “C:\Users\xxxx\www\3dtilesnederland\tiles” -a identificatie -g 500,0

 

Toelichting

De tool maakt verbinding met de database.

-t Staat voor tabel. Geef de tabelnaam op waarvan je tiles wilt maken

-a Staat voor attributen. Daarmee kunnen gegevens gekoppeld worden
aan de 3D objecten (bijv. een ID, de hoogte of het bouwbaar van een object)

-o Staat voor Output Directory.

-c de kolom die de geometrie bevat

-g Staat voor Geometric Error. 500 is een goed uitgangspunt.
De werking van de Geometric Error is beschreven op 3dtilesnederland.nl in
de thema’s

Klik om de afbeelding in een nieuw tabblad te bekijken
  • Het programma heeft succesvol een tileset gegenereerd.
    Ga naar jouw output folder om het resultaat te bekijken.

 

In geval van explicit tiling worden de onderstaande folders / bestanden aangepast
– content (bevat de b3dm of glb files)
– tileset.json (deze file bevat hierarchische informatie over de locatie van de tiles)

 

In geval van implicit tiling worden de onderstaande folders / bestanden aangepast
– content (bevat de b3dm of glb files)
– subtrees (bevat subtree files. Dit zijn slimme files om de tiles te localiseren)
– tileset.json (deze file bevat hierarchische informatie over de locatie van de tiles)

 

 

Klik om de afbeelding in een nieuw tabblad te bekijken
  • Lokale hosting

 

Om de tileset te kunnen gebruiken in een viewer moeten de tilesets gehost worden op een webserver

 

Je kunt op jouw eigen computer een webserver installeren. Er zijn veelverschillende webservers beschikbaar op de markt.
Enkele voorbeelden zijn: Apache (gratis), NGINX (gratis). Microsoft IIS.

 

Je kunt de tilesets kopieren in de www folder of een andere folder die gehost wordt.
Vervolgens kun je de tileset.json file via het Worl Wide Web bekijken.
(Firewalls kunnen het verkeer mogelijk blokeren)

 

Je kunt echter de door jou gemaakt tileset niet testen in de Cesium Sandcastle.
Dit komt doordat de Cesium Sandcastle beveiligde SSL hosting over https vereist.

 

3dtilesnederland.nl biedt daarom een kleine viewer aan die je lokaal kunt hosten. Download deze hier.
Deze viewer kun je evenals de tilesets hosten.
Pas de url eventueel aan naar het door jou gekozen pad.

    try {
      const tileset = await Cesium.Cesium3DTileset.fromUrl(
        “http://localhost:5173/tiles/tileset.json”
      );
      tileset.maximumScreenSpaceError = 1;
      viewer.scene.primitives.add(tileset);
      viewer.flyTo(tileset);
    } catch (error) {
      console.log(‘Error loading tileset: ${error}’);
    }

 

Klik om de afbeelding in een nieuw tabblad te bekijken
  • Externe hosting

 

Lokale hosting kun je met gratis middelen realiseren.
Je kunt echter ook voor externe hosting kiezen.  Met een eenvoudige
webhosting abonnement is voor test-doeleinden al snel veel en veilig te bereiken.

3dtilesnederland.nl wordt ook gehost door een externe partij. In ons geval is
dat hostinger.com. Er zijn talloze hosting bedrijven beschikbaar op het internet.
Voor een klein bedrag per maand heb je een eigen domein zoals 3dtilenederland.nl, 3dkaartnederland.nl.
Daarnaast krijg je de beschikking over diskruimte. Voor testdoeleinden volstaat 50 Gig.

 

Met een ftp-programma, zoals bijvoorbeeld Filezilla of WinSCP kun je de tilesets kopieren
vanaf je lokale schijf naar je webhosting ruimte.

 

Waarschijnlijk kun je SSL beveiling activeren en vervolgens kun je de tilesets
over het https protocol hosten.
Bijvoorbeeld onze eigen tilesets:
3dtilesnederland.nl/tiles/1.0/implicit/nederland/599.json

Klik om de afbeelding in een nieuw tabblad te bekijken
  • Test jouw tileset in de Cesium Sandcastle

Host je de tilesets via externe hosting (https) of lokaal (https)
dan kun je de tilesets ook bekijken in de Cesium Sandcastle.

 

Zie de Quick Start Guide van Cesium

Klik om de afbeelding in een nieuw tabblad te bekijken