Source: https://developers.woosmap.com/products/indoor-api/concepts/mapping/

> For clean Markdown of any page, append `.md` to the page URL.

> For a complete documentation index, see https://developers.woosmap.com/llms.txt

# Venue Setup & Digitization



## 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](https://www.woosmap.com/contact)

### Recommended Software

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/](https://josm.openstreetmap.de/)

<p align="left">
  <img alt="JOSM Logo" src="/assets/images/indoor/josm-logo.png" width="50px">
</p>

### 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](/assets/images/indoor/map-on-top-of-woosmap-map.png)

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](/assets/images/indoor/josm-imagery.png)

Then, you will see OpenStreetMap Map as a background:
![JOSM - Using OSM Map as background](/assets/images/indoor/josm-osm-background.png)

### 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](/products/indoor-api/concepts/indoor-pois/)._

## 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](/assets/images/indoor/indoor-routing.png)

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](/assets/images/indoor/icons/indoor-highway-elevator.png) Elevator - Add `highway=elevator` property.
- ![stairs](/assets/images/indoor/icons/indoor-highway-steps.png) Stairs - Add `highway=steps` property.
- ![escalator](/assets/images/indoor/icons/indoor-conveying-forward.png) 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](https://console.woosmap.com):

### Step 1: Enable Required Products

1. Navigate to the **Products** tab
2. Enable **Map API**
3. Enable **Indoor API** ![Woosmap Console - Enable product](/assets/images/indoor/console-product-enabled.png)

### Step 2: Create New Venue

1. Open the **Venues** tab
2. Click **"New Venue"** button ![Woosmap Console - Venue view](/assets/images/indoor/console-venue-view.png)

### 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](/assets/images/indoor/console-create-venue.png)

### 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](https://console.woosmap.com)
- 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](https://www.woosmap.com/contact)
