User:AlephNull/roofs
Personal collection of various roof shapes and ideas for how to map them. For current community consensus see Simple 3D Buildings. See also taginfo page for roof:shape.
Goals
Use approaches that work well for their tasks: simple 3D (potentially multiple building parts but no dedicated roof geometry) should mix well with mapping roof ridges explicitly.
Currently an issue: mapping complex roof geometry (such as churches) and lining up skillions and gables.
roof=*
Open buildings or building parts: roof=no. Currently roofless buildings are commonly mapped as barrier=wall. Particularly for complex ruins it would be nice to be able to distinguish the inside and the outside of the buildings. For example, consider the ruins of an extended monastery complex: mapping only the walls would make it harder to understand the structure. Suggested rendering: similar to normal building, potentially with a dashed outline and/or a lighter fill colour. In some cases it might even make sense to combine roof=no with roof:shape=* if enough is left to recognize the original roof shape.
Buildings or building parts with a roof terrace: roof=terrace.
roof:shape=*
Atomic roof shapes
Example | Tagging | Comments |
---|---|---|
roof:shape=gabled + (roof:orientation=*) | Prototypical roof form. Already a very established tag. See gable roof. | |
roof:shape=flat | Common modern roof form. Already a very established tag. See flat roof. | |
roof:shape=hipped + (roof:height=H) | Common roof form. Already an established tag. See hip roof. | |
roof:shape=half-hipped + (roof:levels=*) + (roof:height=H) | Typical values of roof:levels=* might be 1/1.5/2. See hip roof. Basic renderers may fall back to hipped. | |
roof:shape=butterfly + (roof:height=H) | Dual of roof:shape=gabled. | |
roof:shape=pyramidal + (roof:height=H) | ||
roof:shape=round or roof:shape=round_gabled | Analogous to roof:shape=gabled. Relatively common roof shape for industrial and agricultural buildings, sometimes reaching down to the ground. Also used as a roof shape for skylights. See barrel roof. | |
roof:shape=round_pyramidal + (roof:height=H) | Pyramidal roof slopes which curve to a dull peak. Compare with roof:shape=dome which is similar but has a circular base. See cloister vault which covers 4-sided domical vaults.
Alternative tag name roof:shape=domical | |
roof:shape=round_skillion | ||
roof:shape=round_hipped | ||
roof:shape=round_rhombic_pyramidal | A very niche shape. Can fall back to roof:shape=round_pyramidal. Should not fall back to roof:shape=rhombic_pyramidal since the silhouette differs significantly. | |
roof:shape=tented_gabled | Rendering may fall back to roof:shape=gabled. | |
roof:shape=tented_pyramidal + (roof:height=H) | Pyramidal roof slopes which curve to a sharp peak. Rendering could fall back to roof:shape=pyramidal. | |
roof:shape=rhombic_pyramidal + (roof:height=H) + (roof:gable:height=h) | By default the gable height is 50% of the roof height, resulting roof sides in the shape of a rhombus. See also rhombic roof. Basic renderers may want to fall back to pyramidal. | |
roof:shape=dome + (roof:height=H) + (roof:radius=R) | roof:shape=dome is part of the OSM-4D roof table.
Algorithm sketch: (1) if no H is specified assume that it is equivalent to the height of one building:level=* (2) find the barycentre B of the enclosing polygon; (3) if R is not specified use the smallest distance from the barycentre to a corner of the polygon; (4) draw a dome of radius R and height H over the barycentre. | |
roof:shape=sail_dome + (roof:height=H) + (roof:sides=k) | Default value for roof:sides=* is 4.
This shape is called roof:shape=dome_overlapped in the the OSM-4D roof table. | |
roof:shape=gambrel | Should there be a tag for determining at which height the kink lies? | |
roof:shape=mansard | Should there be a tag for determining at which height the kink lies? | |
roof:shape=bell + (roof:height=H) + (roof:sides=k) | Sometimes also called ogee roofs. See bell roof. | |
roof:shape=onion + (roof:radius=R) + (roof:radius:base=r) + (roof:height=H) + (roof:sides=k) | Algorithm sketch: (1) if no H is specified assume that it is equivalent to the height of one building:level=* (2) find the barycentre B of the enclosing polygon; (3) if R is not specified use the smallest distance from the barycentre to a corner of the polygon; (4) if no r is specified assume that it is 85% of R; (5) draw a k-sided onion centred at B of height H which has r at its base and R at its widest point. 3D-renderers may choose to ignore k entirely and use a fixed percentage of H for h. |
Composite roof shapes
Example | Tagging | Comments |
---|---|---|
roof:shape=catslide for the main building, two building parts with roof:shape=gabled and roof:shape=skillion respectively for the actual roof shape. | Houses with catslide roofs are sometimes called saltbox houses, but roof:shape=saltbox has ambiguous usage in OpenStreetMap. | |
TODO | roof:shape=gabled + roof:iterations=* | Possibly roof:shape=iterated_gabled instead. |
Worked examples
Example | Tagging |
---|---|
roof:shape=gabled for the main part. roof:shape=skillion for the side part. roof:shape=pyramidal for the roof of the tower. | |
TODO | |
roof:shape=conical for the hall, roof:shape=pyramidal for the tower, roof:shape=flat for the connection between them | |