Simple Indoor Tagging

From OpenStreetMap Wiki
Jump to navigation Jump to search

Simple Indoor Tagging is a tagging schema for Indoor Mapping. It is simple to use but still holistic to cover even complicated situations.

It is intended to serve various use cases, including indoor navigation/routing, floor plans and 3D maps for public buildings.

Characteristics of the model include:

  • Assigning elements to different levels of a building using level=* tags
  • Mapping indoor spaces such as rooms and corridors as areas
  • Relying on existing OSM tags for features found both outdoors and indoors.

Compatibility with Simple 3D Buildings (S3DB) is an explicit goal of Simple Indoor Tagging (SIT). When combining SIT with S3DB, tags from both should be used at the same time.

History

Simple Indoor Tagging is a curated standard which was initially created in 2014 by SimonPoole, Tordanik, Peda and Andi. It has since been updated with lessons learned from real-world use by mappers and data consumers, e.g. at the OSM indoor workshops in 2022 and 2026.

The model / tagging schema

In the following section, the model is presented and described

Simple POI mapping

Illustration of simple POI mapping

Mapping of objects in OSM works best when there is no upfront requirement to immediately add everything in great detail. Most of the time mapping progresses from rough to detailed to insane. To support this we need to define a simple POI mapping scheme that can be used together with the indoor schema to allow visualisation and routing even when detailed floor plans are not available.

One approach is to allow such nodes simply to be tagged with a "level" tag. To make this simple enough to consume we suggest that either on the building outline or on the building relation at min_level=* and max_level=* should be tagged.

In the simplest case this would require only the addition of 2 tags to the building polygon and level tags to the POIs for a rough visualisation to work (routing would not be supported without additional indoor elements).

Key Description Example value(s)
level=* the physical level number the POI is located on level=3, level=-1
level:ref=* the signposted level number the POI is located on level:ref=B1, level:ref=LG, level:ref=G, level:ref=1

Building

To make it easy for data consumers to find buildings with indoor coverage we suggest the tags min_level=* and max_level=*. In some countries specific level values are not assigned, e.g. floor 13 in western countries or floor 4 in East Asia. To make these cases easier to map, we propose non_existent_levels=*.

Key Description Example value(s)
min_level=* minimum indoor level min_level=-1
max_level=* maximum indoor level max_level=14
non_existent_levels=* optional: levels which don't exist e.g. for regional reasons non_existent_levels=4;13

Indoor elements

Illustration of the 4 basic indoor elements

The overall layout of indoor spaces is described by indoor=* elements with level=* tags.

Key / Value Element Description
indoor=room area Conventional room with walls.
indoor=area area Area which is not (entirely) surrounded by walls. Only has walls where they are defined by explicit indoor=wall mapping or adjacent rooms.
indoor=corridor area Enclosed walkway area that connects rooms. Like indoor=area, it is not necessarily surrounded by walls.
indoor=wall wayarea Individual (non-passable) wall element (when not already sufficiently defined by indoor=room). See #Walls.
indoor=level area Can optionally be used for advanced modelling of building levels. Describes the outline of the level and provides a place to add additional information such as a floor name.

Indoor spaces

In Simple Indoor Tagging, indoor spaces with a covered area (e.g. rooms, staircases or corridors) are mapped as area areas (closed ways or multipolygons).

The main distinction is between indoor=room and indoor=area: The former is used if the space is surrounded by walls on all sides (including inner rings of multipolygons), while the latter only has walls where they are defined by explicit indoor=wall mapping or adjacent rooms.

Additionally, indoor=corridor exists as a very common type of indoor=area with a particular function. Otherwise, the purpose of a room or area can be described by a room=* subtag. Other tags can be added to indoor elements as well, for example:

Key Description Example value(s)
level=* MANDATORY - The level the indoor element is located on level=111, level=-1
name=* the name of the indoor element (e.g. the room name) name=Vesalius Aula, name=Audimax
ref=* the ref of the indoor element (e.g. the room number) ref=101, ref=01.15
height=* individual height of an indoor element (default unit is meter) height=3, height=2.5 m

Walls

All indoor=room areas are assumed to be surrounded by walls. In addition, it is possible to map walls explicitly as elements tagged indoor=wall + level=*. This can make sense, for example, to map the walls separating two indoor=areas, to be able to additional tags to a wall (such as width=*), or to be able to map irregularly shaped walls as areas.

Door placement in a thick wall

Walls are usually mapped as way ways along the centerline of the wall, and this is the preferred representation. However, it is possible to map walls as area areas tagged indoor=wall + area=yes to represent irregular, non-uniform walls.

