Simple 3D buildings
The following tagging methods are results of the 2nd 3D Workshop Garching, where most 3D developers agreed on supporting a unified subset of tags in their programs. Basically we describe the volume of a building using two types of areas: 1) building outlines for the most general area of a complex building and 2) building parts to describe sections of the building, especially those with different height or other attributes.
How to Map
The building outline represents the area of land covered by the union of all parts of the building. The outline may in most cases also be considered the building footprint. This is a closed way or multipolygon tagged with building=*.
Building attributes (e.g., address, name, overall height, operator, etc.) must be tagged on the building outline.
The building outline provides backward compatibility for 2D rendering software, such as Mapnik, and other data consumers not interested in 3D modelling. When a building has any building:part=* areas, the building outline is not considered for 3D rendering.
Parts of a building that have differing physical characteristics (height, color, etc) are usually modeled by drawing an area within the building outline tagged with the building:part=* tag. The value of the building:part=* tag is usually yes, but it can be any building=* value.
The entire building outline is filled with building:part=* ways, tagged with their respective height and other attributes. These areas may overlap each other or may be disjunct, depending on the building. (But while 2D footprints can and often need to overlap, avoid overlapping 3D volumes – especially if the volumes have common faces.)
See the following section for building attribute tags typically applied to ways tagged with building:part=*.
Ways tagged with building:part=* are mainly considered for 3D rendering. 2D renderers ignore the building attribute tags described in the following section.
For buildings with a complex structure, a type=building relation can be used to group the building outline and all building parts together. However, there is no need to create a type=building relation if the building contains only a few building parts or has a simple structure
If there is no relation, an application should treat all building parts within the area of the building outline as part of that building.
Tagging for building outlines and parts
The following tags can be used on both building outlines and building parts.
Height and levels
|height=*||Distance between the lowest possible position with ground contact and the top of the roof of the building, excluding antennas, spires and other equipment mounted on the roof.|
|min_height=*|| Approximate height below the building structure.|
Note that when min_height is used, height is still defined as the distance from the ground to the top of the structure. So "bridge" with 3 meters height, where bottom part of the bridge is positioned 10 meters above ground level will have min_height=10, height=13.
|building:levels=*|| Number of floors of the building above ground (without levels in the roof), to be able to texture the building in a nice way.
If you tag new buildings, try to give a height value. Try to use building:levels=* only in addition to an height tag!
|building:min_level=*||levels skipped in a building part, analogous to min_height|
You can characterize the building roof using a catalogue of well known roof types. Additional roof shapes may be introduced later (S3DB_Proposals), including advanced approaches for manual modelling (e.g., ProposedRoofLines or parts of OSM-4D/Roof_table).
|roof:orientation=along/across||For roofs with a ridge the ridge is assumed to be parallel to the longest side of the building (roof:orientation=along). But it can be tagged explicitly with this tag.|
|roof:height=*||roof height in meters|
|roof:angle=*||Alternatively to roof:height=*, roof height can be indicated implicitly by providing the inclination of the sides (in degrees).|
|roof:levels=*||Number of floors within the roof, which are not already counted in building:levels=*.|
|roof:direction=*||direction from back side of roof to front, i.e. the direction towards which the main face of the roof is looking|
Again, some roofs (e.g., square buildings) cannot be accurately modeled with the simple techniques described on this page.
Surface color and material
|building:colour=*||Colour of the building façade. See colour=* for possible values.|
|roof:colour=*||Colour of the building roof. See colour=* for possible values.|
|building:material=*||Outer material for the building façade.|
|roof:material=*||Outer material for the building roof.|
To make it as easy as possible for the community, we started added details already to the following:
|Location||OpenStreetMap (2D)||OSM2World (3D)||OSMBuildings (3D)||F4 Map(3D)||OpenScienceMap||osm2x3d (x3d)||OSM_go (3D)|
|Rostock Südstadt (GER)||Link||Link||Link||Link||Link||Link|
|Scai's Tower (GER)||Link||Link||Link||Link||Link||Link||Go|
|Eiffel tower/Paris (FR)||Link||Link||Link||Link||Link||Link|
|Las Vegas (US)||Link||Link||Link||Link||Link||Link||Go⊗|
|New York (US)||Link||Link||Link||Link||Link||Link||Go|
|Warszawa (PL)||Link||(no rendering)||Link||Link||Link||Link|
There are many maps and tools that support the Simple 3D buildings schema. This is a list of known ones.
|Software Name||Schema Support||Description||Creator||Open source||Programming language|
|blender-osm||Partial||One click download and import of OpenStreetMap and terrain. Can import more than 100.000 buildings. A large number of roof shapes is supported: flat, gabled, hipped (for a quadrangle outline only), mono-pitched, half-hipped, round, pyramidal, gambrel, dome, onion and saltbox.||vvoovv||yes||Python|
|OSM2World||Partial||Currently implementing the remaining features for the 0.2.0 release - slippymap (Germany only)|
|Nutiteq Android 3D mapping SDK||Partial||most roof shapes supported|
|WikiMiniAtlas||Partial||only pyramidal roofs|
|F4 Map||Full||Demo Web Map with rendering and scene support|
|OpenScienceMap||Partial||Interprets only height/min_height tags client-side. The S3DB Layer uses vtm meshes generated on the server (using plpgsql with PostGIS and SFCGAL).|
|osm2x3d||Partial||see also  and |
|osmapa.pl mapnik stylesheet||Partial||most roof types implemented|
|Tangram||Partial||Mapzen renders 3D buildings in Tangram and other products||Mapzen||yes|
- F3DB (Full 3D buildings)