From OpenStreetMap Wiki
< JOSM‎ | Plugins
Jump to navigation Jump to search
indoorhelper icon indoorhelper
a plug-in to create, validate and view indoor maps correctly

IndoorHelper is a JOSM plug-in to create, validate and view indoor maps correctly. It helps you to stay at one tagging scheme (Simple Indoor Tagging) and makes it easy to tag indoor objects quickly.

Quick animated how-to: Indoorhelper_how_to.gif


This plugin helps to map indoor objects using the Simple Indoor Tagging scheme.

  • tag object via button
  • always stay at Simple Indoor Tagging schema
  • create easy multipolygons
  • indoor object validation
  • provides a MapCSS
  • import BIM data (beta state)

About OSM indoor data

The following topics might be useful in case one wants to working with OSM indoor data

How to start - Guide to create indoor data

After the installation the plugin appears in the sidebar of JOSM. This plugin uses different JOSM functionality for example the AutoFilter.

Optional setup

Add indoor map (e.g. floorplans)

  • use Piclayer plugin to fit indoor maps into existing OpenStreetMap data or GPS-tracks. Make sure the mapping is done on a layer other than where the image is shown (two layers are needed).

Add new level to layer

  • draw the first object (of a new level) using the Insert level button. Press Insert level, insert level number, draw object and press spacebar. Repeat for each new level.


Mapped object with and without walls

Mapping workflow:

  1. select the current working level using AutoFilter
  2. draw the object
  3. tag the object using apply button

The recommended order of editing is:

  1. rooms, corridors, stairways, elevators and individual areas
  2. POIs (door/entrance)
  3. walls and windows

Why using this order?
This order provides a "layer-mapped"-schema. Rooms, corridors, stairs or elevators are on the bottom. Walls and windows are above. Now, if walls and windows are filtered (not shown on layer), the basic objects (rooms etc.) fill the whole space.

Click to view a tutorial GIF showing how to map the basic objects or see Indoorhelper_how_to.gif

Indoorhelper how to.gif

Mapping hints

Common mistakes

  • door or entry nodes are not connected to a room, corridor or area. Always connect an opening node to a basic object.
  • door or entry nodes are connected to a wall. Do not map a wall object where a door or entry node should be. Interrupt the wall for an opening node.
  • freestanding walls are not part of a relation. Map freestanding walls as part of a multipolygon with role=inner.


  • if an object appears on multiple levels use repeat_on=*-tag (description see below). So you only need to map the object once
  • stairways should be tagged with incline=*
  • for more information about how to tag specific objects have a look at JOSM Presets


Indoorhelper main.png

Level Bar

Field/Button Action Description
Level name Name the current level Insert optional level name. Confirm with the apply button. The object will be tagged with level_name=*.
Working level A dynamic field showing the current working level The field shows the current working level set by using the AutoFilter. This function is not working without the AutoFilter
  • number : the current working level. Other objects are disabled
  • NONE : no level is selected or AutoFilter is not active
Checkbox Activate/deactivate automatic level tagging If active the current object will be tagged with level=*
Insert level Add a new level to layer how to:
  1. push Insert level button to open level selector view
  2. insert new level number (e.g. 1, -4, 0)
  3. apply with OK
  4. draw object and press spacebar

Tagging Bar

Panel provides tag presets via buttons

Field/Dropdown Description
Object Available tags can be selested by using the dropdown menu. If no tagging is requested select NONE. A detailed tag map follows
Name Tags the object with a name tag (e.g. ROOM - classroom will be tagged with name=classroom)
Reference Tags the object with a reference tag (e.g. classroom - R025 will be tagged with ref=R025)
Repeat_on Set the levels on which the object appears (e.g. elevator - 3-4, means the elevator is starting at level 2 and is repeated until level 4. Also possible -3-6 or -3--1)