In either case, indoor=wall elements should share nodes with the indoor spaces adjacent to the wall. Likewise, the individual indoor spaces should share nodes where they share a wall in the real world. Where a room shares nodes with an indoor=wall element (way or area), the explicitly mapped wall replaces the implied wall for that section of the room outline.

Connections between rooms are mapped with door nodes in the wall way, see that section for details. Door nodes can only be placed in walls mapped as ways (or implied by room outlines), not walls mapped as areas.

Doors and windows

Doors are mapped as nodes with both indoor=door and door. A door node is shared between the rooms which the door connects and by the wall way (if any). Doors which are entrances to or exits from the building are instead conventionally tagged as entrance=* instead of indoor=door but still have the door key.

Key Value Element Description
door yes node Door of unknown type
no node Opening in the wall which allows passage but is not covered with a door
* node Door of a particular type, see Key:door for possible values

Windows are similarly mapped as nodes in walls, room outlines and building outlines. They can exist both in interior and exterior walls.

Key Value Element Description
window * node Location of a single window (or vertical column of windows if used with repeat_on=*)

It is possible to add additional tags to describe a door or window in detail. Tagging standards for these are proposed and documented separately from Simple Indoor Tagging. Refer to, for example:


Vertical connections

Staircases and elevators

Staircases and escalators follow the same logic as multi-level rooms. They span multiple levels and are connected to other indoor spaces (such as indoor=corridors) via a door=* node on each floor (including door=no when no physical door is present).

Use a semicolon separated list of levels or a level range to define the levels covered by the staircase or elevator. For example, level=0;1 or level=0-1 could be used on some stairs that connect levels 0 and 1. Stairs connecting levels 2 and 4 would be tagged level=2;3;4 or level=2-4 – regardless whether level 3 can be accessed from these stairs.

A uniform staircase or classic elevators would lead to duplicate door nodes in the same way. The nodes are also at the same lat/long coordinates, only differing in the level value. For these cases we recommend to use only one door=* node with a repeat_on=* tag, e.g. repeat_on=1;2 or repeat_on=1-5 (more see below). We recommend consumers of indoor data to duplicate these objects during preprocessing, using one level value for each. Also see the section on #Multi-level features and repeated features.

Photo Use case Tagging
Staircase area stairs=yes
+ indoor=room or indoor=area when there are no walls.
(+ conveying=yes for staircases with escalators)
Elevator area highway=elevator
+ indoor=room or in special cases indoor=area when there are no walls.

Steps

Individual flights of steps, either outside of staircases or as optional extra detail inside a staircase, can be mapped as highway=steps ways with a suitable level=* tag. As with staircases or elevators, the level value should be a level range or semicolon-separated level list.

Example of stairs with a landing

As with outdoor steps, the extent of the steps can optionally be mapped by drawing an area:highway=steps polygon in addition to the way. Add the same level=* to the way and the polygon.

Photo Use case Tagging
Steps way highway=steps
Escalator way highway=steps + conveying=yes

Advanced modelling of the different levels (floors)

Sketch for a slightly more complicated example using building:parts

All elements on the same level get a level tag.

Key Description Example value(s)
level=* Describes on which level the element is (0 is normally the ground-level, -1 is the first basement etc.) level=0, level=-2, level=3

Local level notations per building should be reused. e.g. at Munich Airport, 3 is the ground level.

Reasonable and sensible keys and values which could be added to an optional level-outline (indoor=level) are mentioned in the following table:

Key Description Example value(s)
name=* the name of the corresponding level name=Ground floor
level:ref=* the number or code of the level. This models the level numbering scheme as it is displayed in the building itself, e.g. on floor plans or elevator buttons, which may be different from the level=* value. level:ref=K level:ref=E level:ref=3
height=* the height of the level (with default unit meter) height=4
level=* describes which level number the current level has (0 is normally the ground-level, -1 is the first basement etc.) level=0, level=-2, level=3

Multi-level features and repeated features

Key Elements Description Example value(s)
level=* nodewayarea in addition to the previously described cases, features spanning multiple levels (e.g. stairs, elevator shafts, high rooms) can be mapped by listing more than one level in the value level=1;2, level=-1-5, level=-4--2
repeat_on=* node features that have identical copies on other floors can be mapped as a single node with this tag. This should be used sparingly and only if it is necessary (often the case with windows and elevator/staircase doors). The starting level is not included in this list, e.g. a feature with level="0" then repeat_on starts with "1". repeat_on=1;3, repeat_on=0-6

See also