During my PhD, I encountered the following shortcomings in my 3D GIS research:
- CityGML datasets containing multiple levels of detail are rare.
- There is no programmatically generated data in CityGML format.
- There is no free procedural modeling engine.
- Publicly available CityGML models often contain a large number of (topological) errors.
Recommendation: Use NSDT editor to quickly build programmable 3D scenes
To address these issues, I developed Random3Dcity, a basic experimental open-source procedural modeling engine for the automated construction of synthetic buildings and their implementation in multiple LODs in CityGML. I used the generated dataset for various purposes in my PhD project, such as benchmarking the performance of using a specific LOD in a use case, but the possible applications are not limited thereto. Hereby, I bridge the gap and publicly release the dataset . The code for the engine has also been released.
In addition to this project, I have also designed a new LOD specification for 3D city models, which extends the specification in CityGML. This specification has been implemented by this engine.
With its diverse buildings and large number of representations, Random3Dcity aims to be the most complete CityGML (and possibly 3D) dataset available. However, be aware of its limitations, such as experimental nature and synthetic results.
1. From random parameter description to multiple representations of CityGML
Random3Dcity consists of two parts.
The first to construct buildings with random properties (procedural modeler) such as height, roof type and number of windows and their dimensions.
The algorithm that does this is relatively clever, and it does so by respecting a large number of constraints (such as windows not overlapping), and taking care to design buildings that look as realistic as possible. The engine stores this data in human-readable parameter descriptions (own XML schema), eg: Gabled2.89.
Because of this randomness, the dataset is well suited as an unbiased data source for many analyses, and for recreating many different scenarios that might not be available in real-world data. As currently configured, the number of different buildings is about 1054.
The second part of the engine reads these data and realizes them in 3D by generating CityGML files with multiple levels of detail.
The method is described in the following publication: Generation of Multi-LOD 3D City Models in CityGML Using the Procedural Modeling Engine Random3Dcity .
2. Finer LOD division
As one of the goals of my doctoral research, I developed a new specification that refines the CityGML LOD specification to 16 LODs, four less vague and well-specified Variant, intended to complement the CityGML specification. They are the product of thorough research into 3D production workflows, engagement with practitioners, and examination of existing 3D models.
The top image shows a visual depiction of the specification, and the bottom shows a combination of four LODs for a dataset containing 100 buildings.
Detailed specifications are published in: Improved LOD Specifications for 3D Building Models.
3. The internal entity of the floor
Random3Dcity is capable of generating basic interiors at three levels of detail: one solid per floor, one solid for the entire building (offset from the shell), and one 2D polygon per floor. For example, these entities can be used to construct ground truth models for volumetric calculations.
The engine generates some internal parameters, such as joist and wall thickness, and calculates the geometry of the solid.
4. Multiple geometric references
Each building is generated with multiple levels of detail (16 in total). Also, they are generated in multiple geometry references (eg different heights on top of LOD1 block model).
Below you can see seven variants of the LOD1 block model, referring to the geometric reference used for the top surface.
Furthermore, different references are used for the footprint: the actual footprint and the projection of the roof edge. This also applies to LOD2 models.
The following publication describes this topic: Variations of LOD for 3D Building Models and Their Implications for Spatial Analysis.
5. Example of CityGML dataset generated by the engine
Version as of March 11, 2015 (Random3Dcity v. 0.1.4). All datasets contain 900 buildings. Please read additional information before downloading data. If you use this data to prepare an excellent publication, please cite the following paper: Generation of multi-LOD 3D city models in CityGML using the procedural modeling engine Random3Dcity.
If you don't want to download the code source and generate the dataset yourself, here I prepared a zipped collection of sample CityGML data. The zip also contains OBJ files generated using my tool CityGML2OBJs, if you need to convert 3D models into other formats, you can use this online 3D format conversion tool.
A description of each representation is given below.
level of detail | geometric reference | Brep or solid | file name | note |
---|---|---|---|---|
LOD0.1 | Actual land occupation | Brep | LOD0_1_F0_H3.gml | Only includes floor space |
LOD0.2 | Actual land occupation, half the height of the roof | Brep | LOD0_2_F0_H3.gml | Contains footprint and roof edge polygons |
LOD0.3 | Actual footprint, independent height | Brep | LOD0_3_F0_H3.gml | Contains footprint and roof edge polygons |
LOD1.1 | Actual land occupation, the height of the half-height of the roof | Brep | LOD1_1_F0_H3.gml | |
LOD1.2 | Actual land occupation, the height of the half-height of the roof | Brep | LOD1_2_F0_H3.gml | |
LOD1.2 | Footprint offset 20 cm from roof edge | Solid | LOD1_2_Fd_H5_solid.gml | different footprint (offset) |
LOD1.3 | Actual land occupation, the height of the half-height of the roof | Solid | LOD1_3_F0_H3_solid.gml | |
LOD2.0 | Actual land occupation | Brep | LOD2_0_F0.gml | |
LOD2.0 | Actual land occupation | Brep | LOD2_0_F0_S0.gml | no semantics |
LOD2.1 | Actual land occupation | Brep | LOD2_1_F0.gml | |
LOD2.2 | Actual land occupation | Brep | LOD2_2_F0.gml | |
LOD2.2 | Actual land occupation | Brep | LOD2_2_F0_S0.gml | no semantics |
LOD2.2 | Project from roof edge | Brep | LOD2_2_F1.gml | |
LOD2.3 | actual footprint | Brep | LOD2_3_F0.gml | |
LOD3.0 | Walls are projected from the edge of the roof | Brep | LOD3_0.gml | air element |
LOD3.1 | not applicable | Brep | LOD3_1.gml | land feature |
LOD3.2 | not applicable | Brep | LOD3_2.gml | |
LOD3.2 | not applicable | Brep | LOD3_2_S0.gml | no semantics |
LOD3.3 | not applicable | Brep | LOD3_3.gml | Very detailed model (best in the series) |
LOD3.3 | not applicable | Brep | LOD3_3_S0.gml | no semantics |
Interior-LOD0 | not applicable | Brep | Interior-LOD0.gml | one polygon per layer |
Interior-LOD1 | not applicable | Brep | Interior-LOD1.gml | an entity of a building |
Interior-LOD2 | not applicable | Brep | Interior-LOD2_2.gml | one entity per layer |
Remarks and future work
- You can use my tool CityGML2OBJs to convert this data to OBJ, if you need to convert 3D models in other formats, you can use this online 3D format conversion tool .
- All gml:LinearRing and gml:Polygon have a gml:id which is randomly generated (UUID).
- Datasets ending in _S0.gml do not contain semantically differentiated surfaces.
- Coordinate systems are local.
- Data complies with CityGML 2.0.
The full product of this engine contains even more datasets (392 to be more precise) with shuffled variants. For example, not all LOD1 variants with heights are placed here. If you need other variants, please contact me, or use the provided code to generate them.
6. Wrong dataset (deliberately)
An auxiliary engine has been created to simulate the acquisition errors of the raw dataset mentioned above. This data is suitable for error propagation analysis (see, for example, my related paper). Furthermore, since the topology may be corrupted in some files, its use may extend to other areas such as test validation and repair tools.
6.1 Position error
LOD | distribution error | wrong data set | note |
---|---|---|---|
LOD1 | σ = 0.0 m (GT) | LOD1-F1H1 [5.7MB] | Solid |
σ = 0.2 m | LOD1-F1H1-0.2 [5.7MB] | Solid | |
LOD2 | σ = 0.0 m (GT) | LOD2-F1 [8.7MB] | Brep |
σ = 0.2 m | LOD2-F1-0.2 [8.7MB] | Brep | |
LOD3 | σ = 0.0 m (GT) | LOD3 [81.4MB] | Brep |
σ = 0.2 m | LOD3-0.2 [81.4MB] | Brep |
Notice:
- Error is equivalent to ISO 19157 Spatial Data Quality Element Position Accuracy.
- Assume no spatial correlation of uncertainty.
- All coordinates have the same uncertainty. Vertical (z) coordinates are not handled separately.
6.2 Overlapping objects
Overlapping objects are not required. Therefore, these datasets may also be useful for testing validation and repairing software. The following dataset contains buildings that overlap in multiple LODs.
LOD | wrong data set | note |
---|---|---|
LOD2 | LOD2-overlap [519kB] | Brep |
LOD3 | LOD3 - Overlap [5.2MB] | Brep |
6.3 Ambiguous Semantics
These datasets contain perturbed semantic surfaces and/or missing semantic classes. The semantics of the surface are uniformly random (1/3 for each of the following: GroundSurface, RoofSurface, WallSurface).
LOD | wrong data set | note |
---|---|---|
LOD2 | LOD2-F1 - Arbitrary Semantics [2.2MB] | Brep |
LOD3 | LOD3 - Arbitrary Semantics [21.2MB] | Brep, doors and windows are missing (replaced with 3 classes) |
6.4 Serious topological errors
The following LOD3 dataset contains topological errors such as broken solids and polygons whose interiors lie outside them.
LOD | wrong data set | note |
---|---|---|
LOD3 | LOD3 - Error Topology [21MB] | Brep, most errors are peripheral windows |
LOD3 | LOD3_solid-error-topology [1.9MB] | Solid, most errors are self-overlapping roof tips |
Original link: CityGML procedural modeling - BimAnt