OpenIndoor

From OpenStreetMap Wiki
Jump to navigation Jump to search

Introduction

OpenIndoor transforms and add value to indoor data available on OpenStreetMap.

The result of this is a web-based application that provides indoor navigation help to non-technical users and allow mappers to validate their work before uploading them on OSM.

All is here: https://app.openindoor.io

git repo: https://github.com/open-indoor/openindoor6

This documentation provides detailed information of all the OSM indoor data tags that are rendered and how they are rendered in the OpenIndoor app.

With this approach, it will be easy for users to understand what are rendered with detailed description and be useful for the technical personnel to know the technology adopted for the rendering.






Summary of what are rendered:

Major Elements

Tag Description Element Rendering Screenshot
indoor=room A space surrounded by walls Area
  • Walls
  • floor color depends on the room type.
Screenshot 2021-12-21 at 13.44.27.png
indoor=corridor Unwalled connecting passage Area
  • No walls
  • Ground color = white (#ffffffff)
Screenshot 2021-12-21 at 14.15.44.png
indoor=area A space  without walls Area
  • No walls
  • Ground color = white (#ffffffff)
Screenshot 2021-12-21 at 14.23.43.png
access=no Area
  • Room/area/corridor filled
Screenshot 2021-12-21 at 14.20.23.png

Rooms

Tag Description Element Rendering Screenshot
room=shop A room for commercial activities such as exchange

of products or/and services for money

Area
  • Ground color = light yellow (#ffffebff)
  • Icon depends on type of shop
room=elevator A room used by an elevator to carry

passengers at different floor levels.

See also highway=elevator

Area
  • Ground color = light purple (#e8dce7ff)
  • Icon : elevator_64
room=entrance The first room of a building after

passing the main entrance, if any.

Area
  • Walls
  • Ground color = white (#ffffffff)
room=office An office room. Use office=* on

the whole or part of the building

Area
  • Ground color = light grey (#f2efe9ff)
room=class A classroom, where a reduced amount of students

can learn and work in groups

Area
  • Ground color = light grey (#f2efe9ff)
room=corridor A corridor, see also indoor=corridor Area
  • Ground color = white (#ffffffff)
room=stairs A staircase, a room containing stairs, combine with

highway=steps for routing

Area
  • Ground color = light purple (#e8dce7ff)
  • Icon : stairs_64
room=toilet A room containing one toilet only Area
  • Ground color = light blue (#dcdcebff)
  • Icon : toilets_64
room=waiting A room, usually with something to sit on,

where people wait

Area
  • Ground color = light grey (#f2e9eff)
  • Icon : waiting_64
room=reception A room where a receptionist employed by an organisation

receives or greet any visitors, patients, or clients and

answer telephone calls

Area
  • Ground color = light blue (#dcdcebff)
  • Icon : reception_64
⚐ room=storage Area
  • Ground color = light grey (#f2efe9ff)
  • Icon : ?
⚐ room=nursery A facility where some nurses may receive their patients.

Prefer healthcare=nurse.

Area - Ground color = light red (#ffc8beff)

- Icon : ?

Amenities

Tag Description Element Rendering Screenshot
amenity=restaurant Restaurant. The kind of food served

can be tagged

with cuisine=* and diet=*

Area
  • Ground color = light orange (#f4e6ddff)
  • Icon : restaurant_64
amenity=toilets Public toilets (might require a fee) Area
  • Ground color = light blue (#dcdcebff)
  • Icon : toilets_64
amenity=pharmacy Pharmacy: a shop where a pharmacist

sells medications

dispensing=yes/no - availability

of prescription-only medications

Area
  • Ground color = light red (#ffc8beff)
  • Icon : pharmacy_64
amenity=place_of_worship A church, mosque, or temple, etc.

Note that you also need religion=*,

usually denomination=*

and preferably

name=* as well as amenity=place_of_worship.

Area
amenity=post_office Post office building with postal services Area
  • Ground color = light yellow (#ffffebff
  • Icon : post_office_64
amenity=left_luggage Building that stores lost items and

allows owners to claim them

Area
  • Ground color = light blue (#dcdcebff)
  • Icon : left_luggage_64

Highways

Tag Description Element Rendering Screenshot
highway=footway. Used for mapping minor pathways which are used

mainly or exclusively by pedestrians.

Way
  • Red dotted line.
highway=steps For flights of steps (stairs) on footways. Way - Large red dotted line
Highway =steps

Conveying=yes

A moving staircase carrying people between

floors of a building.

Way - Red bold plain line

3D OBJECTS

Tag Description Element Rendering Screenshot
door=yes A generic door, use this only if you don't know the

kind of door or if it doesn't fit in another value.

Node
  • Rectangle door
  • Default width = 0,90m
door=hinged The traditional swinging door Node`
  • Rectangle door
  • Default width = 0,90m
⚐ door=sliding A sliding door Node
  • Rectangle door
  • Default width = ?
⚐ door=revolving A revolving door Node
  • Door shape ?
  • Default width = ?
⚐ door=folding A folding door Node
  • Rectangle door
  • Default width = ?
⚐ door=trapdoor A trapdoor Node
  • Square 2D door on the floor ?
  • Default width = ?
⚐ door=overhead A garage door - mostly rolling from overhead.

Used mainly for vehicles

Node
  • Rectangle door
  • Default width = ?
⚐ door=loading_truck The door for a loading dock - mostly an overhead door,

but usually not at the same level on the inside and outside,

as they provide access to a hgv's load floor.

Node
  • Rectangle door
  • Default width = ?
  • Level = ?
⚐ door=no If the door itself is removed or the entrance is simply

a hole in the wall,

Node
  • Transparent door
  • Default width = 0,90m
barrier=turnstile A turnstile is used to allow one person to pass at a time Node
  • 3D object
  • Icon : turnstile_64
amenity=vending_machine Node
  • 3D object (vending machine)
vending=parcel_pickup A vending-type machine allowing parcels to be received by their addressee. Node
amenity=reception_desk Node/Area
  • 3D object (desk)
  • Icon : reception_64
amenity=luggage_locker Node
  • 3D object (lockers)
  • Icon : luggage_locker_64
amenity=parcel_lockers a machine with lockers for picking-up parcels Node


Technical info on rendering

Rendering details

Here is how OpenIndoor app transforms OSM data before last step of rendering in MapLibre:

Walls

Screenshot 2021-12-11 at 08.36.49.png

Input

indoor=room / OSM way

Properties and geometry transformations

OSM to geojson

OSM ways are converted to Geojson LineString.

Bufferization

We use turfjs buffer function to generate a polygon around the LineString.

IMDF compliance

We add IMDF key/value feature_type="unit".

Rendering

We apply a maplibre "extrusion" rendering (3m height by default) on key/value conditions:

  • feature_type="unit"
  • indoor="room"

Doors

Screenshot 2021-12-11 at 09.01.56.png

Input

indoor=door / OSM node

Properties and geometry transformations

OSM to geojson

OSM node is converted to Geojson Point.

Bufferization

We create a circle around the point relying on door width.

Sometimes, OSM "width" key is defined, or 0.90cm by default.

Wall hole

To let space for the door, we cut the existing walls using turfjs difference function.

room.geometry = turf.difference(room, door_circle).geometry
Door birth

To build the door, we extract the intersection of wall and circle around door point.

new_door.geometry = turf.intersect(room, door_circle).geometry;
IMDF compliance

We add IMDF key/value feature_type="door".

See https://docs.ogc.org/cs/20-094/Categories/index.html#door

Rendering

We apply a maplibre "extrusion" rendering (3m height by default) on key/value conditions:

  • feature_type="door"
  • indoor="door"

Footway

Screenshot 2021-12-11 at 15.21.30.png

Input

highway=steps / OSM way

Properties and geometry transformations

OSM to geojson

OSM way is converted to Geojson LineString.

Rendering

We apply a maplibre "line" rendering (10 pixel width) on key/value conditions:

  • highway="steps" or
  • highway="footway"

Rendering summary

Tags/properties

/

Geometry

Rendering Conversion

to

geojson

Transformation IMDF maplibre

rendering

Interaction Screenshot
indoor=room

OSM type=way

Wall LineString bufferization + door buffer difference feature_type=unit type: extrusion info pop-up
Floor Polygon none type: fill

color: depending on

shop / amenity

info pop-up
Anchor none centroïd + bufferization feature_type=anchor type: fill info pop-up
Anchor none centroïd type: symbol

(text + icon)

info pop-up
indoor = corridor

OSM type=way

Floor Polygon none type: fill info pop-up
indoor=area

OSM type=way

Floor Polygon none type: fill info pop-up
indoor=door

OSM type=node

Door none buffer + wall intersection feature_type=door type: extrusion info pop-up
highway=footway

OSM type=way

Footway LineString type: coloured line info pop-up

+ navigation

highway=steps


Staircase LineString none type: coloured line

dash: [2, 2]

info pop-up

+ level change

highway = steps

conveying=yes

Escalator LineString none type: coloured line info pop-up

+ level change

room=elevator Elevator info pop-up

+ level change