3dfier
3dfier: automatic reconstruction of 3D city models - Published in JOSS (2021)
Science Score: 100.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
✓DOI references
Found 8 DOI reference(s) in README and JOSS metadata -
✓Academic publication links
Links to: joss.theoj.org -
✓Committers with academic emails
5 of 18 committers (27.8%) from academic institutions -
✓Institutional organization owner
Organization tudelft3d has institutional domain (3d.bk.tudelft.nl) -
✓JOSS paper metadata
Published in Journal of Open Source Software
Keywords
Keywords from Contributors
Scientific Fields
Repository
The open-source tool for creating 3D models
Basic Info
- Host: GitHub
- Owner: tudelft3d
- License: gpl-3.0
- Language: C++
- Default Branch: master
- Homepage: http://tudelft3d.github.io/3dfier
- Size: 55 MB
Statistics
- Stars: 596
- Watchers: 43
- Forks: 115
- Open Issues: 29
- Releases: 28
Topics
Metadata Files
README.md
3dfier

Takes 2D GIS datasets (e.g. topographical datasets) and "3dfies" them (as in "making them three-dimensional") by lifting every polygon to 3D. The elevation is obtained from a point cloud (we support LAS/LAZ at this moment), and the semantics of every polygon is used to perform the lifting. That is, water polygons are extruded to horizontal polygons, buildings to LOD1 blocks, roads as smooth surfaces, etc. Every polygon is triangulated (constrained Delaunay triangulation) and the lifted polygons are "stitched" together so that one digital surface model (DSM) is constructed. Our aim is to obtain one DSM that is error-free, i.e. no intersecting triangles, no holes (the surface is watertight), where buildings are integrated in the surface, etc. This surface will then be used as input in simulation software for instance.

