Proposal:3D tagging for building base shapes
| 3D tagging for building base shapes | |
|---|---|
| Proposal status: | Proposed (under way) |
| Proposed by: | LordGarySugar |
| Tagging: | base:shape=*, base:height=*, base:levels=*, base:colour=*, base:material=*, base:direction=*, base:orientation=*, base:angle=*, base:angle:upper=*, base:angle:lower=*
|
| Applies to: | area only ( |
| Definition: | New tags to represent the underside shape of building in 3D renderers |
| Statistics: |
|
| Rendered as: | Building shapes in 3D renderers |
| Draft started: | 2025-08-10 |
| RFC start: | 2025-09-06 |
Proposal
I am proposing a new tagging schema to represent the underside shapes of 3D buildings, which is heavily influenced by and aims to complement the existing Simple 3D Buildings schema. This involves the introduction of a new main tag base:shape=* to be used in conjunction with building=* or building:part=*, which would allow users to specify the shape of the underside of buildings. Some of these will be the same values that are used to represent roof:shapes, while some are renamed for clarity or new entirely, such as pointed_arch. This new tag would be supported by a handful of additional tags that follow the same logic as roof:shape tags, these are base:height=*, base:levels=*, base:colour=*, base:material=*, base:direction=*, base:orientation=* and base:angle=*, base:angle:upper=* and base:angle:lower=*.
This proposal aims to solve two key problems: that it is very time consuming to approximate these building shapes using rectangular-shaped building parts, and that even when approximated these buildings are not accurate to their real-world counterparts, with jagged undersides where there should be smooth curves or straight lines. If this proposal gains community support, I intend to communicate with 3D renderer and editor developers to support the use of these tags as quickly as possible, as changing existing 3D mapping to make use of this new schema would cause buildings to appear broken/less accurate in renderers that do not yet support these new tags.
This schema is intended to be used for building parts that are overhanging and/or suspended. Where a building is located on a steep hill, base:shape=slope or other shapes should not be used to get the base of the building to match up with 3D terrain.
Rationale
There are a number of building shapes that are impossible to represent accurately with the current Simple 3D Buildings schema, as shown in the following table of examples. Editors have managed to approximate a number of these buildings by using a number of rectangular parts to create the illusion of a curve or angled section. This is both time consuming creating and tagging all these building parts, while still not providing an appealing and accurate end result.
Tagging
Existing tags that would be used in combination with the new tags. No change in tagging is proposed for any of these tags.
| Key | Comment | Example tags |
|---|---|---|
building:part=*
|
what type of building part is this | yes |
height=*
|
height above ground of the top of the building part, including the highest point of the roof shape | 15 |
min_height=*
|
height above ground of the bottom of the building part, including the lowest point of the base shape | 5 |
building:levels=*
|
the total levels of the building part, excluding roof levels. The amount of levels tagged in base:levels should not affect the total levels tagged in building:levels. | 3 |
building:min_level=*
|
the building part's lowest point will end at the top of this level;
the base shape's lowest point will end at the top of this level. This means that if building:min_level=4 and base:levels=1, the base shape should be rendered between the top of level 4 and the top of level 5, NOT the top of level 3 and top of level 4. This behaviour is in contrast to how roof:levels behaves. |
1 |
New keys. Most of these follow the same schema that roof tags use as set out in Simple 3D Buildings. The only keys which introduce new concepts are base:shape=*, base:angle:upper=* and base:angle:lower=*
| Key | Comment | Example tags |
|---|---|---|
base:height=*
|
the vertical extent of the base shape only (e.g. an arch which begins 4m off the ground and reaches 5m off the ground would be tagged 1) | 5 |
base:levels=*
|
how many building levels are located within the base shape's height (a sloping underside of levels 4 and 5 would be tagged =2). You should not add or subtract any levels from building:levels. | 1 |
base:shape=*
|
the underside shape of this building part | slope, round |
base:colour=*
|
the colour of the bottom of this building part | red, #FF1E00 |
base:material=*
|
the material of the bottom of this building part (there is already the tag floor:material=* which was supposed to mean the exterior underside material, but a large majority of tag uses actually refers the material of the interior's floor (concrete) or are impossible exterior materials i.e. carpet, fine_gravel, ground etc.)
|
concrete |
base:direction=*
|
what direction (in degrees) the main face of the base is facing, for example all base:shape=slope and base:shape=partial_arch? need to specify which direction they face. In a scenario with a roof:shape=skillion and base:shape=slope which are parallel, they will have two opposite direction in degrees, for example roof:direction=10 and base:direction=190 | 45 |
base:orientation=*
|
what direction the face of the base is relative to the shape of the building part, for example base:shape=round (for parity with roof:shape=round) would default to the long side (along), but most arch shapes need to be oriented along the short side (across) | across |
base:angle=*
|
for slope and other base types, the angle of the base in degrees. An alternative to tagging base:height. | 45 |
base:angle:upper=*
|
for use only with base:shape=curve. This indicates the angle of the curve at its highest point, relative to horizontal. This must be 0-90 degrees. | 45 |
base:angle:lower=*
|
for use only with base:shape=curve. This indicates the angle of the curve at its lowest point, relative to horizontal. This must be 0-90 degrees. | 90 |
Currently proposed base:shape tags

Please refer to the diagram illustrating all proposed base shapes. This is presented in 2D; dome, pyramidal, cone and their inverted_ counterparts would be 3D shapes just like their roof counterparts.
- flat (default for building parts without base:shape tags)
- slope (renamed from roof-centric skillion)
- pyramidal (+synonym cone)
- inverted_pyramidal (+synonym inverted_cone)
- dome
- inverted_dome
- round - the same as roof:shape=round - a parabolic arch that begins vertically on each side
- inverted_round
- gabled
- gambrel
- pointed_arch (gothic arch) - an archway shape where each side consists of two arcs of slightly different radii, these should be calculated automatically based on the base:height set and width of the building parts - need to find explanatory maths for how this is done.
- segmental_arch - a constant-radius arch where the bottom of the arch ends at a 0-90 degree angle depending on the ratio of height to width. The maximum possible base:height that can be valid is double the width of the building:part, which would result in the exact same shape as round. The radius of a segmental arch is defined as 4x(base:height^2) + arch_width^2 all divided by 8x(base:height)
- inverted_segmental_arch
- curve - a curved shape where you can specify the angle at which the curve begins and ends to represent more complex forms, as well as half-arches. Requires the use of base:angle:upper=* and base:angle:lower=*. explanatory diagrams to be created
Multipolygons

Like roof shapes, multipolygons should be supported. Some buildings are supported by inverted_cone shapes, but the full cone shape would effectively extend into the ground, which is not possible without recognising that a multipolygon is necessary in such scenarios. See for example Midrand Water Tower, Johannesberg.
base:orientation and base:direction for each base shape
Some base shapes, such as slope and curve require base:direction to be set to define their orientation. Others, such as gabled and round cannot use base:orientation when the building part polygon is square. Pyramidal and dome shapes don't need any tag to be set as they have rotational symmetry.
| base:shape | base:orientation | base:direction |
|---|---|---|
| flat | no | no |
| slope | no | yes |
| pyramidal
cone inverted_pyramidal inverted_cone |
no | no |
| dome
inverted_dome |
no | no |
| round
inverted_round |
yes (no when polygon is square) | yes |
| gabled | yes (no when polygon is square) | yes |
| gambrel | yes (no when polygon is square) | yes |
| pointed_arch | yes (no when polygon is square) | yes |
| segmental_arch
inverted_segmental_arch |
yes (no when polygon is square) | yes |
| curve | no | yes |
Existing roof:shape values that I am not proposing become base:shape values
- saltbox
- gabled_height_moved
- hipped
- half-hipped
- side_hipped
- side_half-hipped
- hipped-and-gabled
- mansard
- crosspitched
- onion
The rationale for excluding these is that there is either ambiguity in how they are rendered or that there are no real-life examples of buildings that could make use of these base:shapes.
Examples
Some examples of relatively complex shapes that could be easily represented with a single building part using this schema
Rendering
To be rendered by 3D renderers only.
Features/Pages affected
Update 3D tagging to explain the new tags there
Update floor:material=* to explain that base:material is the recommended replacement tag, supported by 3D renderers. (Another proposal or discussion will be required later to redefine floor:material as for the interior's floor material, it's current de-facto usage).
Comments
Please comment on the OSM Community forum thread.









