Venue Setup & Digitization

This comprehensive guide explains how to digitalize an indoor venue from scratch. The digitalization process transforms your physical space into a digital representation that can be used with the Woosmap Indoor API.

Overview

Woosmap Indoor consists of APIs and tools to configure and view maps for indoor environments. These maps are digital representations of cartographical drawings with familiar features like tilt, rotate, zoom, and 2D extrusion.

The elements on the maps (Points of Interest or POIs) are defined during digitization and are searchable. The maps also contain defined pathways that act as a navigation network, providing user-friendly walkways and inter-floor connections.

Let the Woosmap team manage your complete digitization workflow — transforming raw floor plans into production-ready GeoJSON files with POIs, routing graphs, and profiles included. Get in touch to begin

To create your indoor venue, you’ll need to upload a GeoJSON file to the Woosmap platform. We recommend using JOSM (Java OpenStreetMap editor) for creating this file.

JOSM is a free, open-source desktop editing tool that provides:

  • GPX file importing (GPS tracks)
  • Aerial imagery support
  • Multiple cartographic projections
  • Layer management
  • Data validation tools
  • Preset configurations and rendering styles
  • Extensive plugin ecosystem

Download JOSM: https://josm.openstreetmap.de/

JOSM Logo

Setting Up Your Workspace

Since your indoor map will be displayed on the Woosmap Map, use OpenStreetMap data for georeferencing your features:

  1. Open JOSM
  2. Navigate to Imagery menu
  3. Select “OpenStreetMap Carto”
  4. The OSM map will appear as your background layer for accurate georeferencing

An indoor map rendered on top of the Woosmap Map.

Indoor map on top of Woosmap Map

In JOSM, you can easily add the OpenStreetMap Map as a background. Open Imagery menu and select “OpenStreetMap Carto”: JOSM - Using OSM Map as background

Then, you will see OpenStreetMap Map as a background: JOSM - Using OSM Map as background

GeoJSON Format Requirements

GeoJSON is an open standard format for representing geographical features based on JSON. Your indoor venue file will consist of multiple features.

Example Feature Structure:

JSON
        {
  "type": "Feature",
  "properties": {
    "indoor": "yes",
    "level": "0",
    "amenity": "toilets",
    "name": "Building entrance",
    "name:fr": "Entrée du batiment"
  },
  "geometry": {
    "type": "Point",
    "coordinates": [3.92162187466, 43.60666618464]
  }
}

    

All features consist of:

  • Geometry: Array of lat/lng coordinates defining the shape
  • Properties: Metadata describing the feature

Venue Structure

Indoor venues in Woosmap are organized hierarchically:

        Venue
  ├── Buildings (multiple buildings per venue)
  │   ├── Levels (floors)
  │   │   ├── POIs (points of interest)
  │   │   └── Paths (navigation network)
  └── Metadata (categories, styles, settings)

    

Mandatory Properties

To be processed by Woosmap, these properties are required:

  1. indoor (required): Defines the feature type (see types below)
  2. level (required): Integer representing the floor level
    • Use semicolon-separated integers for multi-level features (e.g., “0;3” for stairs)
  3. ref (optional but recommended): Unique identifier for the feature
    • Must be unique across the entire venue
    • Used as a functional identifier (e.g., “ref:bakery001”)

Feature Types Using indoor Property

The indoor property determines how the feature is styled and rendered:

Floor Level Boundaries - indoor = "level"

  • Create polygons to define the boundaries of each floor level
  • Establishes the outer perimeter of the level

Rooms with Walls - indoor = "room"

  • Create enclosed spaces with walls
  • Used for shops, offices, conference rooms, etc.
  • Acts as an obstacle in routing

Areas without Walls - indoor = "area"

  • Create open spaces like halls, atriums, or zones
  • Not considered obstacles in navigation
  • Can be crossed by routing algorithms

Other Features - indoor = "yes"

  • All other features including POIs and routing graph elements
  • General-purpose classification

