OpenLevelUp/Recommended tagging

From OpenStreetMap Wiki
Jump to: navigation, search
Available languages — OpenLevelUp/Recommended tagging
Afrikaans Alemannisch aragonés asturianu azərbaycanca Bahasa Indonesia Bahasa Melayu Bân-lâm-gú Basa Jawa Baso Minangkabau bosanski brezhoneg català čeština dansk Deutsch eesti English español Esperanto estremeñu euskara français Frysk Gaeilge Gàidhlig galego Hausa hrvatski Igbo interlingua Interlingue isiXhosa isiZulu íslenska italiano Kiswahili Kreyòl ayisyen kréyòl gwadloupéyen kurdî latviešu Lëtzebuergesch lietuvių magyar Malagasy Malti Nederlands Nedersaksies norsk norsk nynorsk occitan Oromoo oʻzbekcha/ўзбекча Plattdüütsch polski português română shqip slovenčina slovenščina Soomaaliga suomi svenska Tiếng Việt Türkçe Vahcuengh vèneto Wolof Yorùbá Zazaki српски / srpski беларуская български қазақша македонски монгол русский тоҷикӣ українська Ελληνικά Հայերեն ქართული नेपाली मराठी हिन्दी অসমীয়া বাংলা ਪੰਜਾਬੀ ગુજરાતી ଓଡ଼ିଆ தமிழ் తెలుగు ಕನ್ನಡ മലയാളം සිංහල ไทย မြန်မာဘာသာ ລາວ ភាសាខ្មែរ ⵜⴰⵎⴰⵣⵉⵖⵜ አማርኛ 한국어 日本語 中文(简体)‎ 吴语 粵語 中文(繁體)‎ ייִדיש עברית اردو العربية پښتو سنڌي فارسی ދިވެހިބަސް
Indoor mapping is cool and useful !

As there is no widely-adopted consensus on indoor mapping, OpenLevelUp uses the two current ways of marking indoor objects: based on indoor=* and on buildingpart=*. However, to make indoor-related contributions easier, it's essential to have a good documentation. That's why this page explains how to map indoor data in a simple way, based on the Simple Indoor Tagging scheme. But as said before, it's not the only way, but it works and is simple to understand and to process.

In this tutorial, we state that you've already collected all the data about building, floors and rooms. This is focused on the way to indicate this data in OpenStreetMap, and make it clean enough for a good rendering in OpenLevelUp (but remember that we don't tag for the renderer).


The first thing to do is map the building you want to represent. This part is more standardized, based on the building=* tag and the Simple 3D Buildings scheme. Basically, you have to draw the area area representing the building, and add the building=* tag. When this is done, you can start mapping the inside of the building.

Indoor spaces

Example of a simple floor


Buildings are composed of several floors, and each floor has a lot of rooms, corridors, areas. These elements are named here indoor spaces. Every indoor space will be represented by an area area. We must add a level=* value on every object, this indicates the floor inside the building where the space is located. Then, we indicate the kind of space we have:

  • Rooms are spaces surrounded by walls, accessible by passing a door. A room has a specific function. These are marked with indoor=room.
  • Corridors are spaces not surrounded by walls where people can walk from one room to another. A corridor hasn't any function, except to go from one point to another. These are marked with indoor=corridor.
  • Areas are spaces not surrounded by walls, most of the time they are wider than rooms. They may have a function. These are marked with indoor=area.

Walls and doors

As said previously, some indoor spaces don't have walls. This definition allows to represent complex floors. When you use corridors and areas, you must add walls around (except on segments shared with rooms, because they already have walls). To do so, create way ways with the indoor=wall tag (and the level=* tag, like every object).

When you have added indoor spaces, it is interesting to add how to go from one to another using doors. To add a door, create a node node on the shared segment of two indoor spaces and add door=* and level=* tags. For door which permits to enter the building from the outside, you may add entrance=*.


You can add more details on each indoor space. These tags may be interesting:

  • name=* - The name of the room/area/corridor
  • ref=* - Its reference/number (for example A007)
  • room=* - Only for rooms, to precise its function (shop, laboratory, office, ...)
  • access=* - Who is allowed to go to this space
  • But also any amenity=*, shop=*, office=*... value

Connection between levels

Once each floor is represented, you may want to represent how to go from one to another, these are the connections between levels. These exists with stairs, escalators and elevators.


Elevators are simple to represent. You have to create a node node or an area area where it can be found and put the highway=elevator tag on it. Then add level=* tag, with semicolons separated values to mark the floors where the elevator is accessible. For example, an elevator which can be taken on floors 0, 1 and 3 will have level=0;1;3. For continuous ranges of levels, you can use a dash, for example level=0-3 will stop at levels 0, 1, 2 and 3.

For an elevator with two doors, you may add one node node with door=sliding per entrance, and add on each of them the concerned levels with level=*. For example, an elevator which goes from floors 0 to 5, but the door on ground floor is different will be tagged as:

  • Elevator: way with highway=elevator + level=0-5
  • Door 1: node (on an elevator way segment) with door=sliding + level=0
  • Door 2: node (on another elevator way segment) with door=sliding + level=1-5

Stairs and escalators

Side view of an escalator

Stairs and escalators are represented using way ways, and we add highway=steps tag (and conveying=* for escalators). The way itself must also have a level=* value, indicating the levels where it can be taken. Each node at the extremity of the way must be connected to an indoor space area segment, and have door=* and level=* tags. For stairs/escalators without doors at their extremities, use door=no.

Objects inside indoor spaces

When you're done adding all spaces and connections between levels, you may add the objects contained in each room/area. For these points of interest, just add the same tags as elsewhere, but don't forget to associate a level=* tag on every object you add. This makes possible to know on which floor it is located.

See also