Deadline is Monday 11 March 2019 at 8:30.
Late submission? 10% will be removed for each day that you are late.
You’re allowed for this assignment to work in a group of maximum 4 (or less if you want, but we don’t recommend it)
For this assignment you need to combine 3 public Dutch datasets (BGT, BAG, AHN3) to create a 3D city model for a neighbourhood of the city of Leiden, this model must be delivered both in CityGML and CityJSON. You will take polygons from a topographic map (BGT) and enrich them with elevation information from a point cloud (AHN3). In addition you will need to
Our region of interest is the following neighbourhood of the city center of Leiden:
While all datasets are publicly available via PDOK, we have prepared a zip archive for you that includes most things you will need for this assignment.
The zip file contains
Note that the AHN3 point cloud is not included (it’s too large!). You must download it yourself from PDOK.
The Basisregistratie Grootschalige Topografie (BGT), which is currently still under production (the municipality of Leiden has been one of the first to complete it), is the most detailed topographic map of the Netherlands. Its information model (IMGeo) is in fact modelled as an Application Domain Extension (ADE) of CityGML. However, for this assignment we will only use features from the standard CityGML modules.
Note that in the BGT each feature has an ‘end-of-life’ timestamp associated to it (the eindregistratie
attribute).
If this property has no value, it means the feature currently exists physically in Leiden.
If it has a value it means that it has existed in the past, but is now gone.
You should use only features that exist now, otherwise you will have many overlapping features.
The Basisregistraties Adressen en Gebouwen (BAG) is a register of buildings and addresses in the Netherlands.
It includes building footprints and some valuable attributes such as the year of construction (bouwjaar
).
You will need to spatially link the building footprints from the BAG with those of the BGT in order to transfer the attributes between matching features.
Note that the building footprints of the BAG do not match exactly with those of the BGT.
The Actueel Hoogtebestand Nederland (AHN) is a national elevation map (point cloud) of the Netherlands that is maintained by the Dutch water boards.
The AHN3 dataset is distributed in the ASPRS LAS format.
Highly relevant for this assignment are the classification codes. AHN3 uses the codes 1
, 2
, 6
, 9
and 26
as illustrated in the following image (each class has its own color).
In contrast to the other datasets, you will have to download AHN3 directly from its PDOK public download page. Select the correct tile and download the right format (Puntenwolk/LAZ).
Note: Because of the large filesize (~3.5 GB!) it is strongly recommended that you clip it using the provided polygon that delineates the study area. You can do this in a preprocessing step.
Note: In addition, you may want to use thinning in order to make you code run faster during testing and development.
Use the following table to map the BGT features to CityGML.
BGT class | CityGML class |
---|---|
BegroeidTerreindeel |
PlantCover |
OnbegroeidTerreindeel |
LandUse |
OndersteunendWaterdeel |
PlantCover |
OndersteunendWegdeel |
AuxiliaryTrafficArea |
Overbruggingsdeel |
BridgeConstructionElement |
OverigBouwwerk |
GenericCityObject |
Pand |
Building |
Scheiding |
GenericCityObject |
Waterdeel |
WaterBody |
Wegdeel |
TrafficArea |
A full specification of how to populate which CityGML attributes as well as minimal geometric requirements are given below per CityGML class.
The geometries that you are creating must be valid according to ISO 19107.
Note: CityGML attributes that are directly mapped from BGT/BAG attributes must be translated from Dutch to English. Translation tables are provided as .csv
files in the translation
directory of the zip archive.
CityGML attribute | Origin |
---|---|
creationDate |
BGT:tijdstipregistratie |
class |
BGT:bgt_functie |
surfaceMaterial |
BGT:bgt_fysiekvoorkomen |
Geometry: 2.5D surface
CityGML attribute | Origin |
---|---|
creationDate |
BGT:tijdstipregistratie |
Geometry: 2.5D surface or solid
For these you will have to spatially match the BAG features to the BGT features to join the attributes.
Use the BGT footprints to obtain your LOD1 building models.
In order to populate the storeysAboveGround
attribute you can make an educated guess of the average storey height.
CityGML attribute | Origin |
---|---|
creationDate |
BGT:tijdstipregistratie |
yearOfConstruction |
BAG:bouwjaar |
class |
BAG:gebruiksdoel |
storeysAboveGround |
Derive from elevation |
Geometry: solid
You may assume the building footprints to have an elevation of 0.
CityGML attribute | Origin |
---|---|
creationDate |
BGT:tijdstipregistratie |
Geometry: 2.5D surface
CityGML attribute | Origin |
---|---|
creationDate |
BGT:tijdstipregistratie |
class |
BGT:bgt_fysiekvoorkomen |
class |
BGT:bgt_type |
Geometry: 2.5D surface
CityGML attribute | Origin |
---|---|
creationDate |
BGT:tijdstipregistratie |
class |
BGT:bgt_type |
Geometry: 2.5D surface
CityGML attribute | Origin |
---|---|
creationDate |
BGT:tijdstipregistratie |
class |
BGT:bgt_functie |
surfaceMaterial |
BGT:bgt_fysiekvoorkomen |
Geometry: 2.5D surface
CityGML attribute | Origin |
---|---|
creationDate |
BGT:tijdstipregistratie |
class |
BGT:plus_type |
Geometry: flat/horizontal surface surface at fixed elevation
Use these validators to ensure you have a valid CityGML file:
You are free to use any tools you want, including QGIS and Python. There are some exceptions: tools that perform the whole automatically (eg 3dfier, or others you could find online) are not allowed (in doubt, just ask on the GEO1008 forum). You need to find and implement yourself the methodology.
Notice that you can either create a CityGML file and convert it to CityJSON, or the other way around. We think it is simpler and easier to work with JSON, and we thus recommend working with CityJSON and converting at the end to CityGML. There is a software to automatically convert CityJSON <-> CityGML.
We recommend using Python with a few packages, as described below. Notice that it’s perfectly fine to perform some tasks with QGIS, and then simply implement in Python some other parts. We will not mark nor see your code, only the final CityGML/CityJSON files.
las2las.exe
from the LAStools (in the /bin/
folder, it’s a command-line interface).import json
/bin/citygml-tools
(no need to compile anything).how to view your datasets?
The report should have the following four sections, and only these.
We expect a report of around 15 pages (including figures).
You must hand in ZIP containing
Do not submit your assignment by email, but use that Dropbox link. Make sure that you put the full name of one of the member of the team (only one is sufficient).
You’ll get a confirmation email when everything has been successfully uploaded, keep it in case things go wrong.
last updated: 02/28/19 (08:14:04)