This video illustrates the process and what 3dfier is about.
The lifting options can be configured in the YAML file provided, an example is provided in /resources/config_files/myconfig.yml.
Any 2D input (which should be a planar partition) can be used as input, and each class must be mapped to one of the following:
- Building
- Terrain
- Road
- Water
- Forest
- Bridge
- Separation (used for walls and fences)
It is possible to define new classes, although that would require a bit of programming.
Output is in the following formats: OBJ, CityGML, CityJSON, CSV (for buildings only, i.e. their ID and height (ground+roof) are output in a tabular format), PostGIS, and STL. The ID of each polygon is preserved, and there is a 1-to-1 mapping between the input and the output.
If you use it, feedback is very much appreciated.
Documentation
The 3dfier documentation has extensive information on the installation, usage, and how 3dfier works.
If you use 3dfier in a scientific context, please cite this article:
Ledoux H, Biljecki F, Dukai B, Kumar K, Peters R, Stoter J, and Commandeur T (2021). 3dfier: automatic reconstruction of 3D city models. Journal of Open Source Software, 6(57), 2866.
@article{3dfier,
author = {Ledoux, Hugo and Biljecki, Filip and Dukai, Balázs and Kumar, Kavisha and Peters, Ravi and Stoter, Jantien and Commandeur, Tom},
doi = {10.21105/joss.02866},
journal = {Journal of Open Source Software},
number = {57},
pages = {2866},
title = {3dfier: automatic reconstruction of 3D city models},
volume = {6},
year = {2021}
}
LAS/LAZ Pointcloud
We expect the LAS/LAZ to be classified according to the ASPRS Standard LIDAR Point Classes v1.4 (Table 4.9 of this PDF), and at a minimum these should be defined:
- 0-1: Created, never classified and/or unclassified
- 2: Ground
- 3-5: Vegetation
If the vegetation is not classified or not filtered out, then buildings might be taller and there might be artefacts in the terrain.
Binary releases for Windows and Mac OS X
In order to make easy use of 3dfier we created pre-build binaries which can be downloaded from the releases page.
Download the latest release and unzip the archive in a easy to find location, not in the download folder of your browser.
To be able to quickly test 3dfier one can download the example dataset and unzip the archive in the folder of 3dfier.
Test data
In the folder example_data (download example dataset) there is a small part of the BGT datasets (2D 1:1k topographic datasets of the Netherlands), and a part of the AHN3 LIDAR dataset that can be used for testing.
The resulting model (in OBJ) can be found in example_data/output/test_area.obj
Further, there is an open data website that contains 3D models of a few Dutch cities, generated with 3dfier.
Validate config file
The configuration is stored in YAML format and needs to be valid for the parser to read the file. Config files can be schema validated using YAML Lint
Run 3dfier:
Windows
Open a command line (click start and type command or cmd). Using the command line browse to the folder where you extracted the example files and run:
3dfier myconfig.yml -o output.ext
Mac OS X and Linux
Open a console. Using the console browse to the folder where you extracted the example files and run:
$ ./3dfier myconfig.yml --OBJ output.obj
Docker
3dfier offers a alpine base image which tries to give you as much freedom for your vector data source as possible. Vector data is read by GDAL/OGR.
To run 3dfier over Docker simply execute:
$ docker run --rm --name 3dfier -v <local path where your files are>:/data tudelft3d/3dfier:<tag> 3dfier <name of config file> <... 3dfier parameters>
All your input data needs to be in <local path where your files are> and in the config file you need to reference your input data relative to <local path where your files are>. To achieve this either move your data and config into <local path where your files are> (and subdirectories), or set <local path where your files are> to the lowest common ancestor that contains all the data and config files you need.
Keep in mind that <local path where your files are> need to be writable by any user, otherwise your output won't be saved.
For instance to run it on the example data set (on Linux):
$ cd 3dfier/example_data
$ docker run --rm -it -v 3dfier/example_data:/data tudelft3d/3dfier:latest 3dfier testarea_config_unix.yml --OBJ test.obj
There is also a tutorial on how to generate a 3D model with 3dfier.
Prepare BGT data
For preparing BGT data as input for 3dfier look at resources/BGT_prepare/ReadMe.md
Owner
- Name: 3D geoinformation research group at TU Delft
- Login: tudelft3d
- Kind: organization
- Location: Delft, the Netherlands
- Website: https://3d.bk.tudelft.nl
- Repositories: 52
- Profile: https://github.com/tudelft3d
JOSS Publication
3dfier: automatic reconstruction of 3D city models
Authors
Delft University of Technology, the Netherlands
Delft University of Technology, the Netherlands
Delft University of Technology, the Netherlands
Delft University of Technology, the Netherlands
Tags
GIS 3D city modellingCitation (CITATION.cff)
# YAML 1.2
---
authors:
-
affiliation: "Delft University of Technology, the Netherlands"
family-names: Ledoux
given-names: Hugo
orcid: "https://orcid.org/0000-0002-1251-8654"
-
affiliation: "National University of Singapore, Singapore"
family-names: Biljecki
given-names: Filip
orcid: "https://orcid.org/0000-0002-6229-7749"
-
affiliation: "Delft University of Technology, the Netherlands"
family-names: Dukai
given-names: "Balázs"
orcid: "https://orcid.org/0000-0003-0193-5863"
-
affiliation: "Delft University of Technology, the Netherlands"
family-names: Kumar
given-names: Kavisha
-
affiliation: "Delft University of Technology, the Netherlands"
family-names: Peters
given-names: Ravi
-
affiliation: "Delft University of Technology, the Netherlands"
family-names: Stoter
given-names: Jantien
-
affiliation: "Delft University of Technology, the Netherlands"
family-names: Commandeur
given-names: Tom
cff-version: "1.1.0"
date-released: 2021-01-26
doi: "10.21105/joss.02866"
message: "If you use this software, please cite it using these metadata."
repository-code: "https://github.com/tudelft3d/3dfier"
title: "3dfier: automatic reconstruction of 3D city models"
...
GitHub Events
Total
- Issues event: 1
- Watch event: 39
- Issue comment event: 1
- Fork event: 7
Last Year
- Issues event: 1
- Watch event: 39
- Issue comment event: 1
- Fork event: 7
Committers
Last synced: 7 months ago
Top Committers
| Name | Commits | |
|---|---|---|
| Tom Commandeur | t****r@t****l | 657 |
| Hugo Ledoux | h****x@t****l | 451 |
| Ravi Peters | r****s@t****l | 60 |
| Maarten Pronk | g****t@e****l | 23 |
| Balázs Dukai | b****i@g****m | 16 |
| Ivan Paden | i****n@t****l | 13 |
| dependabot[bot] | 4****] | 10 |
| Filip Biljecki | f****i@g****m | 7 |
| tjfcommandeur | D****1@h****m | 5 |
| Ken Arroyo Ohori | k****i@t****l | 3 |
| Arfon Smith | a****n | 2 |
| Anna Labetski | a****i@g****m | 2 |
| vvmruder | v****r | 2 |
| Clemens Rudert | c****t@p****e | 1 |
| Karsten Deininger | k****r@b****h | 1 |
| Rohan Gautam | r****m@g****m | 1 |
| Stelios Vitalis | s****s@g****m | 1 |
| tcommandeur | t****r@g****m | 1 |
Committer Domains (Top 20 + Academic)
Issues and Pull Requests
Last synced: 6 months ago
All Time
- Total issues: 73
- Total pull requests: 31
- Average time to close issues: 5 months
- Average time to close pull requests: about 1 month
- Total issue authors: 37
- Total pull request authors: 9
- Average comments per issue: 1.29
- Average comments per pull request: 1.42
- Merged pull requests: 26
- Bot issues: 0
- Bot pull requests: 13
Past Year
- Issues: 1
- Pull requests: 0
- Average time to close issues: N/A
- Average time to close pull requests: N/A
- Issue authors: 1
- Pull request authors: 0
- Average comments per issue: 0.0
- Average comments per pull request: 0
- Merged pull requests: 0
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
- kad-vestjg (8)
- balazsdukai (8)
- hugoledoux (6)
- Ylannl (5)
- tcommandeur (5)
- vvmruder (4)
- Athelena (3)
- m-gerhold (2)
- LeslieIng (2)
- PURNIMA1298 (2)
- gmorass (2)
- elenaVal (1)
- Aimingggg (1)
- ghost (1)
- InigoD (1)
Pull Request Authors
- dependabot[bot] (14)
- balazsdukai (6)
- vvmruder (3)
- Ylannl (3)
- arfon (2)
- RohanGautam (1)
- fossabot (1)
- kdeininger (1)
- fbiljecki (1)
Top Labels
Issue Labels
Pull Request Labels
Packages
- Total packages: 1
- Total downloads: unknown
- Total dependent packages: 0
- Total dependent repositories: 0
- Total versions: 19
proxy.golang.org: github.com/tudelft3d/3dfier
- Documentation: https://pkg.go.dev/github.com/tudelft3d/3dfier#section-documentation
- License: gpl-3.0
-
Latest release: v1.4.0
published almost 2 years ago
Rankings
Dependencies
- actions/checkout v2 composite
- actions/checkout v2 composite
- docker/build-push-action v2 composite
- docker/login-action v1 composite
- docker/metadata-action v3 composite
- actions/checkout v2 composite
- actions/upload-artifact master composite
- jekyll/builder latest build
- jekyll/jekyll latest build
- result/latest latest
- github-pages >= 0 development
- activesupport 4.2.11.1
- addressable 2.8.0
- bundler 2.0.2
- coffee-script 2.4.1
- coffee-script-source 1.11.1
- colorator 1.1.0
- commonmarker 0.17.13
- concurrent-ruby 1.1.5
- dnsruby 1.61.3
- em-websocket 0.5.1
- ethon 0.12.0
- eventmachine 1.2.7
- execjs 2.7.0
- faraday 0.16.2
- ffi 1.11.1
- forwardable-extended 2.6.0
- gemoji 3.0.1
- github-pages 200
- github-pages-health-check 1.16.1
- html-pipeline 2.12.0
- http_parser.rb 0.6.0
- i18n 0.9.5
- jekyll 3.8.5
- jekyll-avatar 0.6.0
- jekyll-coffeescript 1.1.1
- jekyll-commonmark 1.3.1
- jekyll-commonmark-ghpages 0.1.5
- jekyll-default-layout 0.1.4
- jekyll-feed 0.11.0
- jekyll-gist 1.5.0
- jekyll-github-metadata 2.12.1
- jekyll-mentions 1.4.1
- jekyll-optional-front-matter 0.3.0
- jekyll-paginate 1.1.0
- jekyll-readme-index 0.2.0
- jekyll-redirect-from 0.14.0
- jekyll-relative-links 0.6.0
- jekyll-remote-theme 0.4.0
- jekyll-sass-converter 1.5.2
- jekyll-seo-tag 2.5.0
- jekyll-sitemap 1.2.0
- jekyll-swiss 0.4.0
- jekyll-theme-architect 0.1.1
- jekyll-theme-cayman 0.1.1
- jekyll-theme-dinky 0.1.1
- jekyll-theme-hacker 0.1.1
- jekyll-theme-leap-day 0.1.1
- jekyll-theme-merlot 0.1.1
- jekyll-theme-midnight 0.1.1
- jekyll-theme-minimal 0.1.1
- jekyll-theme-modernist 0.1.1
- jekyll-theme-primer 0.5.3
- jekyll-theme-slate 0.1.1
- jekyll-theme-tactile 0.1.1
- jekyll-theme-time-machine 0.1.1
- jekyll-titles-from-headings 0.5.1
- jekyll-watch 2.2.1
- jemoji 0.10.2
- kramdown 1.17.0
- liquid 4.0.0
- listen 3.1.5
- mercenary 0.3.6
- mini_portile2 2.8.1
- minima 2.5.0
- minitest 5.12.2
- multipart-post 2.1.1
- nokogiri 1.14.3
- octokit 4.14.0
- pathutil 0.16.2
- public_suffix 3.1.1
- racc 1.6.2
- rb-fsevent 0.10.3
- rb-inotify 0.10.0
- rouge 2.2.1
- ruby-enum 0.7.2
- ruby_dep 1.5.0
- rubyzip 2.0.0
- safe_yaml 1.0.5
- sass 3.7.4
- sass-listen 4.0.0
- sawyer 0.8.2
- terminal-table 1.8.0
- thread_safe 0.3.6
- typhoeus 1.3.1
- tzinfo 1.2.10
- unicode-display_width 1.6.0
- boost-chrono *
- boost-filesystem *
- boost-geometry *
- boost-locale *
- boost-program-options *
- boost-system *
- cgal *
- gdal *
- lastools *
- libpq >=16.2
- yaml-cpp *
