Skip to content

Commit 1522d40

Browse files
committed
Add multiroofs extension
1 parent 3cc97ad commit 1522d40

5 files changed

Lines changed: 343 additions & 0 deletions

File tree

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2026 MultiRoofs
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
# Shed CityJSON Extensions
3+
4+
A demo Extension where sheds are modelled, with a new semantic surface.
Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,196 @@
1+
{
2+
"type": "CityJSON",
3+
"version": "2.0",
4+
"extensions": {
5+
"multiroofs": {
6+
"url": "https://cityjson.github.io/extensions/multiroofs/0.1.0/multiroofs.ext.json",
7+
"version": "0.1.0"
8+
}
9+
},
10+
"CityObjects": {
11+
"41": {
12+
"type": "Building",
13+
"attributes": {
14+
"+building-function": "Detached",
15+
"+building-has-elevator": null,
16+
"+building-heritage-status": null,
17+
"+building-max-height-allowed": 12.5,
18+
"+building-monument-status": false,
19+
"+building-type": "Semi-detached",
20+
"+building-volume": 532.52655,
21+
"+building-year-construction": 1920,
22+
"+colours": {
23+
"social": 0.6,
24+
"water": null,
25+
"green": 0.3,
26+
"energy": 0.8,
27+
"densification": null,
28+
"utilities": 0.5,
29+
"mobility": 0.7
30+
},
31+
"+roof-area": 142.3,
32+
"+roof-compactness": 0.72,
33+
"+roof-elevation": 0.0,
34+
"+roof-good-solar": true,
35+
"+roof-irradiance": 850.4,
36+
"+roof-slope": 38.5,
37+
"+roof-sun-hours": 4.2
38+
},
39+
"geometry": [
40+
{
41+
"type": "Solid",
42+
"lod": "2.2",
43+
"boundaries": [
44+
[
45+
[[3, 65, 2, 66, 1, 67, 0]],
46+
[[68, 66, 2, 69]],
47+
[[70, 67, 1, 71]],
48+
[[72, 3, 0, 73]],
49+
[[73, 0, 67, 70]],
50+
[[69, 2, 65, 74]],
51+
[[74, 75, 76]],
52+
[[75, 74, 65, 3, 72]],
53+
[[71, 1, 66, 68]],
54+
[[75, 72, 73, 70, 77, 76]],
55+
[[68, 77, 70, 71]],
56+
[[77, 68, 69, 74, 76]]
57+
]
58+
],
59+
"semantics": {
60+
"surfaces": [
61+
{
62+
"type": "GroundSurface"
63+
},
64+
{
65+
"on_footprint_edge": true,
66+
"type": "WallSurface"
67+
},
68+
{
69+
"on_footprint_edge": false,
70+
"type": "WallSurface"
71+
},
72+
{
73+
"rf_azimuth": 328.484467,
74+
"rf_h_roof_50p": 8.292183,
75+
"rf_h_roof_70p": 9.15872,
76+
"rf_h_roof_max": 11.077557,
77+
"rf_h_roof_min": 6.489581,
78+
"rf_slope": 45.46785,
79+
"type": "RoofSurface"
80+
},
81+
{
82+
"rf_azimuth": 147.778091,
83+
"rf_h_roof_50p": 9.779508,
84+
"rf_h_roof_70p": 10.246067,
85+
"rf_h_roof_max": 11.077557,
86+
"rf_h_roof_min": 8.72821,
87+
"rf_slope": 30.256968,
88+
"type": "RoofSurface"
89+
},
90+
{
91+
"rf_azimuth": 59.065632,
92+
"rf_h_roof_50p": 8.016039,
93+
"rf_h_roof_70p": 8.586391,
94+
"rf_h_roof_max": 10.364244,
95+
"rf_h_roof_min": 6.568833,
96+
"rf_slope": 46.531986,
97+
"type": "RoofSurface"
98+
}
99+
],
100+
"values": [[0, 1, 1, 1, 1, 1, 2, 1, 1, 3, 4, 5]]
101+
}
102+
}
103+
]
104+
}
105+
},
106+
"vertices": [
107+
[100945, 79038, 56],
108+
[105128, 72308, 56],
109+
[111299, 76083, 56],
110+
[107126, 82877, 56],
111+
[94770, 75201, 57],
112+
[98936, 68437, 57],
113+
[99211, 68618, 57],
114+
[100573, 66443, 57],
115+
[106903, 70371, 57],
116+
[105543, 72562, 57],
117+
[105128, 72308, 57],
118+
[100945, 79038, 57],
119+
[95074, 74708, 57],
120+
[103066, 75626, 57],
121+
[106135, 71608, 57],
122+
[99364, 68373, 57],
123+
[100945, 79038, 7286],
124+
[94770, 75201, 7304],
125+
[95074, 74708, 7394],
126+
[95074, 74708, 7891],
127+
[100573, 66443, 2974],
128+
[106903, 70371, 2964],
129+
[103066, 75626, 11357],
130+
[106135, 71608, 8467],
131+
[106135, 71608, 3080],
132+
[105543, 72562, 9112],
133+
[105128, 72308, 9112],
134+
[99364, 68373, 7592],
135+
[99364, 68373, 3154],
136+
[100463, 68898, 3142],
137+
[100463, 68898, 8840],
138+
[99211, 68618, 7595],
139+
[95476, 74963, 7885],
140+
[98936, 68437, 7256],
141+
[100179, 73848, 11351],
142+
[78300, 96979, 81],
143+
[79079, 95717, 81],
144+
[84687, 86623, 81],
145+
[80285, 83881, 81],
146+
[80248, 83784, 81],
147+
[78440, 84222, 81],
148+
[78463, 84319, 81],
149+
[73507, 92353, 81],
150+
[76602, 94277, 81],
151+
[76105, 95078, 81],
152+
[75864, 95465, 81],
153+
[80248, 83784, 10115],
154+
[80285, 83881, 10112],
155+
[78440, 84222, 10134],
156+
[78463, 84319, 10131],
157+
[84687, 86623, 9965],
158+
[75864, 95465, 6529],
159+
[76105, 95078, 6708],
160+
[73507, 92353, 10007],
161+
[76602, 94277, 9904],
162+
[78300, 96979, 6620],
163+
[76105, 95078, 9892],
164+
[79079, 95717, 7202],
165+
[79079, 95717, 9824],
166+
[77678, 95416, 9856],
167+
[77678, 95416, 6969],
168+
[77739, 94935, 9867],
169+
[77739, 94935, 7136],
170+
[78614, 95617, 9835],
171+
[78614, 95617, 7125],
172+
[107328, 82548, 56],
173+
[109845, 75194, 56],
174+
[103069, 75620, 56],
175+
[109845, 75194, 9055],
176+
[111299, 76083, 7256],
177+
[103069, 75620, 11373],
178+
[105128, 72308, 9098],
179+
[107126, 82877, 7239],
180+
[100945, 79038, 7282],
181+
[107328, 82548, 7344],
182+
[107328, 82548, 7632],
183+
[107093, 82394, 7641],
184+
[105969, 77416, 11357]
185+
],
186+
"transform": {
187+
"scale": [0.001, 0.001, 0.001],
188+
"translate": [85289.898, 447042.018, -0.435]
189+
},
190+
"metadata": {
191+
"geographicalExtent": [
192+
85363.405, 447108.461, -0.379, 85401.197, 447138.997, 10.938
193+
],
194+
"referenceSystem": "https://www.opengis.net/def/crs/EPSG/0/7415"
195+
}
196+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[extension]
2+
name = "multiroofs"
3+
version = "0.1.0"
4+
versionCityJSON = "2.0"
5+
description = "Extension for the MultiRoofs EU project (https://multiroofs.nweurope.eu)"
6+
authors = ["Hugo Ledoux <https://3d.bk.tudelft.nl/hledoux>"]
7+
repository = "https://github.com/MultiRoofs/cityjson-extension"
8+
# doi = ["https://someurl.org"]
9+
keywords = ["sustainability", "urban"]
10+
license = "MIT"
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
{
2+
"type": "CityJSONExtension",
3+
"name": "multiroofs",
4+
"uri": "https://cityjson.github.io/extensions/multiroofs/0.1.0/multiroofs.ext.json",
5+
"version": "0.1.0",
6+
"versionCityJSON": "2.0",
7+
"description": "Attributes needed for the MultiRoofs project",
8+
"extraAttributes": {
9+
"Building": {
10+
"+building-function": {
11+
"type": "string"
12+
},
13+
"+building-has-elevator": {
14+
"type": ["string", "null"],
15+
"enum": ["yes", "no", null]
16+
},
17+
"+building-heritage-status": {
18+
"type": ["string", "null"]
19+
},
20+
"+building-max-height-allowed": {
21+
"type": ["number", "null"]
22+
},
23+
"+building-monument-status": {
24+
"type": ["boolean", "null"]
25+
},
26+
"+building-type": {
27+
"type": "string",
28+
"enum": ["Detached", "Semi-detached", "Apartement", "null"]
29+
},
30+
"+building-volume": {
31+
"type": "number"
32+
},
33+
"+building-year-construction": {
34+
"type": "integer"
35+
},
36+
"+colours": {
37+
"type": "object",
38+
"properties": {
39+
"social": {
40+
"type": ["number", "null"],
41+
"minimum": 0,
42+
"maximum": 1
43+
},
44+
"water": {
45+
"type": ["number", "null"],
46+
"minimum": 0,
47+
"maximum": 1
48+
},
49+
"green": {
50+
"type": ["number", "null"],
51+
"minimum": 0,
52+
"maximum": 1
53+
},
54+
"energy": {
55+
"type": ["number", "null"],
56+
"minimum": 0,
57+
"maximum": 1
58+
},
59+
"densification": {
60+
"type": ["number", "null"],
61+
"minimum": 0,
62+
"maximum": 1
63+
},
64+
"utilities": {
65+
"type": ["number", "null"],
66+
"minimum": 0,
67+
"maximum": 1
68+
},
69+
"mobility": {
70+
"type": ["number", "null"],
71+
"minimum": 0,
72+
"maximum": 1
73+
}
74+
},
75+
"required": [
76+
"social",
77+
"water",
78+
"green",
79+
"energy",
80+
"densification",
81+
"utilities",
82+
"mobility"
83+
],
84+
"additionalProperties": false
85+
},
86+
"+roof-area": {
87+
"type": ["number", "null"]
88+
},
89+
"+roof-compactness": {
90+
"type": ["number", "null"]
91+
},
92+
"+roof-elevation": {
93+
"type": ["number", "null"]
94+
},
95+
"+roof-good-solar": {
96+
"type": ["boolean", "null"]
97+
},
98+
"+roof-irradiance": {
99+
"type": ["number", "null"]
100+
},
101+
"+roof-slope": {
102+
"type": ["number", "null"]
103+
},
104+
"+roof-sun-hours": {
105+
"type": ["number", "null"]
106+
}
107+
}
108+
},
109+
"extraRootProperties": {},
110+
"extraSemanticSurfaces": {},
111+
"extraCityObjects": {}
112+
}

0 commit comments

Comments
 (0)