Simple Indoor Tagging
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

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

The overall layout of indoor spaces is described by indoor=* elements with level=* tags.
| Key / Value | Element | Description |
|---|---|---|
indoor=room
|
Conventional room with walls. | |
indoor=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
|
Enclosed walkway area that connects rooms. Like indoor=area, it is not necessarily surrounded by walls.
| |
indoor=wall
|
Individual (non-passable) wall element (when not already sufficiently defined by indoor=room). See #Walls.
| |
indoor=level
|
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
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.

Walls are usually mapped as
ways along the centerline of the wall, and this is the preferred representation. However, it is possible to map walls as
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
|
Door of unknown type | |
no
|
Opening in the wall which allows passage but is not covered with a door | ||
| * | 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
|
* | 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 | stairs=yes + indoor=room or indoor=area when there are no walls. (+ conveying=yes for staircases with escalators)
| |
| Elevator | 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.

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 | highway=steps
| |
| Escalator | highway=steps + conveying=yes
|
Advanced modelling of the different levels (floors)

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=*
|
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=*
|
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
- Some
Osmose checks (list, map, stats) are available for Quality Assurance. - Indoor/use cases
- Other/previous indoor tagging schemes: Indoor Mapping#Previous tagging proposals



