Assignment resit
Generalisation of a 3D city model (LoD 2.2 to 1.3)
Deadline is 14 July 2025 at 09:00 am
Late submission? 10% will be removed for each day that you are late.
This is an individual assignment.
The assignment is worth 50% of your final mark.
Overview
The aim of this assignment is to implement a method to generalise a 3D city model.
In short, you have to write a program that reads any CityJSON file that contains buildings in LoD 2.2, create the new LoD 1.3 buildings based on the 2.2 ones and output a new file containing both LoDs for each building.
Everything should be implemented in C++ with the help of any packages from the CGAL library. You are also free to use any other external libraries, but only for reading and writing files, such as Niels Lohmann’s JSON for Modern C++ library.
Defining LoD 1.3
LoD 1.3 (see image above) merges groups of adjacent roof polygons into single polygons that are horizontal. For every newly created roof polygon, its height should be set at 70% of the difference between the eave and the ridge. The ground should be kept at the height of the ground of the LoD 2.2.
For more details about the different LoDs, you can read this paper:
PDF DOI BibTeX
@inproceedings{Biljecki16c, author = {Biljecki, Filip and Ledoux, Hugo and Stoter, Jantien}, booktitle = {Computers, Environment and Urban Systems}, pages = {25--37}, title = {An improved {LOD} specification for {3D} building models}, year = {2016}, vol = {59}, doi = {10.1016/j.compenvurbsys.2016.04.005} }
The procedure to create the LoD 1.3 model has two parts that are relatively open: (1) computing adjacent groups of roof polygons, and (2) calculating the heights of the roof eaves and ridges. Based on what you’ve learned in this course, you should come up with your own methodology and describe it your report, including pros and cons of that methodology.
Input data to test your program?
You can test your code using files from the 3DBAG. Note that you can use cjio to make smaller test files by removing LoDs or creating subsets of tiles.
Requirements for the CityJSON output
- CityJSON version 2.0 (both for input and output)
- Only
Building
andBuildingPart
have to be generalised. - You should add the extra LoDs in the city objects where the LoD2.2 is already present, ie it could be directly for a
Building
or aBuildingPart
. - The LoD 1.3 should be a
Solid
and be geometrically valid (verify this with val3dity). - The complete CityJSON file you produce must be schematically valid according to the CityJSON schemas (use
cjval
to verify this).
Some tips
- You should consider that the buildings in a 3D city model might not be geometrically valid. So, your algorithms must deal with this (and not crash because of geometries that are not watertight or self-intersect). Reflect about this in the report.
- The CityJSON file you read as input will be syntactically valid and of version 2.0.
- The validator cjval can be used locally to verify the syntax of the files you create, it’s faster and simpler to use than the web-app.
- CGAL has many packages that can be of great help: explore!
- You can visualise the CityJSON files using ninja.cityjson.org, QGIS (using the CityJSON Loader plugin), or azul (macOS only).
Report
You need to include a simple report outlining your work. It should document the main steps in your methodology, explain briefly how you implemented them, and why you chose to implement them in this manner. Focus on high-level descriptions of how things work and the engineering/design choices that you made, not on explaining your code line by line. Discuss the pros and cons of your method, assess the quality of your results using different 3DBAG tiles and measure the performance of your code. We don’t expect perfect results—just document honestly what works well and what doesn’t.
We expect maximum 10 pages for the report (with plenty of figures included). Don’t forget to write your name and student number.
Marking
Criterion | Points |
---|---|
code runs without modifications | 1 |
code outputs schema-valid files | 1 |
LoD 1.3 quality | 4 |
report | 4 |
Deliverables
You have to submit a ZIP file (or another compressed format) with the following files:
- Your source code (everything that is needed to run/compile it).
- Your report in PDF.
Do not submit your assignment by email, but use this Dropbox link.
[last updated: 2025-06-27 18:22]