Creating Points of Interest (POIs)

A feature with a name property is automatically categorized as a POI, making it searchable through the Indoor Search API.

Basic POI Example:

JSON
        {
  "type": "Feature",
  "properties": {
    "indoor": "yes",
    "level": "1",
    "name": "Artisan Bakery",
    "shop": "bakery"
  },
  "geometry": {
    "type": "Point",
    "coordinates": [3.92162187466, 43.60666618464]
  }
}

    

Applying Types to POIs

Assign a type to your POI to give it a visual identity with icons and colors. Types are based on OpenStreetMap tagging conventions:

Main Type Families:

  1. amenity=*: Useful facilities for visitors
  2. shop=*: Commercial establishments
  3. room=*: Rooms inside buildings

Amenity Types (selected examples):

  • amenity=toilets - Restrooms
  • amenity=restaurant - Dining establishments
  • amenity=cafe - Coffee shops
  • amenity=parking - Parking areas
  • amenity=atm - ATM machines
  • amenity=reception_desk - Reception areas
  • amenity=smoking_area - Designated smoking zones
  • amenity=drinking_water - Water fountains
  • amenity=pharmacy - Pharmacy/drugstore
  • amenity=place_of_worship - Religious spaces
  • amenity=food_court - Food courts
  • amenity=lounge - Waiting lounges

Shop Types (selected examples):

  • shop=bakery - Bakeries
  • shop=clothes - Clothing stores
  • shop=electronics - Electronics retailers
  • shop=jewelry - Jewelry stores
  • shop=supermarket - Supermarkets
  • shop=beauty - Beauty salons
  • shop=mobile - Mobile phone shops
  • shop=gift - Gift shops
  • shop=duty_free - Duty-free shops
  • shop=travel_agency - Travel agencies

Room Types (selected examples):

  • room=office - Office spaces
  • room=meeting - Meeting rooms
  • room=class - Classrooms
  • room=storage - Storage rooms
  • room=kitchen - Kitchen areas
  • room=server - Server rooms
  • room=laboratory - Labs

For complete lists with icons, refer to the digitalization guide.

Creating the Routing Graph

The routing graph defines walkable pathways for navigation. Create this after adding all POIs.

Pathways

Pathways connect POIs and define the navigation network. Routing example - Gare du Nord

The Woosmap Console doesn’t allow you to create/edit the routing graph; you must manage it on JOSM.

Requirements

  • Pathways should touch each POI
  • For irregular POI shapes, extend pathways inside the POI
  • Prefer simple networks over complicated meshes
  • Avoid creating closed loops
  • Each node should be used only once per pathway

Pathway Properties

JSON
        {
  "type": "Feature",
  "properties": {
    "highway": "footway",
    "level": "0",
    "indoor": "yes",
    "oneway": "yes" // Optional: for one-way paths
  },
  "geometry": {
    "type": "LineString",
    "coordinates": [
      [3.9218735, 43.6063247],
      [3.9218079, 43.6063868],
      [3.92155344244, 43.60662792236]
    ]
  }
}

    

One-way Paths:

  • Add oneway=yes property
  • Direction is determined by the order of coordinates in the geometry array

Floor Level Connectors

Connect multiple floor levels with specialized features.

Connector Types:

  • elevator Elevator - Add highway=elevator property.
  • stairs Stairs - Add highway=steps property.
  • escalator Escalator - Add highway=steps and conveying=forward properties.
  • Ramps: Accessible inclines

Multi-level Property: Use semicolon-separated level values:

JSON
        {
  "type": "Feature",
  "properties": {
    "level": "0;3",
    "highway": "elevator",
    "indoor": "yes"
  },
  "geometry": {
    "type": "Point",
    "coordinates": [3.92176099159, 43.60670179445]
  }
}

    

Routing Profiles

Control access to specific paths based on user types or accessibility requirements.

Profile Property:

JSON
        "properties": {
  "level": "0",
  "highway": "footway",
  "indoor": "yes",
  "woosmap:routingprofile": "valid"
}

    