About repeat_on=*:

  • tells if an object connects one or more level (e.g. stairways, elevators). See also Simple Indoor Tagging)
  • to simplify mapping the plugin supports objects tagged with repeat_on=* (e.g. stairways, elevators). If a level filter is active the object will be shown if repeat_on=* value includes active level

Tagging map:

Plugin tag Tag map Usable with
CONCRETE_WALL indoor=wall, material=concrete closed wayway
DOOR_PRIVATE door=yes, access=private Mf node.svgway
DOOR_PUBLIC door=yes, access=yes Mf node.svgway
ELEVATOR highway=elevator closed wayMf node.svg
ENTRANCE entrance=yes Mf node.svgway
ACCESS_PRIVATE access=private Mf node.svgway
ACCESS_PUBLIC access=yes Mf node.svgway
ENTRANCE_EXIT_ONLY entrance=exit Mf node.svgclosed way
TOILET_FEMALE indoor=room, amenity=toilets, female=yes closed way
TOILET_MALE indoor=room, amenity=toilets, male=yes closed way
GLASS_WALL indoor=wall, material=glass closed wayway
ROOM indoor=room closed way
STEPS highway=steps closed way
CORRIDOR indoor=corridor closed way
BENCH amenity=bench closed wayMf node.svg
AREA indoor=area closed wayMf node.svg
NONE no tagging of indoor objects

Preset Buttons

On the right side of the panel you can find the preset button section. These buttons are created depending on what objects you are using the most. To use these presets, just draw an object and click on the preset you would like to apply.

Multipolygon Bar

This tool is to add simple multipolygons only.

The recommended order of editing is:

  1. add outline member with role=outer by outer button
  2. add inner member with role=inner by inner button

How to:

  1. push outer button to select drawing action
  2. map the object, press spacebar to add the outer object with role=outer
  3. push the role=inner to select drawing action
  4. map the object and press spacebar to finish. After that select the "outer"-object you want to add the "inner"-object to. If selected push enter to add the object with role=inner

If you want to add more than one "inner"-object, skip step 1,2 and restart at step 3. To deactivate this tool use the checkbox next to it.


BIM import icon.png
The plugin includes an import functionality for .ifc (BIM) files. To import a new .ifc add a new layer and use the BIM import button (FileImport BIM File). Please note that the import functionality is a beta version!

A GIF showing how to import BIM files:

Data Scheme

The data scheme which underlies the plug-in is based on the Simple Indoor Tagging approach but has some differences or improvements. It is completely based on tags and is therefore easy to understand. To hold it simple the most important objects are directly tagged with indoor=*. To make sure the tagging is always on Simple Indoor Tagging standards specific objects will be automatically tagged with needed tag-combinations (example: TOILET_FEMALE : indoor=room, amenity=toilets, female=yes). For more information see Tagging Bar.

Data Validation

MapCSS Rendertheme

Rendering of the MapCSS rendertheme in low, mid and high zoom levels

The first way of data validation is the MapCSS rendertheme which comes with the plug-in. It is installed during the first start. Thus the user does not have to care about it and has a instant graphical validation of the mapped data.

The rendertheme uses the zoomlevel filtering of MapCSS to show the data in different ways depending on the zoom level of JOSM. For example in a high zoom level every detail is shown and in a low zoom levels rooms and POIs are hidden.

JOSM Validator

The other method which can be used to validate the data is the JOSM validator file which is also installed with the plug-in.

The validator alarms the user if following mapping errors occur:

  • way or node without the tag level=*
  • properties which should be only assigned to ways are assigned to nodes
  • properties which should be only assigned to nodes are assigned to ways

The validation check is done every time when the user clicks the "apply"-button or a preset button.


  • It's just a graphical representation
    • therefore not suited for routing
  • It is no usable standard (yet)


Created by User:Erigrus

Maintainer: User:Rebsc

Source Code: JOSM/indoorhelper

Projects: JOSM/indoorhelper/projects

BIMtoOSM Parser Code: rebeccasc/BIMtoOSM

See also