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 representing the building, and add the building=* tag. When this is done, you can start mapping the inside of the building.
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. We must add a level=* value on every object, this indicate 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 doesn't have walls. This definition allows to represent complex floors. When you use corridors and areas, you must add walls around (except on shared segments with rooms, because they already have walls). To do so, create 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 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 or an 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 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
Stairs and escalators are represented using 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.