Common Profiles:

  • valid: Standard accessible paths (suitable for everyone, including wheelchair users)
  • wheelchair: Wheelchair-accessible routes only (no stairs)
  • staff: Staff-only access routes
  • premium: VIP or premium customer routes
  • security: Security personnel routes
  • emergency: Fastest evacuation routes

Multiple Profiles: Separate multiple profiles with semicolons: "woosmap:routingprofile": "valid;staff"

Best Practices:

  • Mark stairs and escalators appropriately for wheelchair routing
  • Use valid profile for general accessible routes
  • Use wheelchair profile to restrict routes for mobility-impaired users
  • Create separate routing profiles for different user categories

Uploading Your GeoJSON

Once your GeoJSON file is ready, follow these steps in the Woosmap Console:

Step 1: Enable Required Products

  1. Navigate to the Products tab
  2. Enable Map API
  3. Enable Indoor API Woosmap Console - Enable product

Step 2: Create New Venue

  1. Open the Venues tab
  2. Click “New Venue” button Woosmap Console - Venue view

Step 3: Upload and Configure

  1. Define a unique Venue ID (e.g., “mall_downtown”)
  2. Set a Display Name for your venue
  3. Upload your GeoJSON file
  4. Click Create Woosmap Console - Create a venue

Step 4: Finalize POI Data

After upload, use the Woosmap Console to:

  • Review and edit POI information
  • Set opening hours
  • Add descriptions and images
  • Configure contact information
  • Assign categories and tags
  • Set accessibility attributes

Validation Checklist

Before uploading, verify your GeoJSON:

  • All features have indoor property
  • All features have level property (integer)
  • All ref values are unique
  • POIs have name property
  • POIs have appropriate type (amenity/shop/room)
  • Pathways use highway=footway
  • Floor connectors have multi-level property
  • Routing profiles are applied where needed
  • Coordinates are in correct format [lng, lat]
  • No closed pathway loops
  • Pathways connect to POIs

Common Issues and Solutions

Issue: POIs not searchable

  • Solution: Ensure name property is present

Issue: Navigation doesn’t work

  • Solution: Check that pathways form a connected network and touch all POIs

Issue: Wheelchair routing fails

  • Solution: Mark stairs/escalators appropriately and ensure elevator paths exist

Issue: POI doesn’t display with icon

  • Solution: Verify correct amenity/shop/room property is set

Issue: Multi-floor navigation fails

  • Solution: Ensure floor connectors have correct level property (e.g., “0;1”)

Integration Path

Step 1: Set Up Your Venue

  • Follow the “Create Your Indoor Map” guide above to digitalize your space
  • Upload GeoJSON to Woosmap Console
  • Receive your unique Venue ID
  • Configure POI data and categories

Step 2: Obtain API Credentials

  • Register at Woosmap Console
  • Create a new project
  • Generate API keys (public and private)
  • Configure allowed domains/apps

Step 3: Choose Integration Method

  • Web Apps: Use Map JS API with IndoorRenderer
  • Mobile Apps: Use iOS, Android, React Native, or Flutter SDKs
  • Backend Services: Use REST API with private key
  • Quick Prototyping: Use Indoor Widget

Step 4: Implement Core Features

  1. Display indoor map with IndoorRenderer
  2. Add POI search with Autocomplete
  3. Implement navigation with Directions service
  4. Optimize with Distance Matrix for nearest POI

Step 5: Enhance User Experience

  • Add floor selectors
  • Implement “You Are Here” markers
  • Show route visualization
  • Add landmarks in instructions
  • Support accessibility features

Need Help?

Woosmap Digitization Service

Not ready to digitize your venue yourself? Woosmap offers a professional digitization service. Our team takes your existing floor plans and produces a fully configured GeoJSON file including POIs, routing graph, floor connectors, and routing profiles — ready to upload and go live.

Contact us about venue digitization

Was this helpful?