## integrations ### Integrations Overview # Integrations Overview !Mappedin Integrations Mappedin offers powerful integrations with today's most popular mapping and visualization libraries. Our partners and customers leverage these integrations to create innovative solutions for diverse use cases. Through our comprehensive set of flexible tools and APIs, you can seamlessly integrate indoor maps into various applications and technologies, such as: - Indoor Positioning Systems (IPS) - Asset Tracking - Inventory Management - Digital Signage - Customer Analytics - Emergency Management - Leasing Management Systems - Workplace Management and Collaboration - And more! ## Platform Integration Options Mappedin provides multiple integration pathways to suit your specific implementation needs. Whether you're looking to analyze foot traffic patterns, embed interactive maps into your website, integrate with popular mapping libraries, connect with third-party mapping providers, develop custom solutions using Mappedin SDKs, or set up automated workflows with webhooks, Mappedin offers flexible solutions to help you achieve your goals. Explore the following integration options to find the best fit for your project: - Analytics - Asset Tracking - Digital Signage - Embeddable Maps - Emergency Management - Mapping Libraries - Mapping Providers - Mappedin SDKs - Webhooks - Workplace Management and Collaboration ### Webhooks # Webhooks > Webhooks are available to customers on the Mappedin Pro tier. Please contact us to enable this feature on your workspace. Webhooks are a way to notify an app when certain events happen in Mappedin. Webhooks are initiated over an HTTPS POST request and have a JSON payload that is unique to each event as described below. ## Map Change events Webhooks are available to notify an app when a map has changed. This can be useful for a third party system that is required to stay in sync with map changes. - `mvf.published` - Triggered after a map is edited and a new Mappedin Venue Format (MVF) file is available. ### MVF published The HTTPS POST payload for the `mvf.published` event is a JSON object containing the `event_type`, `map_id`, and `published_at` properties. Example: ```json {"event_type":"mvf.published","map_id":"your_map_id","published_at":"2025-01-01T00:00:00.000Z"} ``` ## analytics ### Analytics # Analytics Unlock powerful insights by combining indoor maps with your business analytics. By overlaying business intelligence onto detailed floor plans, organizations can uncover spatial patterns, track movement flows, and make data-driven decisions with unprecedented clarity. Whether you're analyzing foot traffic in retail spaces, monitoring asset utilization in hospitals, or optimizing workspace efficiency in office buildings, combining indoor mapping with analytics creates compelling visual stories that turn complex data into actionable insights. ## Mappedin Visual for Power BI The Mappedin Visual for Power BI provides a simple way to plot analytics events on an indoor map within a Power BI report. Learn More: - Mappedin Visual for Power BI ### Mappedin Visual for Power BI # Mappedin Visual for Power BI The Mappedin Visual for Power BI provides a simple way to plot analytics events on an indoor map within a Power BI report. > The Mappedin Visual for Power BI is still an experimental product and is not yet available on Microsoft Marketplace. While in this state, some features may not behave as intended and are subject to change. Experimental features are being tested together with early adopters to fine-tune them. !Heatmap ## Prerequisites In order to use the Mappedin Visual for Power BI, customers must have a map built with Mappedin CMS and Mappedin GeoJSON Export credentials. For best results, reference a map with real-time indoor positioning and use Mappedin's analytics as a data source. Looking to get started? Contact Mappedin for more details. ## Installation While in experimental state, the Mappedin Visual for Power BI can be downloaded directly from the following link: - Mappedin Visual for Power BI v0.1.0.0 (Updated Dec 18, 2025) Once the project has advanced from its experimental state, the visual will be obtainable from Microsoft Marketplace. Please refer to the Microsoft documentation on importing a local visual into Power BI and follow the instructions there. ## Preparing the Data When creating a report, ensure that the `latitude`, `longitude`, and `floor_level` columns are correct in the data model. While viewing the data model, select each of these columns and open their advanced settings. They should all be set to a "Summarize by" value of "None". To find out how to edit the data model, please refer to the Microsoft documentation on editing data models and follow the instructions there. !Setting Latitude to Summarize by None ## Data Fields In a Power BI report with analytics data, add the visual to the page. From the "Build visual" menu, supply values into their respective fields. ### Coordinate-Based Fields These fields are used for Scatterplot and Heatmap visualizations: | Field | Description | |-------|-------------| | **Latitude** | Latitude coordinate for plotting points on the map. | | **Longitude** | Longitude coordinate for plotting points on the map. | | **Floor Level** | Optional. When provided, data will be filtered by floor level. Use the floor selector on the map to switch between floors. | ### Location/Space-Based Fields These fields are used for Highlight visualization: | Field | Description | |-------|-------------| | **Location: External ID** | External ID to identify locations for highlighting. Matches against the Location External ID configured in Mappedin CMS. | | **Space: External ID** | External ID to identify spaces for highlighting. Matches against the Space External ID from the map geometry. | ### Additional Fields | Field | Description | |-------|-------------| | **Map ID** | Optional. Overrides the default Map ID configured in settings. Use with slicers to enable dynamic map switching between multiple venues. | | **Tooltips** | Optional. Up to 3 measures can be added. Values are displayed when hovering over data points (scatterplot) or highlighted locations/spaces. | | **Color** | Optional. Color values for highlighted spaces. Accepts CSS colors (HEX, RGB, RGBA, HSL, named colors) or category text. When category text is provided, colors are automatically assigned and a legend is displayed. Requires Location: External ID or Space: External ID. | | **Label** | Optional. Custom label text to display for each location/space. When bound, overrides the Label Display setting. Requires Location: External ID or Space: External ID. | !Power BI Data Configuration ## API Configuration The map needs Mappedin API credentials to fetch the indoor geometry. From the "Format visual" menu, expand the **Mappedin API** section and enter: | Setting | Description | |---------|-------------| | **Client ID** | Your Mappedin API Client ID. | | **Client Secret** | Your Mappedin API Client Secret. | | **Default Map ID** | The Map ID for your venue. Can be overridden by binding a Map ID column in the data fields. | These keys must have authorization for GeoJSON Export. Contact a Mappedin representative for details on how to obtain these. !Format Visual ## Visualization Types The visual supports three visualization types, selectable from the **Display Options** section: ### Scatterplot Displays individual data points on the map. Best for showing discrete events or positions. **Settings:** - **Fill Color** - Color of the points - **Line Color** - Border color around points - **Line Width** - Border thickness (in pixels or meters) - **Opacity** - Transparency of points (0-100%) - **Radius** - Size of points (in pixels or meters) !Scatterplot Visualization ### Heatmap Displays data density using color gradients. Best for showing concentration of events or traffic patterns. **Settings:** - **Minimum Color** - Color for lowest density areas - **Middle Color** - Color for medium density areas - **Maximum Color** - Color for highest density areas - **Intensity** - Strength of the heatmap effect - **Opacity** - Transparency of the heatmap (0-100%) - **Radius** - Spread of each data point's influence (in pixels) !Heatmap Visualization ### Highlight Highlights specific locations or spaces on the map based on External IDs. Best for showing performance by location or categorizing spaces. **Settings:** - **Color** - Default highlight color (can be overridden by the Color data field) **Requirements:** - Requires **Location: External ID** or **Space: External ID** to be bound - External IDs must match those configured in Mappedin CMS ## Display Options General display settings available in the **Display Options** section: | Setting | Description | |---------|-------------| | **Initial Zoom** | Starting zoom level (0-20 in Web Mercator units) | | **Flatten Percentage** | Flatten the 3D map geometry (0-100%) | | **Visualization** | Choose between Scatterplot, Heatmap, or Highlight | | **Background Color** | Color behind the map | | **Show Labels** | Toggle location labels on the map | | **Label Display** | Choose label content: Location Name, Location External ID, or Space External ID | ## Data-Driven Colors The **Color** data field supports dynamic coloring for the Highlight visualization. You can provide: ### CSS Color Values Provide valid CSS colors directly in your data: - Hex codes: `#FF6230`, `#FF623080` - RGB/RGBA: `rgb(255, 98, 48)`, `rgba(255, 98, 48, 0.5)` - HSL/HSLA: `hsl(14, 100%, 59%)` - Named colors: `red`, `coral`, `steelblue` ### Category Text When the Color field contains text values that are not valid CSS colors (such as category names like "Retail", "Food & Beverage", "Entertainment"), the visual automatically: 1. Assigns a unique color to each category 2. Displays a color legend in the bottom-right corner of the map This is useful for visualizing location categories, tenant types, or any other categorical data. ### Using DAX Measures Create dynamic colors using DAX expressions: **Parameter-based coloring:** ```dax ColorByYear = IF( [Year] = SelectedYear, "#FF6230", "#CCCCCC" ) ``` **Conditional coloring based on metrics:** ```dax ColorByPerformance = SWITCH( TRUE(), [Sales] > 100000, "#4CAF50", [Sales] > 50000, "#FFC107", "#F44336" ) ``` **Category-based coloring:** ```dax ColorByCategory = SWITCH( [ShopType], "Retail", "#2196F3", "Food", "#FF9800", "Entertainment", "#9C27B0", "#757575" ) ``` ### Color Priority When multiple color sources are available, they are applied in this order: 1. **Color data field** (highest priority) 2. **Conditional formatting rules** (if configured in the format pane) 3. **Default color** from Highlight settings ## Dynamic Map Switching Use the **Map ID** data field with slicers to switch between multiple venues: 1. Add a Map ID column to your data that contains the venue's Map ID 2. Bind this column to the **Map ID** field 3. Add a slicer connected to the Map ID column 4. When users select a different Map ID in the slicer, the visual loads the corresponding venue > **Note:** Only one Map ID can be active at a time. If multiple Map IDs are present in the filtered data, an error message will be displayed prompting users to filter to a single Map ID. ## Tips and Best Practices - **Data limits:** The visual supports up to 30,000 data points per query - **Floor filtering:** When Floor Level is bound, use the floor selector overlay on the map to navigate between floors - **Tooltips:** Add meaningful measures to the Tooltips field to provide context when users hover over data points - **Labels:** Use the Label field to display custom text (like sales figures or status) directly on the map - **Performance:** For large datasets, consider using aggregated data or filtering to specific time ranges ## snowflake ### Actions # Actions This article details the type of event data that customers can see in the session_events_view table. ## change-language Records when users switch the display language on your wayfinding system. To see which language they selected, look at the LANGUAGE property in this event's data. Available for wall-mounted directories only. **When this occurs:** A user clicks or taps the language selection option to change from one language to another (for example, switching from English to Spanish). **What this means:** You can identify language preferences among your visitors, track the effectiveness of multilingual support, and understand the diversity of your user base. This helps optimize language options and demonstrates the value of accessibility features. ### Properties | Property | Description | Type | Example | |----------|-------------|------|---------| | fromLanguage | The language that was set before it was changed. | STRING | fr | | userPosition | An object containing geolocation information | OBJECT (optional) | `{ "accuracy": 0, "bluedotTimestamp": 1749981867589, "latitude": 50.405827664043784, "longitude": 30.611356094604353 }` | | userPosition.accuracy | The accuracy of the position in meters. | INTEGER | | | userPosition.bluedotTimestamp | The timestamp the measurement was made in UNIX time. | INTEGER | | | userPosition.latitude | The latitude of the position. | NUMBER | | | userPosition.longitude | The longitude of the position. | NUMBER | | ## change-state Records when users navigate between different screens or sections within your wayfinding system. **When this occurs:** This event is triggered when a user moves from one view to another, such as switching from the main map to search results, moving from search to directions, or navigating between different interface screens. **What this means:** You can analyze how users navigate through your wayfinding system, identifying the most popular features and views, understanding user journey flows, and spotting potential areas where users might get stuck or lose interest. This helps optimize the user experience and interface design. ### Properties | Property | Description | Type | Example | |----------|-------------|------|---------| | state | There is a list of states on web and directories that the user can land on. | STRING | home | | from | | STRING (optional) | IDLE | | to | | STRING (optional) | START | | type | | STRING | next-gen | ## found-floor Records when your wayfinding system successfully identifies which floor a user is currently on. This event captures location updates that include floor-level information, giving you more detailed insights into how people move through multi-story venues. Unlike basic location tracking, this event specifically captures when the system knows the user's exact floor level, not just their general building location. **When this occurs:** The system receives this information when a user's device (typically an iPhone or iPad with indoor positioning enabled) provides precise location data that includes floor elevation. This allows the wayfinding system to pinpoint not only where someone is, but which floor they're on within your venue **What this means:** Users with advanced positioning capabilities are providing you with the most detailed movement data possible. This high-precision tracking allows you to analyze floor-by-floor traffic patterns, optimize tenant placement in multi-story venues, and provide the most accurate navigation experience. ### Properties | Property | Description | Type | Example | |----------|-------------|------|---------| | userPosition | An object containing geolocation information | OBJECT | `{ "accuracy": 0, "bluedotTimestamp": 1749981867589, "floorLevel": 2, "latitude": 50.405827664043784, "longitude": 30.611356094604353 }` | | userPosition.accuracy | The accuracy of the position in meters. | INTEGER | | | userPosition.bluedotTimestamp | The timestamp the measurement was made in UNIX time. | INTEGER | | | userPosition.floorLevel | The floor of the venue where the position was read. | INTEGER | | | userPosition.latitude | The latitude of the position. | NUMBER | | | userPosition.longitude | The longitude of the position. | NUMBER | | ## found-position Records when your wayfinding system tracks a user's location without specific floor details. **When this occurs:** This happens when a user's device provides location data that shows where they are within your venue, but doesn't include the elevation information needed to identify their exact floor level. Common scenarios include: - Devices without indoor positioning capabilities - Users located outdoors where the system relies on standard GPS **What this means:** Users are successfully being tracked within your venue, allowing you to analyze general traffic patterns, popular areas, and dwell times, even when precise floor-level data isn't available. ### Properties | Property | Description | Type | Example | |----------|-------------|------|---------| | userPosition | An object containing geolocation information | OBJECT | `{ "accuracy": 0, "bluedotTimestamp": 1749981867589, "latitude": 50.405827664043784, "longitude": 30.611356094604353 }` | | userPosition.accuracy | The accuracy of the position in meters. | INTEGER | | | userPosition.bluedotTimestamp | The timestamp the measurement was made in UNIX time. | INTEGER | | | userPosition.latitude | The latitude of the position. | NUMBER | | | userPosition.longitude | The longitude of the position. | NUMBER | | ## query-directions Records when your wayfinding system creates directions for a user's requested route. **When this occurs:** This event is triggered when the system successfully calculates a route between two points (such as from a user's current location to their desired destination). This event captures when directions are created by the system, but doesn't necessarily mean the user has seen the directions on their screen yet. The directions may need an additional moment to appear visually on the map, though this typically happens almost immediately afterward. **What this tells you:** Users are successfully requesting and receiving navigation assistance, indicating active engagement with your wayfinding system's core functionality. ### Properties | Property | Description | Type | Example | |----------|-------------|------|---------| | accessible | Whether the requested directions should be wheelchair accessible | BOOLEAN | false | | start | The ID of the navigation start target. Can be a space or location or node or coordinate. | STRING | n_578ab05 | | end | The ID of the navigation end target. Can be a space or location or node or coordinate. | STRING | n_223cd3f | | userPosition | An object containing geolocation information | OBJECT (optional) | `{ "accuracy": 0, "bluedotTimestamp": 1749981867589, "latitude": 50.405827664043784, "longitude": 30.611356094604353 }` | | userPosition.accuracy | The accuracy of the position in meters. | INTEGER | | | userPosition.bluedotTimestamp | The timestamp the measurement was made in UNIX time. | INTEGER | | | userPosition.latitude | The latitude of the position. | NUMBER | | | userPosition.longitude | The longitude of the position. | NUMBER | | ## query-suggest Records when your wayfinding system provides auto-complete suggestions as users type in the search box. **What are auto-complete suggestions?** These are the dropdown suggestions that appear while someone is typing - for example, if a user types "Star" they might see suggestions like "Starbucks" or "StarTech Store" appear below the search field. **How this differs from search results:** These suggestions are quick text matches to help users complete their search faster, rather than full location details with maps and directions that appear after someone completes their search. **When this occurs:** Each time the system generates a list of suggested completions based on what the user has typed so far. **What this tells you:** Users are actively engaging with your search functionality, and you can see popular search patterns and terms even before people complete their full searches. ### Properties | Property | Description | Type | Example | |----------|-------------|------|---------| | query | The input string to generate a suggestion from | string | ne | | suggestions | A list of suggestion strings to complete the query | string[] | `["nespresso", "new", "necklace"]` | | userPosition | An object containing geolocation information | OBJECT (optional) | `{ "accuracy": 0, "bluedotTimestamp": 1749981867589, "latitude": 50.405827664043784, "longitude": 30.611356094604353 }` | | userPosition.accuracy | The accuracy of the position in meters. | INTEGER | | | userPosition.bluedotTimestamp | The timestamp the measurement was made in UNIX time. | INTEGER | | | userPosition.latitude | The latitude of the position. | NUMBER | | | userPosition.longitude | The longitude of the position. | NUMBER | | ## search Records when your wayfinding system displays search results to a user. **When this occurs:** This event is triggered when someone finishes typing their search term and the system shows them a list of matching locations or points of interest. The system waits until the user has stopped typing (rather than generating results for every keystroke) to ensure they see relevant, complete results. **Example:** A user types "coffee shop" in the search bar, pauses, and then sees a list of all coffee shops in your venue - this is when the search event is recorded. **What this tells you:** Users are completing searches and receiving results, giving you insights into what people are looking for in your venue and whether your search functionality is meeting their needs. ### Properties | Property | Description | Type | Example | |----------|-------------|------|---------| | query | The input string to generate search results from | STRING | vans | | userPosition | An object containing geolocation information | OBJECT (optional) | `{ "accuracy": 0, "bluedotTimestamp": 1749981867589, "latitude": 50.405827664043784, "longitude": 30.611356094604353 }` | | userPosition.accuracy | The accuracy of the position in meters. | INTEGER | | | userPosition.bluedotTimestamp | The timestamp the measurement was made in UNIX time. | INTEGER | | | userPosition.latitude | The latitude of the position. | NUMBER | | | userPosition.longitude | The longitude of the position. | NUMBER | | ## select-category Records when users choose a category to browse locations by type. **When this occurs:** This event is triggered when a user clicks or taps on a category option to see all locations of that type. For example, selecting "Restaurants," "Retail Stores," or "Services" to view all venues in that category. **What this tells you:** Which types of businesses or services users are most interested in finding, helping you understand popular categories and visitor preferences in your venue. ### Properties | Property | Description | Type | Example | |----------|-------------|------|---------| | categoryId | The ID of the category that was selected. | STRING | 67f5c8 | | categoryName | The name of the category that was selected. | STRING | Food & Drinks | | userPosition | An object containing geolocation information | OBJECT (optional) | `{ "accuracy": 0, "bluedotTimestamp": 1749981867589, "latitude": 50.405827664043784, "longitude": 30.611356094604353 }` | | userPosition.accuracy | The accuracy of the position in meters. | INTEGER | | | userPosition.bluedotTimestamp | The timestamp the measurement was made in UNIX time. | INTEGER | | | userPosition.latitude | The latitude of the position. | NUMBER | | | userPosition.longitude | The longitude of the position. | NUMBER | | ## select-event Records when users click on promotional content, advertisements, or special offers displayed in your wayfinding system. **When this occurs:** This event is triggered when a user taps or clicks on promotional content such as: - Special sales or promotional banners - Event announcements - Advertisement displays - Featured offers in the events section **What this tells you:** How effectively your promotional content is engaging visitors, which offers or events generate the most interest, and how well your advertising placements are performing. ### Properties | Property | Description | Type | Example | |----------|-------------|------|---------| | id | The event ID. | STRING | a1b2c3 | | name | The event name. | STRING | Ad Banner | | locationId | The location ID associated to the event. | STRING | 5b628bacc | | locationName | The location name associated to the event. | STRING | Hi Bakery | | type | The event type. | STRING | advertisement | ## select-location Records when users choose a specific location or point of interest from your wayfinding system. **When this occurs:** This event is triggered when a user clicks or taps on a specific location, such as: - Clicking on a store or restaurant from search results - Tapping on a point of interest directly on the map - Selecting a location from a category list **What this tells you:** Which specific businesses, services, or areas in your venue are attracting the most user interest and engagement, helping you understand popular destinations and visitor behavior patterns. ### Properties | Property | Description | Type | Example | |----------|-------------|------|---------| | locationId | The ID of the selected location. | string | 674f060ffa | | locationName | The name of the selected location | string | Apple | | userPosition | An object containing geolocation information | OBJECT (optional) | `{ "accuracy": 0, "bluedotTimestamp": 1749981867589, "latitude": 50.405827664043784, "longitude": 30.611356094604353 }` | | userPosition.accuracy | The accuracy of the position in meters. | INTEGER | | | userPosition.bluedotTimestamp | The timestamp the measurement was made in UNIX time. | INTEGER | | | userPosition.latitude | The latitude of the position. | NUMBER | | | userPosition.longitude | The longitude of the position. | NUMBER | | ## show-qrcode Records when a QR code appears on the screen for users to scan. **When this occurs:** This event is triggered whenever the system displays a QR code, typically to help users transfer information from a wall-mounted directory to their mobile device (such as directions, maps, or location details). **What this tells you:** How often users are being presented with the option to continue their navigation experience on their personal mobile devices, indicating potential cross-device usage patterns. ### Properties | Property | Description | Type | Example | |----------|-------------|------|---------| | from | From location ID or kiosk node ID for generating directions on web redirect. | STRING | 65f51072c6 | | to | To location ID(s) for generating directions on web redirect. | `ARRAY` | `[ "6140c85d" ]` | | locationId | The location ID tied to the QR code displayed. | STRING | 6140c85 | | state | The UI state that the QR code was displayed at. Refers to the same state as that found in the change-state event. | STRING | location | ### Change Management # Change Management ## Event versioning Each event in your data includes a **VERSION** number that tracks how the data structure has evolved over time. As we improve and update our analytics system, the information we capture may change, and version numbers help ensure your data remains consistent and reliable. **How it works:** When we make changes to what information an event captures, we assign it a new version number. This means newer events of the same type might have slightly different version numbers than older ones in your historical data. ## Understanding Version Numbers We use a three-part numbering system (like **2.3.1**) that tells you what kind of changes were made: - **Major version (the first number - "2")** - Changes when we make significant updates that might affect how you use the data - **Minor version (the middle number - "3")** - Changes when we add new information without affecting existing data - **Patch version (the last number - "1")** - Changes for small updates that don't meaningfully change the data structure ## Types of Changes We Track ### Major changes that might affect your analysis (breaking changes): - Removing information that was previously included - Changing how existing information is formatted or categorized - Making required information optional ### Minor changes that enhance your data (non-breaking changes): - Adding new information to events - Making optional information required (providing more complete data) ## What This Means for You - **Complete documentation:** We maintain detailed documentation for every version of every event type, so you always know exactly what information is available. - **Data consistency:** Version tracking ensures you can reliably analyze both historical and current data, understanding any differences between time periods. ## Table Schema Versioning The main **session_events_view** table you work with always contains the most current version of your analytics data. We automatically maintain and update this table to ensure you have access to the latest features and improvements. ## Preserving Historical Data While we keep your main data table current, we also preserve historical versions so your past analysis remains accurate and accessible. **How this works:** We create separate, dated versions of your data table with names like: - **session_events_view** (always the current version) - **session_events_view_2_3_1** (historical version from an earlier time period) - **session_events_view_2_4_0** (another historical version) **Important:** These historical tables aren't just frozen snapshots. They continue to receive new, current data - but only the information that matches their original structure. This means you get fresh data in the format you're familiar with. ## Automatic Updates When we release improvements to our analytics system: - **What we do:** We automatically update your main **session_events_view** table to include the latest enhancements and features. - **What stays the same:** Historical versions remain unchanged, ensuring your past reports and analysis continue to work exactly as they did before. ## Example Timeline If we released a new version (2.4.1) today: - Your **session_events_view** table would automatically use the new 2.4.1 features - The **session_events_view_2_4_0** table would remain available with the previous version's structure - You could continue accessing both current and historical data as needed ## What This Means for You - **Always current:** Your primary data table automatically includes the latest analytics capabilities without any action required from you. - **Reliable history:** Your historical analysis and reports remain accurate and accessible, even as we enhance the system. - **Seamless transitions:** Updates happen automatically in the background without disrupting your ongoing analysis work. | Table name | Schema version | |------------|----------------| | session_events_view | 2.4.0 (ie. 'latest') | | session_events_view_2_4_0 | 2.4.0 | | session_events_view_2_3_1 | 2.3.1 | ### Example Queries # Example Queries ## Find change-state events ```sql SELECT * FROM session_events_view WHERE timestamp BETWEEN '2025-08-10' AND '2025-08-11' AND organization_name = 'my organization' AND venue = 'my venue' AND action = 'change-state'; ``` ## Aggregate product-sessions Users start their journey on one device and continue on another. Such a session may contain two "product-sessions" (ie. two sessions with distinct context). For example, a customer might begin by using a directory to search for a store, then scan a QR code to get directions on their mobile phone. This query splits such sessions apart and counts the number of events that occurred in each product-session. ```sql SELECT count(*) AS number_of_events_in_session, session_id, context -- other fields whose value remains constant throughout a product-session FROM session_events_view WHERE timestamp BETWEEN '2025-08-10' AND '2025-08-11' AND organization_name = 'my organization' GROUP BY ALL; ``` ### Result | NUMBER_OF_EVENTS_IN_SESSION | SESSION_ID | CONTEXT | |------------------------------|------------|---------| | 16 | XaGW8ggviPjasUkrqgoOGvBxZ+YZfR/XyXwz7O+Dkp0= | Directory | | 14 | HhkF9om5R6dd/3LsNpn3B+Q/iEa/5N7D2xIg43BCBKg= | Premium Directory | | 27 | HdCYKU6c90WBmfYiO/uLwwxsd+mMzWNDw9IFLZyboFw= | Web | | 4 | domPic+L2h+IqOrTrtJrs9o4NnZPpLoJwwYIN5XQkns= | Web | ## Compact Searches This query simplifies your data by combining multiple consecutive searches into a single search event, then shows you exactly what the user selected afterward - whether it was a specific location or a category. You can see the complete picture of search behavior - not just what people search for, but what they actually choose. This helps you understand: - Which search results are most effective - Whether users find what they're looking for quickly - How to improve your search functionality to better match user intent ```sql SELECT timestamp, context, action, query, next_action, location_id_found, category_id_found, is_completed_search FROM ( SELECT *, data:query::STRING AS query, LEAD(action) OVER ( PARTITION BY session_id, context ORDER BY timestamp ASC ) AS next_action, LEAD(data) OVER ( PARTITION BY session_id, context ORDER BY timestamp ASC ) AS next_data, action = 'search' AND COALESCE(next_action = 'search', FALSE) AS is_ignored, next_data:location::STRING AS location_id_found, next_data:category::STRING AS category_id_found, action = 'search' AND next_action IN ('select-location', 'select-category') AS is_completed_search FROM session_events_view WHERE timestamp BETWEEN '2025-08-10' AND '2025-08-11' AND organization_name = 'my organization' ) WHERE action = 'search' AND is_ignored = FALSE; ``` ### Result | TIMESTAMP | CONTEXT | ACTION | QUERY | NEXT_ACTION | LOCATION_ID_FOUND | CATEGORY_ID_FOUND | IS_COMPLETED_SEARCH | |-----------|---------|--------|-------|-------------|-------------------|-------------------|-------------------| | 2025-08-10 22:42:52.617 +0000 | Web | search | Sushi jiro | change-state | | | FALSE | | 2025-08-10 22:42:52.617 +0000 | Web | search | Bra | select-location | 5b0f85d2e9b85720eb59729d | | TRUE | | 2025-08-10 20:12:09.616 +0000 | Web | search | Brands | change-state | | | FALSE | | 2025-08-10 20:12:09.616 +0000 | Web | search | Cheese | select-category | | 6c0f85d2e9b85720eb5972de | TRUE | ### For Organizations New to Snowflake # For Organizations New to Snowflake No Snowflake account? No problem. We'll set up everything for you: **The setup process:** 1. **We create your account** - Mappedin sets up a specialized Snowflake account (called a "reader account") with your analytics data already available 2. **We create your login** - We'll create a user account and send you an invitation to access the system via email. We will provide you with a URL containing the Snowflake reader account username and temporary password. Once you login, you will be asked to change password and set up multi-factor authentication. ``` URL: https://a1b2c3d4-customer1.snowflakecomputing.com User: customer1@company.com Temp Pass: secret_password ``` 3. **Set up MFA (optional) -** If you need to add an extra layer of security to your account, follow these steps: - Click username that's on left bottom → Settings → Authentication → Add new authentication method - As of now, snowflake supports 3 types of MFA methods: 1. Passkey 2. Authenticator 3. Duo !MFA Setup 4. **Manage Programmatic Access Tokens (PAT) - A PAT provides a secure way for these tools to access your data automatically, without requiring someone to manually log in each time.** - Click username that's on left bottom → Settings → Authentication → Generate new token - Create/rotate/delete a PAT. You are responsible for managing programmatic access token lifetimes, rotation, etc. !PAT Admin !PAT 5. **Managing Users - The provided SERVICE_USER user has permission to create new users through the USERADMIN role.** - Creating a new user 1. Change to the USERADMIN role by clicking on your user info in the bottom left corner. 2. **Menu → Admin → Users and Roles** 1. !Manage User Admin 3. Click on the blue plus button in the top right to create a new user. 4. Fill in at least the User Name and Password fields and choose appropriate options then press Create User. 1. !Create User 5. The user does not automatically have access to your data. To get access to your data the user must be granted the READER role. 6. **Grant roles to users** - Find the user in the list and open the menu for that user's row and select Grant a Role - From the dropdown select READER and click Grant. - You'll be able to edit users created/owned by the USERADMIN role only. USERADMIN role cannot assign roles other than the READER role to users. !Grant Roles 7. **Running Queries** - **Data Base** 1. To access your analytics database: 1. Navigate to Menu → Catalog → Database Explorer 2. Locate the database named MAPPEDIN_ANALYTICS 3. Within this database, you will find the session_events_view view containing your analytics data !Database - **SQL Worksheet Creation** 1. Snowflake worksheets provide an integrated development environment for executing SQL queries and analyzing your data. These worksheets allow you to write, test, and run SQL statements directly against your analytics database. 2. To create a SQL worksheet: 1. Navigate to Menu → Projects → Worksheets 2. Select Create (located in the top-right corner) 3. A new SQL worksheet will be generated where you can compose and execute your queries !SQL Worksheet - **Warehouse Configuration** 1. In Snowflake, SQL queries are executed using a warehouse, which functions as a dedicated compute resource (similar to a virtual machine). Warehouses provide the processing power necessary to run your analytics queries and return results. 2. Warehouse Selection: When executing SQL queries, you have the ability to specify: 1. Role: Determines your access permissions and data visibility 2. Warehouse: Controls the compute resources allocated to your query execution !Warehouse ## Important Details - **Timezone settings:** We can configure your account to display data in your preferred timezone - **Single sign-on (SSO):** If your organization uses SSO, we can set that up for you during the account creation process - **Usage limitations:** Your reader account will have some built-in limitations that we'll explain when we set up your account ### For Organizations with Snowflake # For Organizations with Snowflake If your organization already uses Snowflake, we make integration seamless: 1. **Simple Setup**: Provide us with your Snowflake account details (Organization Name, Account Name, and Account Locator) 2. **Marketplace Access**: We'll make your analytics data available through Snowflake's marketplace 3. **Instant Access**: Find and acquire your data share directly in your Snowflake environment 4. **Start Analyzing**: Query your venue data immediately using your existing tools and workflows *Find your account details in Snowflake's "Account Details" section in Snowsight.* !Account Details ### Performance Tips # Performance Tips ## Speed Up Your Data Analysis **Always filter by date and venue:** When running your analysis, always specify which time period and which venues you want to examine. This dramatically speeds up your queries by focusing only on the data you actually need rather than searching through your entire database. **Example:** Instead of analyzing all data, specify "January 2025" and "Downtown Mall location" to get much faster results. ## For Advanced Users **Create summary tables:** If you have your own Snowflake account and frequently run the same types of analysis, consider creating pre-calculated summary tables. These store commonly needed results (like daily visitor counts or popular search terms) so you can access insights instantly rather than recalculating them each time. **When this helps:** This approach is especially valuable if you: - Run similar reports regularly (weekly, monthly, quarterly) - Need dashboard data that updates automatically - Analyze large amounts of historical data frequently ### Shared Tables # Shared Tables Analytics data is provided in two shared tables: `session_events_view` and `kiosks_view` ## Session_events The **session_events_view** table contains all user interaction data in its original, unprocessed form. This gives you access to the complete details of every action users take with your wayfinding system. **How the data is organized:** - **Standard information** (like timestamps, venue details, and session IDs) appears in its own dedicated column for easy analysis - **Action-specific details** are stored in a special column called **DATA**. This column contains additional information that varies depending on what the user actually did (such as search terms, selected destinations, or navigation preferences) All columns contain complete information unless specifically marked as optional. Optional columns may occasionally be empty when that particular piece of information isn't relevant to the specific user action being recorded. | Column name | Type | Comment | Example | |-------------|------|---------|---------| | ID | INTEGER | The ID of the row. A kind of sequence number guaranteed to be unique across all events. | 4033671436 | | TIMESTAMP | TIMESTAMP_LTZ (timestamp with timezone) | The datetime at which the event occurred, expressed in the timezone of the current Snowflake session (UTC by default). | 2025-06-08 10:16:55.629 +0000 | | TIMESTAMP_WALL | TIMESTAMP_NTZ (timestamp without timezone) | The time at which the event occurred, expressed in the timezone of the venue where the event occurred (as one would observe on a "wall clock"). | 2025-06-08 06:16:55.629 | | ACTION | STRING | The event action. Use this to determine the event type. | search | | VENUE | STRING | The slug of the venue where the event occurred. | mappedin-stadium | | VENUE_NAME | STRING | The name of the venue as observed at the time the event occurred. | Mappedin Stadium | | ORGANIZATION | STRING | The ID of the organization that owns the venue as observed at the time the event occurred. | 1a23b456789cde0f1g234h56 | | ORGANIZATION_NAME | STRING | The name of the organization that owns the venue as observed at the time the event occurred. | Mappedin | | SESSION_ID | STRING | Mappedin generated ID of the session. Events belonging to the same session have the same session_id. | abcqAP3ZSetWnGkvct+Ia8tBw2/GWSP0PGNjIX7HijK= | | DEVICE_ID | STRING | Mappedin generated ID of the device. May refer to a directory when the source is a directory. Refers to a browser for web sources | 2a33b456789cde0f1g236m34 | | CONTEXT | STRING | The context of the event source. Sometimes referred to as the 'product'. | webv2 | | PLATFORM | STRING | Platform of the source (Windows, MacOS, Android, iOS, etc) | iOS | | LANGUAGE | STRING (optional) | The user's selected language | en | | VERSION | STRING | The version of the schema found in the DATA column for this ACTION | 2.3.1 | | DATA | OBJECT | A schemaless object that carries extra data specific to the type of event (action) | `{ query: "Footlocker" }` | ### Context Values The CONTEXT column can contain the following values: - "Directory Legacy (6)" - Legacy directory (v6) - "Web Legacy" - Legacy web - "Web" - "Premium Directory" - "Directory" - Traditional directory ## Kiosks_view The kiosks_view is a reference table that maps kiosk device IDs to human-readable information. It allows translation of device identifiers (like 65f51072c6) into meaningful kiosk names (like MAPPEDIN-DR01) along with their venue details. | Property | Description | Type | Example | |----------|-------------|------|---------| | kiosk_id | The device ID of the directory. | STRING | 65f51072c6 | | kiosk_name | The name of the directory device. | STRING | MAPPEDIN-DR01 | | venue | The slug of the venue where the directory is located. | STRING | mappein_demo_airport | | venue_name | The name of the venue. | STRING | Mappedin Airport (Demo) | | organization | The ID of the organization that owns the venue. | STRING | 12das1a5ds64651aad | ### Snowflake Integration # Snowflake Integration Mappedin Analytics provides powerful insights into how visitors interact with your wayfinding system. By integrating with Snowflake, you can access your analytics data directly in your preferred data warehouse environment, enabling advanced analysis, reporting, and business intelligence. ## What You'll Get With Mappedin Analytics in Snowflake, you'll have access to: - **Complete user interaction data** - Every search, navigation, and interaction with your wayfinding system - **Real-time analytics** - Up-to-date data about visitor behavior and system usage - **Flexible querying** - Use SQL to analyze your data exactly how you need it - **Integration with existing tools** - Connect to your current BI tools and workflows - **Scalable infrastructure** - Snowflake's cloud-native architecture handles your data growth ## Getting Started Choose the setup path that matches your organization: ### For Organizations New to Snowflake If you don't have a Snowflake account, we'll set up everything for you including account creation, user management, and data access. **Setup Guide for New Snowflake Users** ### For Organizations with Existing Snowflake If you already use Snowflake, we'll integrate your analytics data through Snowflake's marketplace for seamless access. **Setup Guide for Existing Snowflake Users** ## Understanding Your Data Once you have access to your analytics data, these guides will help you make the most of it: ### Data Structure and Schema - **Understanding Your Data** - Learn about events, sessions, and how your data is organized - **Shared Tables** - Detailed schema information for the session_events_view table - **Actions** - Complete reference of all tracked user interactions and their properties ### Data Management - **Change Management** - Understand data versioning and how schema changes are handled ## Analysis and Optimization Put your data to work with these practical guides: ### Query Examples - **Example Queries** - Ready-to-use SQL queries for common analytics tasks ### Performance - **Performance Tips** - Best practices for optimizing your queries and analysis ## Key Benefits ### For Business Teams - **Visitor Insights** - Understand how people navigate your venue - **Popular Destinations** - Identify which locations attract the most attention - **Search Patterns** - See what visitors are looking for - **Usage Trends** - Track how your wayfinding system is being used over time ### For Technical Teams - **Raw Data Access** - Complete control over your analytics data - **Custom Analysis** - Build exactly the reports and insights you need - **Integration Ready** - Connect to existing BI tools and workflows - **Scalable Architecture** - Handle growing data volumes with ease ## Data Overview Your analytics data includes: - **User Interactions** - Searches, navigation requests, location selections - **Session Information** - Complete user journeys from start to finish - **Location Data** - Where interactions occur within your venue - **Device Information** - Platform, context, and technical details - **Timing Data** - Precise timestamps for all events ## Next Steps 1. **Choose your setup path** based on whether you have an existing Snowflake account 2. **Review the data structure** to understand what information is available 3. **Start with example queries** to explore your data 4. **Build custom analysis** tailored to your specific needs Ready to get started? Choose your setup guide above and begin unlocking insights from your wayfinding data. ### Understanding Your Data # Understanding Your Data ## Events Events are data points that capture user interactions with your wayfinding platform. Each time a user performs an action such as: - Opening your map - Searching for a location - Requesting directions - Selecting a point of interest Each event contains properties that provide context about the user's action. Some properties are standard across all events (such as timestamps), while others are specific to the type of interaction being performed (such as search terms or selected destinations). ## Sessions A **session** represents the complete scope of one user's interaction with your wayfinding system, from initial engagement through completion of their journey. **Example:** A visitor approaches your mall directory, searches for a specific retailer, requests directions, and then concludes their interaction. This entire sequence of actions constitutes a single session. **Session tracking:** Each session is assigned a unique identifier (SESSION_ID) that links all related user actions together. This approach allows for comprehensive analysis of user behavior patterns and complete customer journey mapping. **Cross-Device Functionality:** Our system maintains session continuity across multiple devices and platforms. Typical scenario: - A user initiates their search on a wall-mounted directory - They scan a QR code to transfer directions to their mobile device - They continue navigation using their smartphone Despite using different devices, all interactions maintain the same SESSION_ID, enabling complete journey tracking. However, the system distinguishes between devices through different CONTEXT values. ## Overview of Common Properties ### Timestamps Every event in your analytics data includes **two timestamps** that record when something happened: - **TIMESTAMP** - The exact universal time when the event occurred - **TIMESTAMP_WALL** - The local time at your venue when the event occurred **Example:** Let's say you have a venue in Toronto, Canada: - TIMESTAMP: 2025-11-26 20:00:00.000 +0000 (universal time) - TIMESTAMP_WALL: 2025-11-26 15:00:00.000 (local Toronto time) Notice how the universal time accounts for daylight saving time changes, while the local time simply reflects what someone would see on a clock at your venue. ### When to Use Each Timestamp Use TIMESTAMP_WALL when you want to analyze: - Peak hours at each individual venue (e.g., "How busy is each location at 3:00 PM local time?") - Daily patterns relative to business hours - Seasonal trends at specific locations Use TIMESTAMP when you want to analyze: - Activity across multiple venues at the exact same moment - Global patterns across your entire network - Coordinated events or campaigns that ran simultaneously **Technical Note:** Automatic timezone conversion: When you view the TIMESTAMP data in your reports, Snowflake automatically converts it to display in your preferred timezone. Normally the Snowflake session's timezone is UTC but this can be changed at the session, user or account level. Currently the timestamp is generated server-side at the time the event is recorded. ### Actions Distinguishes one kind of event from another. Most events may appear in all contexts but some events are context-specific. See Actions section for more details. ### Venue, Venue_Name The location identifier and display name for where the event occurred. Each venue has a unique identifier (slug) that remains consistent across all data, plus a readable name for easy identification. ### Context Identifies which type of system or product generated the event. This helps you distinguish between interactions that happened on different platforms - for example, whether someone used a wall-mounted directory, accessed your web map, or used a mobile app. ### Session_ID The unique tracking number that groups together all actions from one person's visit. This identifier links all of a user's activities during their complete journey, allowing you to see their full experience rather than individual isolated actions. See the Sessions section for more details. ### Device_ID A randomly generated identifier for the specific device or system that recorded the event. This number doesn't contain any personal information about the device (like brand, model, or owner details) - it simply helps track activity patterns. For wall-mounted directories, this ID represents the specific directory unit. ### Platform Indicates whether the event came from a desktop computer or mobile device. This helps you understand how people prefer to access your wayfinding system and optimize the experience accordingly. ### ExternalId Mappedin Web supports the use of an external tracking ID to identify users. This ID is available in the DATA column. ## asset-tracking ### Asset Tracking # Asset Tracking Integrate Mappedin with asset tracking platforms to visualize real-time location data on indoor maps. By combining indoor mapping with asset tracking systems, organizations can monitor equipment, tools, and personnel across facilities, reduce time spent searching for assets, and gain spatial insights that improve operational efficiency. ## Velavu Velavu provides a complete asset tracking solution with seamlessly integrated hardware and software. Built for demanding operations, the platform delivers real-time location, sensor insights, and intuitive tools that help teams find equipment faster, reduce downtime, and streamline workflows. When integrated with Mappedin, facility maps can be imported directly into the Velavu dashboard for a unified, spatial view of operations. Learn More: - Velavu ### Velavu # Velavu ## Description Velavu provides a complete asset tracking solution with seamlessly integrated hardware and software. Built for demanding operations, the platform is easy to deploy and use, delivering real-time location, sensor insights, and intuitive tools that help teams find equipment faster, reduce downtime, and streamline workflows. !Velavu ## Benefits ● Effortless import of Mappedin maps Easily bring custom Mappedin facility maps into Velavu, instantly creating linked floorplans within the dashboard for a unified, spatial view of your operations. ● Real-time view of all asset locations See tools, equipment, and personnel clearly on your facility map, giving teams instant visibility and reducing time spent searching. ● Seamless integration with Velavu's hardware and software platform Quickly deploy a complete tracking solution where rugged hardware and intuitive software work together to deliver reliable asset tracking with minimal setup. ● Access to Velavu's powerful software platform Tap into a full suite of tools - including geofencing, alerting, and historical asset tracking - through Velavu's intuitive software, giving teams complete control and insight over their operations. ## Configuration Instructions Please refer to the Mappedin Integration in the Velavu Knowledge Base for instructions on how to configure Mappedin with Velavu. ## digital-signage ### Digital Signage Integration # Digital Signage Integration Digital signage integration with Mappedin allows you to create interactive wayfinding experiences on kiosks and digital displays throughout your venue. ## Overview Integrating Mappedin with your digital signage systems enables: - Interactive wayfinding on touchscreen kiosks - Dynamic directional information on static displays - Real-time updates to maps and directions - Consistent branding and user experience across all digital touchpoints ## Omnivex Ink Omnivex Ink is a digital signage content management system that allows you to easily integrate Mappedin maps into your digital displays. The integration enables you to display interactive maps, provide wayfinding, and manage content scheduling across your digital signage network. Learn more: - Omnivex Ink ## Implementation Considerations - **Hardware capabilities**: Consider touch support, screen size, and processing power - **Network connectivity**: Plan for offline capabilities if network reliability is a concern - **User interaction models**: Create appropriate interfaces for both touch and non-touch displays - **Accessibility**: Ensure signage meets accessibility requirements ## Common Use Cases - Wayfinding kiosks at key decision points - Directory boards with searchable destinations - Digital displays with context-aware directions - Emergency messaging and evacuation routing ## Additional Resources - Embed a Map - Mappedin Showcase - Mappedin Demo Maps - Mappedin JS ### Omnivex Ink # Omnivex Ink This guide provides step-by-step instructions for integrating Mappedin with Omnivex Ink digital signage management. ## Prerequisites - Access to Omnivex Ink - Mappedin URL ## Steps ### 1. Create a New App 1. Launch and sign in to your Omnivex Ink application. 2. Click "Create App" (top right corner). 3. Enter a name for your app (e.g., Mappedin Airport) and optionally a description. 4. Click Create. ### 2. Add Web Component 1. In the new canvas, go to the left panel under "Components". 2. Drag and drop the "Web" component (globe icon 🌐) into your canvas. ### 3. Get Mappedin URL ### 4. Add Mappedin URL 1. Click on the newly added Web component to open the Properties panel (right side). 2. Under Content > Source, paste your Mappedin link (e.g., Hospital Demo Map) ### 5. Adjust Size and Layout Set appropriate canvas dimensions and screen presentation: **Common setups:** - Landscape: 1920x1080 - Portrait: 1080x1920 ### 6. Preview 1. Click Preview to confirm how your map will appear on the screens. ### 7. Publish and Schedule Omnivex Ink provides a simple way to set the times when content appears on displays. Schedule content to display at specific times and locations, ensuring the right message reaches the right audience. 1. In the top-right corner, hit "Publish" button. 2. Assign Mappedin content to a schedule (optional) to control when and where it displays. ## Best Practices - **Responsive Design**: Ensure Mappedin content is displayed appropriately according to different screen sizes. - **Touch Optimization**: Test touch screen functionality directly on display hardware to ensure optimal user experience with responsiveness and interactive elements. - **Network Connectivity**: For locations with unreliable internet, consider enabling offline capabilities for your Mappedin configuration. - **Performance**: Optimize for the hardware specifications of your digital signage devices. ## Troubleshooting - If the map doesn't appear, verify your URL is correct and the content is published. - For touch interaction issues, ensure the Omnivex Ink system is configured to pass touch events to the web component. - For display scaling issues, check both the Omnivex canvas settings and diplay layouts. ## emergency-management ### Emergency Management # Emergency Management Integrate Mappedin with emergency management and life safety platforms to show incident location and responder wayfinding on indoor maps. ## Punch Rescue Punch Rescue provides emergency communication infrastructure for schools, campuses, and healthcare facilities. Wearable Rescue Cards and a private LoRa mesh pair with Mappedin indoor maps so staff can trigger a one-press alert and responders see the incident location on the floor plan in real time. Key features: - Room-level incident location on a Mappedin floor plan - Indoor wayfinding for first responders - Unified map view of Rescue Cards, Repeaters, Base Stations, and other safety assets - Multi-building and multi-campus support from a single console Learn More: - Punch Rescue Integration ### Punch Rescue # Punch Rescue Punch Rescue provides emergency communication infrastructure for schools, campuses, and healthcare facilities. Wearable Rescue Cards and a private LoRa mesh pair with Mappedin indoor maps so staff can trigger a one-press alert and responders see the incident location on the floor plan in real time. !Punch Rescue ## Benefits - **Room-level incident location.** A pressed Rescue Card updates its location on the Mappedin floor plan in real time, rather than reporting a static last-known position. - **Indoor wayfinding for responders.** Mappedin indoor maps provide hallway, stairwell, and room-level navigation for arriving officers and EMS. - **Unified map of safety devices.** Rescue Cards, Repeaters, and Base Stations are shown on the floor plan alongside other safety assets such as AEDs and fire extinguishers, including device health status. - **Multi-building and multi-campus support.** A single operations console can monitor multiple buildings, each with its own Mappedin map. ## Get Started Contact Punch Rescue to scope a deployment and receive a hardware kit. If a Mappedin map is not yet available, contact Mappedin to get started. ## Prerequisites - A Mappedin indoor map for each building to be covered. Contact Mappedin if a map is not yet available. - A Punch Rescue hardware kit (Rescue Cards, Rescue Repeaters, and Rescue Base Stations). - A Punch Rescue admin account. ## Configuration Instructions ### Step 1: Install the Hardware Plug Repeaters and Base Stations into standard outlets in the areas that need coverage, then distribute Rescue Cards to staff. ### Step 2: Import Floor Plans In the Punch Rescue console, create an admin account and load the Mappedin floor plans for each building. ### Step 3: Place Devices on the Map Using the Rescue Mobile app and console, place each Rescue Card, Repeater, and Base Station on its room on the Mappedin floor plan. Other safety assets such as AEDs and fire extinguishers can be placed in the same step. ### Step 4: Configure Alerts and Escalation Configure Test, Level 1, and Level 2 alert behaviors, Rescue 911 (RapidSOS) linkage, Repeater strobes and sounds, escalation routing, and any integration with STOPit Notify or an existing mass-notification tool. ### Step 5: Validate with Single-Press Testing A staff member can press a Rescue Card to confirm the device and its location on the map. ### Step 6: Go Live Once devices are placed and alerts are configured, the system is live. The console provides device-health visibility, on-demand testing, and over-the-air (OTA) firmware updates. For more information, see the Punch Rescue + Mappedin page. ## Demo ## mapping-libraries ### deck.gl # deck.gl deck.gl is a powerful WebGL-based framework for visual exploratory data analysis of large datasets. When combined with Mappedin's indoor mapping capabilities, it enables you to create high-performance, visually stunning indoor mapping experiences on the web. ![Mappedin JS with deck.gl Heatmap](/showcase/item?itemSlug=coffee-search-heatmap) _Click the image to open an interactive map in the Mappedin Showcase._ ## Why Choose Mappedin with deck.gl? **For Apps Using Mappedin JS with deck.gl** - Perfect for data visualization projects combining indoor maps with analytics - Add a deck.gl layer to Mappedin JS to visualize data from external sources to display: - Heatmaps - Arcs - Scatter plots - And more! **For Existing Apps Using deck.gl** - Add indoor mapping to existing deck.gl apps - Use Mappedin Venue Format file to draw a venue using GeoJSON - Use your existing deck.gl skills to create custom indoor mapping experiences ## Getting Started There are two ways to use deck.gl with Mappedin: 1. Use Mappedin JS and add a deck.gl layer to the map. This allows you to use deck.gl's full suite of features to create custom visualizations. Refer to the Using deck.gl guide for more information. 2. Render a Mappedin Venue Format file within deck.gl. This allows you to take GeoJSON files from Mappedin and render them within deck.gl. Refer to the Render MVF v2 with deck.gl guide for more information. ### MapKit # MapKit > The Mappedin SDK for iOS can be used to render Mappedin Indoor Maps in your iOS applications and is a more powerful and flexible solution than MapKit for indoor mapping. MapKit is Apple's native mapping framework for iOS, iPadOS, and macOS applications. When integrated with Mappedin's indoor mapping capabilities, it enables you to create powerful indoor-outdoor mapping experiences that feel completely native to Apple devices. *Mappedin Indoor Map rendered in MapKit on iOS* ## Why Choose Mappedin with MapKit? - Add indoor mapping to existing MapKit apps - Use Mappedin Venue Format file to draw a venue using GeoJSON - Use your existing MapKit kills to create custom indoor mapping experiences ## Getting Started Implementation is straightforward for iOS developers familiar with MapKit. The integration supports all standard MapKit features while adding powerful indoor mapping capabilities through Mappedin's MVF format. For technical details and implementation guides, check out the Render MVF v2 with MapKit guide. ### MapKit JS # MapKit JS MapKit JS is Apple's powerful mapping solution that brings the beautiful, familiar Apple Maps experience to your web applications. When combined with Mappedin's indoor mapping capabilities, you can create seamless indoor-outdoor experiences that maintain Apple's premium look and feel while leveraging Mappedin's robust indoor mapping features. ![Mapkit JS Image](/docs/mvf/v2/render-with-mapkit-js#end-result) _Click the image to open an interactive Mappedin map rendered with MapKit JS._ ## Why Choose Mappedin withMapKit JS? - Add indoor mapping to existing MapKit JS apps - Use Mappedin Venue Format file to draw a venue using GeoJSON - Use your existing MapKit JS skills to create custom indoor mapping experiences ## Getting Started Implementation requires minimal setup and provides maximum flexibility. Whether you're building a simple venue map or a complex wayfinding solution, the MapKit JS integration offers the tools you need to create polished, professional mapping experiences. For technical details and implementation guides, check out the Render MVF v3 with MapKit JS guide. ### MapLibre # MapLibre MapLibre is a free and open-source mapping platform that provides a powerful foundation for building custom mapping applications. When integrated with Mappedin's indoor mapping capabilities, it offers a complete solution for creating seamless indoor-outdoor mapping experiences. ![Mappedin Indoor Map in MapLibre](/web-sdk/mappedin-maplibre-overlay) _A Mappedin Map rendered in MapLibre using the MappedinMapLibreOverlay._ ## Why Choose Mappedin with MapLibre? - Add indoor mapping to your existing MapLibre apps - Display indoor maps of buildings that are far apart from each other - Render additional overlays on an indoor map - Customize the outdoor map - Use your existing MapLibre skills to create custom indoor mapping experiences ## Getting Started There are two ways to use MapLibre with Mappedin: 1. **Use MapLibrea features in Mappedin JS:** Mappedin JS makes use of MapLibre and supports the use of MapLibre's capabilities to manipulate the map and show additional information. Refer to the Outdoor Map Guide for more information on how to use MapLibre features in Mappedin JS. 2. **Use Mappedin Indoor Maps in MapLibre:** Use the @mappedin/maplibre-overlay package to add Mappedin indoor maps to any MapLibre-based application. Refer to the Mappedin MapLibre Overlay Guide for more information. ### Mapping Libraries # Mapping Libraries Mappedin enables developers to add indoor maps to their applications using a variety of popular mapping and visualization libraries. ## deck.gl deck.gl is a WebGL-based framework for visual exploratory data analysis of large datasets. When combined with Mappedin's indoor mapping capabilities, it enables you to create high-performance, visually stunning indoor mapping experiences on the web. Support is both available to using deck.gl layers on top of a Mappedin map as well as to render Mappedin indoor maps as GeoJSON within deck.gl. Learn More: - Use Mappedin Indoor Maps with deck.gl ## Mapkit JS MapKit JS is Apple's mapping solution that brings the beautiful, familiar Apple Maps experience to your web applications. When combined with Mappedin's indoor mapping capabilities, you can create seamless indoor-outdoor experiences that maintain Apple's premium look and feel while leveraging Mappedin's robust indoor mapping features. Learn More: - Use Mappedin Indoor Maps with MapKit JS ## Mapkit MapKit is Apple's native mapping framework for iOS, iPadOS, and macOS applications. When integrated with Mappedin's indoor mapping capabilities, it enables you to create powerful indoor-outdoor mapping experiences that feel completely native to Apple devices. Learn More: - Use Mappedin Indoor Maps with MapKit ## MapLibre MapLibre is a free and open-source mapping platform that provides a powerful foundation for building custom mapping applications. When integrated with Mappedin's indoor mapping capabilities, it offers a complete solution for creating seamless indoor-outdoor mapping experiences. Learn More: - Use Mappedin Indoor Maps with MapLibre ## mapping-providers ### Atlas # Atlas Atlas is a cloud-native mapping platform designed for enterprise-scale applications. When combined with Mappedin's indoor mapping capabilities, it delivers a robust solution that seamlessly bridges the gap between outdoor navigation and detailed indoor wayfinding, perfect for businesses requiring scalable, professional-grade mapping solutions. !Atlas Map with Mappedin Indoor Map ## Why Choose Mappedin with Atlas? - Add indoor mapping to existing Atlas apps - Combine outdoor maps with detailed indoor floor plans - Switch seamlessly between multiple buildings located far apart ## Getting Started To add a Mappedin Indoor Map to your Atlas app, download the Mappedin Map as a GeoJSON file in Mappedin Venue Format and then import into Atlas. ## Importing a Mappedin Indoor Map into Atlas Follow the steps below to add a Mappedin Indoor Map to your Atlas app. These steps are demonstrated in the video at the bottom of this page. 1. Open Mappedin Maker 2. Select the desired map. 3. Click on the `Download` button. 4. Select `Download as MVF`. 5. Open Atlas. 6. Click on New Project or open an existing project. 7. For a new project, click on `Upload File`. For an existing project, click `Add Layer`. 8. Select the GeoJSON file you downloaded from Mappedin. 9. Click on `Upload`. 10. Wait for the MVF to upload and be processed by Atlas. ### Felt # Felt Felt is a cloud-native GIS platform that lets you create maps, apps, and dashboards. When combined with Mappedin's indoor mapping capabilities, it delivers a robust solution that seamlessly bridges the gap between outdoor navigation and detailed indoor wayfinding, perfect for businesses requiring scalable, professional-grade mapping solutions. !Felt Map with Mappedin Indoor Map ## Why Choose Mappedin with Felt? - Add indoor mapping to existing Felt maps - Combine outdoor maps with detailed indoor floor plans ## Getting Started To add a Mappedin Indoor Map to your Felt map, download the Mappedin Map as a GeoJSON file in Mappedin Venue Format and then import into Felt. ## Importing a Mappedin Indoor Map into Felt 1. Open Mappedin Maker 2. Select the desired map. 3. Click on the `Download` button. 4. Select `Download as MVF`. 5. Open Felt. 6. Click on New Map or open an existing project. 7. Drag the download MVF file onto the Felt map. 8. Wait for the Felt prompt asking `How do you want to add this data?`. 9. Choose `Elements` and click `Create`. 10. Wait for the map to be imported. ### HERE Technologies # HERE Technologies HERE Technologies is a location data and technology platform that powers mapping, navigation, and location services across the globe. When integrated with Mappedin's indoor mapping capabilities, it creates a comprehensive solution that combines HERE's extensive outdoor mapping infrastructure with detailed indoor navigation, making it ideal for organizations seeking to provide end-to-end location experiences from outdoor to indoor environments. !Mappedin Indoor Map with HERE Technologies ## Why Choose Mappedin with HERE Technologies? - Combine HERE outdoor maps with detailed indoor floor plans - Use HERE's outdoor map styles ## Getting Started To use HERE outdoor maps within Mappedin JS, provide a link to the HERE vector tile style JSON file as shown below. Note that a HERE API key is required. ```ts const mapView = await show3dMap( document.getElementById("mappedin-map") as HTMLDivElement, mapData, { outdoorView: { // HERE vector tile style style: `https://assets.vector.hereapi.com/styles/berlin/day/mapbox/tilezen?apikey=`, }, } ); ``` ### Mapping Providers # Mapping Providers ## Atlas Atlas is a cloud-native mapping platform designed for enterprise-scale applications. When combined with Mappedin's indoor mapping capabilities, it delivers a robust solution that seamlessly bridges the gap between outdoor navigation and detailed indoor wayfinding, perfect for businesses requiring scalable, professional-grade mapping solutions. Learn More: - Use Mappedin Indoor Maps with Atlas ## HERE Technologies HERE Technologies is a location data and technology platform that powers mapping, navigation, and location services across the globe. When integrated with Mappedin's indoor mapping capabilities, it creates a comprehensive solution that combines HERE's extensive outdoor mapping infrastructure with detailed indoor navigation, making it ideal for organizations seeking to provide end-to-end location experiences from outdoor to indoor environments. Learn More: - Use Mappedin Indoor Maps with HERE Technologies ## MapTiler MapTiler provides mapping services that can enhance your Mappedin indoor mapping experience with high-quality satellite imagery, custom map styles, and additional geographic data layers. When combined with Mappedin's indoor mapping capabilities, you can create rich, multi-layered mapping experiences. Learn More: - Use Mappedin Indoor Maps with MapTiler ## QGIS QGIS is a powerful open-source GIS platform used across government, enterprise, and research. The Mappedin MVF Importer plugin lets you bring Mappedin Venue Format (MVF) v3 indoor maps directly into QGIS. Import MVF packages from local files or via the Mappedin REST API (with token caching), and the plugin will automatically organize layers by floor, apply clear symbology (walls, doors, windows, connections, spaces, locations), and manage multi-floor visibility for clean visualization alongside your other GIS data. Learn More: - Use the Mappedin QGIS Plugin ### MapTiler # MapTiler MapTiler provides mapping services that can enhance your Mappedin indoor mapping experience with high-quality satellite imagery, custom map styles, and additional geographic data layers. When combined with Mappedin's indoor mapping capabilities, you can create rich, multi-layered mapping experiences. !MapTiler Satellite Map with Mappedin Indoor Map ## Why Choose Mappedin with MapTiler? - Use MapTiler's satellite imagery as an outdoor map layer - Use MapTiler's vector tile styles - Add MapTiler's vector tile layers to show additional data - Add MapTiler's 3D terrain and elevation data ## Getting Started Implementation is straightforward and can be done using Mappedin's outdoor map functionality. MapTiler's services can be added as additional layers to provide enhanced outdoor mapping capabilities. For technical details and implementation guides, refer to the Outdoor Map Guide for more information. The example below demonstrates using MapTiler's raster satellite imagery as an outdoor map layer. > **Note**: While this guide uses MapTiler's services, you'll need your own MapTiler API key. You can get a free key at https://www.maptiler.com/. ### QGIS # QGIS QGIS is a powerful open-source GIS platform used across government, enterprise, and research. The Mappedin MVF Importer plugin lets you bring Mappedin Venue Format (MVF) v3 indoor maps directly into QGIS. Import MVF packages from local files or via the Mappedin REST API (with token caching), and the plugin will automatically organize layers by floor, apply clear symbology (walls, doors, windows, connections, spaces, locations), and manage multi-floor visibility for clean visualization alongside your other GIS data. !QGIS Plugin ## Prerequisites - QGIS 3.16 or later - MVF v3 package file (.zip/.mvf) or Mappedin API credentials: - API Key (mik_…) - API Secret (mis_…) - Network access if importing via API ## Install the Plugin **From QGIS Plugin Repository:** From the QGIS Menu Choose: 1. Plugins 2. Manage and Install Plugins 3. Search for “Mappedin MVF Importer” 4. Install 5. Enable **From ZIP:** - Download the latest release of the plugin. From the QGIS Menu Choose: 1. Plugins 2. Manage and Install Plugins 3. Install from ZIP 4. Select the ZIP 5. Enable Optional (developers): see the qgis-plugin GitHub repository for dev install and makefile targets. ## Get API Credentials (for API import) Refer to the Create a Key & Secret Guide. ## Import Methods ### Import from File 1. Open QGIS. 2. Plugins → Mappedin MVF Importer → Import from File. 3. Browse to your MVF v3 ZIP/MVF file. 4. Click Import. The plugin will: - Create a parent group using the venue name. - Build separate floor groups (e.g., “Level 1 Group”, “Level 2 Group”). - Add Doors, Windows, Walls, Spaces, Connections, and Locations with clear styling. - Hide upper floors by default to avoid overlap. ### Import from API 1. Open QGIS. 2. Plugins → Mappedin MVF Importer → Import from API. 3. Enter API Key (mik_) and Secret (mis_). 4. Click Fetch Venues and pick a venue from the dropdown. 5. Optionally enable the OpenStreetMap base layer. 6. Click Import. The plugin will: - Authenticates with token caching. - Downloads the venue's MVF v3 package. - Builds organized, styled layers as above ## Tips - Toggle floor visibility in the Layers panel to focus on one level at a time. - Only non-empty layers are created; some MVF packages may not include all layer types. ## Troubleshooting - “No venues available” when using API: - Check API key/secret, venue access, and network connectivity. - “Failed to download MVF package”: - Confirm venue ID permissions; try refreshing venues. - “Empty layers created”: - Some packages may not contain certain feature types; this is expected. ## workplace-management-and-collaboration ### TableAir # TableAir TableAir simplifies hybrid work by giving teams control over desks, meeting rooms, parking, and visitor access. This integration connects your Mappedin indoor maps to TableAir so teams can find spaces, book rooms, and analyze usage across buildings and floors. !tableair-meeting-booking-interface ## Request Access To get started, contact Mappedin to coordinate setup with TableAir. ## Configuration Instructions ### Step 1: Map a Venue Sign up for an account and map a venue, labeling bookable rooms and desks appropriately. ### Step 2: Create a Mappedin Key and Secret ### Step 3: Contact Mappedin Contact Mappedin with the API key and default settings. Mappedin will configure the integration with TableAir. ### Step 4: Create a TableAir Master User A link will be sent to create a TableAir master user. TableAir will assist with the next steps. For more info at TableAir, please refer to the TableAir Mappedin Integration Page. ### Workplace Management and Collaboration # Workplace Management and Collaboration Integrate Mappedin with workplace management and collaboration platforms to enhance office experiences and streamline workspace operations. By combining indoor mapping with workplace management systems, organizations can provide employees with visual representations of their workspace, enable seamless room and desk booking, and create more efficient office environments. ## Overview Integrating Mappedin with workplace management and collaboration systems enables: - Visual representation of buildings and floors in workplace platforms - Seamless room and desk booking with spatial context - Enhanced employee navigation and wayfinding - Improved workspace utilization and management - Better coordination of flexible work arrangements ## Microsoft Places Microsoft Places is an AI-powered connected workplace app that reimagines flexible work. It helps coordinate where work happens, modernize the workplace experience, and optimize the workplace based on changing employee needs. When integrated with Mappedin, it provides users with a visual representation of buildings, enabling them to see available conference rooms and desk pools directly on the map. Key features: - Visual mapping of conference rooms and desk pools - Integration with Microsoft Exchange for room booking - Floor-level organization with proper elevation mapping - Support for restrooms, kitchens, and other facility amenities Learn More: - Microsoft Places IMDF Export - Microsoft Places Sync ## TableAir TableAir simplifies hybrid work by giving teams control over desks, meeting rooms, parking, and visitor access. This integration connects Mappedin indoor maps to TableAir so teams can find spaces, book rooms, and analyze usage across buildings and floors. Learn More: - TableAir Integration ## Yarooms Yarooms is a workplace management platform for desk and room booking, hybrid work scheduling, visitor management, and digital signage. Integrating Mappedin with Yarooms adds 3D maps and indoor wayfinding so employees and visitors can find and book spaces visually. Key features: - 3D office maps in Yarooms - Wayfinding directions within the office - A map experience that helps users discover and reserve spaces more easily Learn More: - Yarooms Integration ## Zoom Make your Mappedin map available in Zoom Rooms to provide users with visual context for their meeting locations. The integration allows you to upload floor plans directly to Zoom's centralized location management system, creating a seamless connection between your physical workspace and virtual meeting platform. Key features: - Direct upload of floor plans to Zoom Workspace Management - One-to-one mapping between Mappedin floors and Zoom floor structures - Free integration (with future Pro subscription requirement) - Centralized location management integration Learn More: - Zoom Integration ### Yarooms # Yarooms Yarooms is a workplace management platform for desk/room booking, hybrid work scheduling, visitor management, and digital signage. Integrating Mappedin with Yarooms adds 3D maps and indoor wayfinding so employees and visitors can find (and book) spaces visually. !yarooms-interface ## Features - 3D office maps in Yarooms - Wayfinding directions within the office - A map experience that helps users discover and reserve spaces more easily ## Get Started To get started, contact Mappedin to coordinate setup with Yarooms. For assistance with Yarooms, please refer to the Yarooms Help Center. ## Prerequisites - A Mappedin indoor map - Access to Yarooms Admin settings - Yarooms-provided Mappedin credentials (Client ID / Client Secret), if required - Venue ID for a Mappedin map ## Configuration Instructions :::note Yarooms recommends setting up this integration with a Yarooms specialist for optimal results. ::: ### Step 1: Ensure a Mappedin Floor Plan is Ready, and Create a Map Based on your contract, either Yarooms or Mappedin will create the floor plan, including spaces, rooms, walls, and connecting areas like elevators and stairs. ### Step 2: Create a Mappedin Key and Secret ### Step 3: Activate the Integration in Yarooms 1. In Yarooms, go to Settings → Integrations → Partners → Mappedin. !yarooms-integration-connection 2. Activate the integration using a Mappedin Key and Secret created in the previous step. !yarooms-mappedin-key-secret-ui ### Step 4: Enable Mappedin on each Floor and add the Map ID 1. Go to Settings → Workplace. 2. Click the name of a floor → Edit → Map. 3. Set Map view to “Mappedin”. 4. Add the Map ID. To find the Map ID, go to the Mappedin dashboard and open the Developers tab. Select the map and copy the Map ID. ### Step 5: Match Yarooms Spaces to Mappedin Spaces 1. Go to Workplace → Map. 2. Click “Edit mode” (right side of the map). 3. Add/link your Yarooms spaces to the corresponding Mappedin polygons. !yarooms-edit-mode ### Step 6: Validate Wayfinding Once spaces are matched, users can search for a space on the map and get wayfinding directions from their current location (booked space). To view the Yarooms documentation, see here. ### Zoom Rooms # Zoom Rooms The Mappedin Zoom Rooms integration enables use of Mappedin Maps in Zoom Rooms. !Zoom Rooms ## Prerequisites The Mappedin Zoom Rooms integration is currently free, however in the future it will require a Mappedin Pro subscription. This requires a Zoom organization that has access to centralized location management and has a location directory configured with at least one "Floor" structure type. These floors should link one-to-one with levels in a Mappedin map. Synchronizing every floor is not required. Refer to this Zoom documentation for details: https://support.zoom.com/hc/en/article?id=zm_kb&sysparm_article=KB0057977 ## Setup 1. Log into Mappedin, and look for the Integrations tab in the top tab bar. !Integrations tab 2. Select the Zoom Rooms integration card, and then press "Integrate Zoom Rooms". This will direct you to a Zoom login page, which will detail the required permissions for setting up the integration and ask you to authenticate.!Zoom Rooms Integration Card 3. After logging in, the Zoom Rooms integration should show that it is active. !Zoom Active 4. Open the map to sync with Zoom in Mappedin Maker. An Integrations button should be shown in the top right, with an option to upload the floors. !Zoom Map in Editor 5. After selecting this option, you will see a dialog displayed listing all of the floors on your Mappedin map, along with a checkbox to control whether that floor should be uploaded, and a drop-down selector to choose the Zoom floor you would like to link to. Configure all of the desired floor links here. Once submitted, these settings will be remembered for the future.!Zoom Floor Selector 6. When ready to submit, select Upload to Zoom. Keep the tab open until this process completes.!Zoom Upload Complete 7. Once this is done, go into your Zoom Workspace Management dashboard to see your uploaded floor plans.!Zoom Management Dashboard 8. The map should now be available in Zoom Rooms. !Zoom Rooms ## Removing Mappedin from Zoom Rooms ### Through Mappedin To disable the Zoom Rooms integration using the Mappedin interface: 1. Open Mappedin Maker 2. Proceed to the Integration dashboard 2. The Zoom panel will have an "Active" badge when it is enabled 3. Click on the settings button in the bottom right corner 4. In the settings menu, press "Unlink Account" 5. Accept the confirmation dialog !Remove Zoom Using Mappedin ### Through Zoom App Marketplace To disable the Zoom Rooms integration using the Zoom App Marketplace: 1. Open the Zoom Rooms Marketplace 2. Select "Manage" 3. Under "Personal App Management", select "Added Apps" 4. Find the Mappedin application 5. Press the "Remove" button !Remove Zoom Using Zoom App Marketplace ## microsoft-places ### IMDF Export # IMDF Export :::warning This method requires PowerShell 7+ and knowledge of Microsoft Places PowerShell commands. ::: The IMDF export provides full control over building, floor, room, and desk configuration in Microsoft Places. This method supports pre-existing Exchange resources and provides precise control over the IMDF output. :::tip The Automated Sync is an alternative method that does not require PowerShell. See the method comparison for help choosing. ::: **Before starting, complete the Mapping Requirements checklist to ensure the map is prepared correctly.** ## Prerequisites - **PowerShell 7+** — Lower versions will produce errors. - **Exchange Admin role** with TenantPlacesManagement permissions. ## 1. Install PowerShell 7+ **Windows** — install via winget: ``` winget install --id Microsoft.PowerShell --source winget ``` **macOS** — install via Homebrew: ``` brew install powershell ``` ## 2. Run the Microsoft Places Install Script **Windows** — Right-click PowerShell 7 in the Start menu and select **Run as Administrator**. **macOS** — Open a terminal and run `pwsh`. Execute the following commands: ``` Install-Script -Name DeployPlaces DeployPlaces ``` ## 3. Create Building and Floors Download the existing CSV file containing buildings and floors: ``` Connect-MicrosoftPlaces Initialize-Places ``` These commands prompt with the following options — choose option **#1**: ``` 1. Export suggested mapping CSV of rooms to buildings/floors. 2. Import mapping CSV to automatically create buildings/floors and room mappings. 3. Export PowerShell script with commands to manually create buildings/floors and room mappings based on an imported CSV. ``` If no buildings have been configured, the CSV file will contain headings only. Use Notepad or Excel to edit the CSV. If using Excel, save as CSV format, not as an Excel spreadsheet. Delete all headings/columns except for `InferredBuildingName`, `InferredFloorName`, and `PrimarySmtpAddress`. Populate with building information. Places prefixes each floor name with **Floor** (e.g., **1** appears as **Floor 1**). ``` InferredBuildingName,InferredFloorName,PrimarySmtpAddress Corporate Headquarters,1, Corporate Headquarters,2, Corporate Headquarters,Basement, ``` Re-run the commands and choose option **#2** to import the modified CSV: ``` Connect-MicrosoftPlaces Initialize-Places ``` ### Set Floor Sort Order The floor sort order in Places must match the floor elevation in Mappedin Maker. To view the elevation, open Mappedin Maker and choose **Edit Floors**. !Edit Floors in Mappedin Maker !Floor elevation in Mappedin Maker The ground floor is set to 0, floors above ground to positive integers, and floors below ground to negative integers. Locate each floor's identity: ``` Get-Placev3 -Type Floor ``` Set the sort order for each floor using its identity and corresponding Mappedin elevation: ``` Set-Placev3 -Identity -SortOrder 0 ``` ## 4. Create Rooms Create room resources in Microsoft Exchange Admin. :::warning Each Exchange room name must exactly match a Mappedin location name, including capitalization. Rooms without a match will not appear on the map. See the Mapping Requirements for naming rules. ::: Use `Get-PlaceV3` to check if rooms have synced from Exchange, then assign each room to the correct floor using `Set-PlaceV3`: ``` Set-PlaceV3 -Identity room@yourDomain.com -ParentId ``` Use `Get-Placev3 -Type Floor` to get floor identifiers. :::note Room resources may take up to 24 hours to propagate from Exchange to Places. The map must be re-uploaded after propagation completes. ::: ## 5. Create Desk Pools Desk pools (also called workspaces) are clusters of desks that users can reserve. :::warning Each desk pool name must exactly match a Mappedin object name, including capitalization. Desk pools without a match will not appear on the map. See the Mapping Requirements for naming rules. ::: The following commands require the Exchange Admin role. In this example, `1005` is used as the desk pool name. **Connect to Exchange:** ``` Connect-ExchangeOnline ``` **Create a mailbox for the Desk Pool:** ``` New-Mailbox -Room -Alias 1005 -Name 1005 | Set-Mailbox -Type Workspace ``` **Set the timezone:** ``` Set-MailboxCalendarConfiguration -Identity 1005 -WorkingHoursTimeZone "Eastern Standard Time" -WorkingHoursStartTime 09:00:00 ``` **Set the reservation rule:** ``` Set-CalendarProcessing -Identity 1005 -EnforceCapacity $True -AllowConflicts $True ``` **Connect to Microsoft Places and assign the desk pool to a floor:** ``` Connect-MicrosoftPlaces $building = Get-PlaceV3 -Type Building | Where-Object -Property DisplayName -eq "YOUR_BUILDING_NAME" $floor = Get-PlaceV3 -AncestorId $building.PlaceId | Where-Object -Property DisplayName -eq "YOUR_FLOOR_NAME" $section = Get-PlaceV3 -Type Section -AncestorId $floor.PlaceId | Where-Object -Property DisplayName -eq "YOUR_SECTION_NAME" Set-Placev3 -Identity 1005 -Capacity 10 -Label "1005" -ParentId $section.PlaceId ``` :::note Desk pool changes may take 24 to 48 hours to propagate. ::: ## 6. Export and Upload the Map :::note If rooms or desk pools were recently created or updated, wait up to 48 hours for propagation before exporting. If the export completes before propagation finishes, re-upload the map afterward. ::: **Connect to Microsoft Places and find the building ID:** ``` Connect-MicrosoftPlaces Get-PlaceV3 -Type Building | ft DisplayName,PlaceId ``` **Export a CSV of building resources** (adjust the file path): ``` Get-PlaceV3 -AncestorId | export-csv "C:\path\to\save\csv\assets.csv" ``` **Download the IMDF from Mappedin Maker:** Open Mappedin Maker and select the map. From the **Integrations Menu**, choose **Sync map to Microsoft Places**. !Integration menu in Mappedin Maker Click the **Download IMDF** button. !Download IMDF button Upload the CSV file exported from Microsoft Places, then click **Export IMDF** to download the map export. !Upload CSV dialog !Export IMDF button **Upload the IMDF to Places** (adjust the file path): ``` New-Map -BuildingId -FilePath "C:\path\to\map\export\imdf_correlated.zip" ``` ## Update an Existing Map To update a map, the existing map must be deleted first and a new map imported. **Connect and find the building ID:** ``` Connect-MicrosoftPlaces Get-PlaceV3 -Type Building | ft DisplayName,PlaceId ``` **Remove the existing map:** ``` Remove-Map -BuildingId ``` Then follow the steps in Export and Upload the Map to upload the new version. ### Mapping Requirements # Mapping Requirements Complete the requirements below before sending a map to Microsoft Places using either the automated sync or the IMDF export. :::info New to Mappedin Maker? Watch the Mappedin Guided Video Tutorials to get started. ::: ## Quick Reference ### Both Methods - Single building per map - Location labels on all bookable spaces - No duplicate location names - Rooms fully enclosed with doors and capacity ≥ 1 - Desks with capacity ≥ 1, correct orientation, and rectangle geometry ### Differences by Method | Requirement | Automated Sync | IMDF Export | | --- | --- | --- | | Building name | Must be unique within the Places tenant | Not required to match — referenced by ID | | Floor names | No matching required — sync creates floors from Maker | Must match existing floor resources in Places for correlation | | Exchange resources | Not required — sync creates resources using names from Maker | Required — names must match pre-existing Exchange/Places resources | | Advanced options | Not available | Preserve rotation, generate wall units, exclude uncorrelated objects, treat uncorrelated objects as furniture | --- ## Shared Requirements The following rules apply regardless of integration method. ### Pre-Mapping Checklist - **Single building only.** Multi-building campus maps are not supported for the Places integration. Each building must be mapped as a separate venue. :::tip When using AI mapping, turn off location labeling. AI-generated labels may be incorrect and require manual cleanup before syncing or exporting. ::: ### Locations and Naming :::warning Location naming is the #1 source of integration failures. Verify all names before syncing or exporting. ::: Every bookable space (room or desk) must have a location label in Mappedin Maker. | Rule | Details | | --- | --- | | **Every bookable space needs a location** | Attach a location label to each room or desk object that should be bookable in Places. | | **No duplicate location names** | Every location must be unique. Use names like "Office 1002" instead of "Office". The only exception is restrooms, which can share a name. | | **Clean up unattached locations** | Locations not attached to a room or object have no geometry and are ignored during export and sync. Removing them keeps the Locations panel organized. | | **One location per space** | A single location name should not be attached to multiple separate spaces. | :::tip Turn on labels in Maker's **Layers** menu to visually verify that all bookable spaces are named correctly before syncing or exporting. ::: #### Setting a Location Name To set a location name, click on the room or object in Mappedin Maker and press the **+ Add Location** button. Enter the name and press enter to save. **Mappedin Room Name** !Mappedin Add Location !Mappedin Room Name **Corresponding Places Conference Room Name** !Places Conference Room Name ### Rooms #### Room vs. Desk Booking Before mapping, determine how each space should be booked in Places: | | Book as Room | Book as Desk | | --- | --- | --- | | **How to map** | Map the space as a Room. Do not place Objects inside it. | Place a Desk Object inside the space and attach the location to the object, not the room. | | **Places requirement** | A Room resource in Exchange/Places. Created automatically by the sync; must pre-exist for the IMDF export. | A Desk resource in Exchange/Places. Created automatically by the sync; must pre-exist for the IMDF export. | | **Use case** | Conference rooms, meeting rooms, private offices | Cubicles, hot desks, open-plan workstations | #### Room Mapping Rules - **Rooms must be fully enclosed by walls.** Partial walls or room dividers do not render in Places. Only fully enclosed spaces appear. - **Every room needs a door.** A room without a door is categorized as "nonpublic" in the IMDF export and will not appear as a bookable or navigable space in Places. - **Rooms must have capacity of at least 1.** :::warning A room with no door is the most common reason rooms "disappear" in Places. Always add a door to every room that should be visible. ::: :::info Watch the Mappedin Walls & Rooms Tutorial for help with creating rooms. ::: #### Special Room Naming Places assigns icons based on room names. The following naming conventions are recognized: | Category | Accepted Names (case-insensitive for icon detection) | Icon in Places | | --- | --- | --- | | Restroom | "Washroom", "Toilet", "Restroom", "Bathroom" | Yes | | Stairs / Escalator | Detected automatically via connections | Yes | | Elevator | Detected automatically via connections | Yes | | Kitchen | "Kitchen", "Kitchenette", "Cooking" | No — encoded correctly but not rendered by Places | ### Desks :::info Watch the Mappedin Object Tutorial for help with creating objects. ::: - **Use the Rectangle Object tool.** Do not use circles or custom objects for desks. Custom objects produce unexpected orientation in Places. - **Desks must have capacity of at least 1.** Objects with capacity = 0 are skipped during sync and export. - **Desk orientation matters.** Orientation in Places is determined by the rotation stem in Maker. Ensure all rotation stems point upward for consistent orientation. - **Do not snap desks together.** Leave a small gap between desk objects. Snapped desks may merge or render incorrectly. :::tip Hold **Command** (Mac) or **Ctrl** (Windows) when stamping desks to disable snapping. ::: **Mappedin Object Name** !Mappedin Object Name !Mappedin Object Name **Corresponding Places Desk Pool Name** !Places Desk Pool Name ### Connections Stairs and elevators can be added to the map and appear in Places with their respective icons. They do not need to be named — connections are detected automatically. ### Sections Sections are mapped using the **Areas** tool in Maker. Give each area a name to correlate it with a section in Places. Sections have no visual representation in Places but are used for organizational and data correlation purposes. ### Mappedin Features Not Supported by Places | Feature | Notes | | --- | --- | | Point Tools / POIs | Not part of the Places IMDF spec | | Safety Annotations | Not part of the Places IMDF spec | | Map Views | Not part of the Places IMDF spec | | amenity.geojson | Not supported by the Places IMDF spec | | Room divider walls | Partial walls that do not fully enclose a space are not rendered | --- ## Automated Sync Requirements The following requirements apply only when using the automated sync. - **Unique building name.** The building name in Maker must be unique within the Microsoft Places tenant. If a building with the same name already exists and was not created by Mappedin, the sync will fail. - **Names become resource names.** The sync creates rooms, desks, and workspaces in Places using the names from Maker. Ensure location names are descriptive and correctly spelled before syncing. - **Sync creates its own resources.** The automated sync cannot connect to pre-existing Exchange resources. To link to existing rooms or desks in Exchange, use the IMDF export instead. - **Capacity determines resource type.** Objects with capacity = 1 sync as Desks, capacity > 1 as Workspaces, and capacity = 0 or unnamed objects are skipped. --- ## IMDF Export Requirements The following requirements apply only when using the IMDF export. - **Location names must match existing resources.** Names in Maker must exactly match the display names of pre-existing rooms, desks, or workspaces in Exchange/Places. Matching is case-sensitive — spelling and capitalization must be identical. - **Floor names must match existing resources.** Floor names in Maker must match the corresponding floor resources in Places. Mismatched floor names cause correlation failures. - **Building is referenced by ID.** The building name in Maker does not need to match the Places building name. The export uses the building's PlaceId from the CSV. - **CSV is required for correlation.** A CSV exported from Places via PowerShell is uploaded during the IMDF export to correlate Mappedin spaces with Places resources. - **Advanced options.** The IMDF export includes the following optional toggles under **Advanced Options**: - **Preserve rotation** — Preserve the rotation of shapes or objects instead of letting Places infer it. Enable this if desk rotation appears incorrect after export. - **Generate wall units** — Add wall geometry as structure units in the exported IMDF. - **Exclude uncorrelated objects** — Exclude fixtures for shapes or objects that are not correlated in Places from the exported IMDF. - **Treat uncorrelated objects as furniture** — Assign uncorrelated shapes or objects the "furniture" category instead of "desk" in the exported IMDF. --- ## Resource Mapping Reference The following table summarizes how resources in Mappedin map to resources in Microsoft Places. For the IMDF export, names in Maker must match pre-existing resource display names. For the automated sync, names from Maker become the resource display names. | Microsoft Places Resource | Mappedin Resource | Naming | | --- | --- | --- | | Conference Room — A room that can be booked. | Room — An area surrounded by walls with 1 or more doors. | Mappedin Room Name corresponds to the Conference Room Display Name. | | Desk Pool — A pool of desks with one or more seats that can be booked. | Object — An object placed within a space. | Object Name corresponds to the Desk Pool Display Name. | | Desk — An individual desk that can be booked. | Object — An object placed within a space. | Object Name corresponds to the Individual Desk Display Name. | | Floor — A level in a building. | Floor — A level in a building. | Places prefixes the Mappedin floor name with **Floor**. Sort order should match the elevation in Mappedin. | | Building — The top level container for floors. | Map — A map containing all elements listed above. | Configured during integration. See the IMDF Export or Automated Sync. | | Restroom | Room named `bathroom`, `restroom`, `washroom`, or `toilet` | Mappedin Room Name matches one of the listed names. | | Kitchen | Room named `kitchen`, `kitchenette`, or `cooking` | Mappedin Room Name matches one of the listed names. | | Office | A room with a name that doesn't match a conference room name. | — | | Unspecified | A room without a name. | — | ### Microsoft Places Integration # Microsoft Places Integration :::note Microsoft Places is currently in a preview state and is under active development by Microsoft. ::: Microsoft Places is a connected workplace app for managing flexible work. Indoor maps created with Mappedin can be imported into Microsoft Places to provide a visual representation of buildings, enabling room booking, desk reservations, and wayfinding. !A Mappedin indoor map displayed within Microsoft Places ## Choose an Integration Method There are two ways to get a Mappedin indoor map into Microsoft Places. Choose the method that fits the environment. | | Automated Sync | IMDF Export | | --- | --- | --- | | **How it works** | Sync directly from Mappedin Maker | PowerShell commands with CSV correlation | | **Pre-existing Exchange resources** | Not supported — can only manage resources it creates | Fully supported | | **Control over output** | Automatic | Full control over IMDF and resource configuration | | **Typical use** | New setups, single-step provisioning | Existing Exchange infrastructure, fine-tuned configuration | :::warning The automated sync creates its own resources and cannot connect to pre-existing Exchange resources. Use the IMDF export to link to existing rooms or desks. ::: ## Getting Started Regardless of which method is used, the map must first be prepared correctly in Mappedin Maker. Naming, room enclosure, and desk configuration errors are the most common causes of integration failures. 1. **Mapping Requirements** — Prepare the map in Mappedin Maker. Complete this before attempting either integration method. 2. Choose an integration method: - **Automated Sync** — Sync directly from Mappedin Maker. - **IMDF Export** — PowerShell-based workflow with full control. 3. **Troubleshooting & FAQ** — Diagnose issues and find answers to common questions. ### Microsoft Places Sync # Microsoft Places Sync :::warning The automated sync is currently in beta. ::: The automated sync pushes indoor map data from Mappedin Maker to Microsoft Places. Buildings, floors, rooms, workspaces, desks, and sections are created in Places, along with an IMDF file for visualization. :::tip The automated sync creates its own resources and cannot connect to pre-existing Exchange resources. If linking to existing resources is needed, or more control over the produced IMDF file is required, use the IMDF Export instead. ::: **Before starting, complete the Mapping Requirements checklist to ensure the map is prepared correctly.** ## Getting Started ### 1. Prerequisites Before syncing for the first time, make sure the following requirements are met: - **Microsoft 365 Subscription** - You must have a Microsoft 365 or Office 365 subscription that includes Places core features - Supported plans include: - Microsoft 365 Business Basic, Standard, Premium - Office 365 E1, E3, E5 - Microsoft 365 E3, E5 - Education A1, A3, A5 - Frontline F1, F3 - Teams Essentials and Teams Enterprise - See link above for up to date list - Additionally, Places Finder, individual desk booking, and other advanced features require a Teams Premium license - **Admin Role Required** - The first sync must be completed by a user with one of these roles: - Global Administrator - Exchange Administrator - Places Administrator - **Consent** - On first sign in, a Microsoft permissions prompt will appear. An admin must grant consent before syncs can succeed - **User Access After Consent** - After consent is granted, any user with one of the above roles can run syncs for the same tenant :::warning If consent isn't granted the first time, sync will fail until an admin completes this step. ::: :::note If your organization recently set up Microsoft 365 or enabled Microsoft Places for the first time, you may need to wait 24–48 hours for Microsoft to finish provisioning the Places service before syncing. ::: ### 2. Running Your First Sync **Step 1 — Open Mappedin** - Sign in to Mappedin. - Open the map you intend to sync, or create a new map. > Unsure how to create an indoor map? Watch the Mappedin Guided Video Tutorials to get started. **Step 2 — Start the Sync** - Click the Sync to Microsoft Places button in the integration dropdown in the top right of the map editing screen. !Sync map to Microsoft Places button shown in top right of screenshot of Mappedin **Step 3 — Sign In To Microsoft** - A Microsoft sign in window will open. - Sign in with a Microsoft account that has one of the required admin roles !Microsoft sign in dialog screenshot **Step 4 — Grant Consent (first time only)** - If this is the first sync for the tenant, a consent screen is shown - Check "Consent on behalf of your organization" - Review the requested permissions and click Accept !Microsoft sign in consent dialog with consent on behalf checked :::note Only admins can grant consent. Once granted, other users with the correct role can sync without seeing this screen again. ::: **Step 5 — Wait for the Sync to Complete** - Mappedin will automatically push the building data, locations, and IMDF to Microsoft Places - A confirmation message will appear to indicate the sync is successful !Screenshot of the success modal shown in Mappedin after syncing to Microsoft Places :::tip It is safe to re-run syncs at any time to update map in Microsoft Places. ::: :::note The automated sync is in beta and may not be fully stable yet. Retry the sync if it fails. ::: ### 3. What to Expect After Sync The sync automatically creates and updates resources directly in Microsoft Places. It is not necessary to pre-create resources or upload CSVs in PowerShell. - A new building is created in Places, or an existing one (if created by Mappedin) is updated - Floors, sections, rooms, workspaces, and desks are created with the same names and descriptions from Mappedin - Rooms sync if they are named and have capacity of at least 1 - Objects sync as desks (capacity = 1), workspaces (capacity > 1), or are skipped (capacity = 0 or unnamed) - Objects appear as icons with the same rotation set in Mappedin - An IMDF file is uploaded for visualization :::tip Only resources created by Mappedin are modified. Pre-existing resources not parented to Mappedin-controlled resources are left untouched. ::: :::note New or updated resources may take up to 48 hours to appear in Microsoft 365 apps. ::: !Screenshot of synced rooms within Microsoft Places !Screenshot of synced desks within Microsoft Places ## Reference ### How Data is Synced - **Buildings & Floors** - One Mappedin building = one Places building - If the building already exists in Places from a Mappedin sync, it is updated - Buildings created outside of Mappedin are not modified - A single Mappedin building can be synced to multiple tenants; resources are tracked per tenant ID - Empty floors (no walls or rooms) in Mappedin are not synced - All buildings in a tenant must have unique names. - **Rooms & Objects** - Only named items are synced - Rooms sync if named and capacity ≥ 1 - Objects: - Capacity = 1 → Desk - Capacity > 1 → Workspace - Capacity = 0 → not synced - Object icons in Places match the rotation set in Mappedin (geometry is not yet represented) - **Sections** - Areas in Mappedin map to Sections in Places - Objects inside an area are parented to that section - Each floor will have a default section created. Objects not inside a named area are parented to the default floor section - **Names & Properties** - Names must be unique; duplicates are auto-suffixed (-1, -2, …) - Synced fields: - Name → Display Name (everything) - Description → Description (rooms, workspaces, desks, sections) - Capacity → Capacity (rooms, workspaces, desks) - Elevation → Sort Order (floors) - **Geometry** - An IMDF is generated, correlated, and uploaded on every sync - Used for visualization in Microsoft Places ### How Sync Works - **First Sync** - Creates a new building, floors, sections, rooms, workspaces, and desks - Parent-child relationships are preserved - **Later Syncs** - Updates resources created by Mappedin - If a resource cannot be updated, it may be deleted and re-created - External resources not created by Mappedin and not parented to resources created by Mappedin are not modified - **Stale Resources** - Sometimes resources cannot be removed automatically - These remain as stale entries and must be deleted manually in the Places Admin dashboard ### Troubleshooting If the sync fails or results don't appear as expected, see the Troubleshooting & FAQ page. ### Resources - Microsoft Places overview - Set up and manage Places in Microsoft 365 - IMDF Export - Mapping Requirements ### Troubleshooting & FAQ # Troubleshooting & FAQ ## Quick Diagnostic Checklist When an export or sync fails, or results don't appear as expected, work through these steps in order: 1. **Confirm the integration method.** Is the automated sync or the IMDF export being used? To connect to pre-existing Exchange resources, the IMDF export must be used. - **If using the IMDF export, verify name alignment.** Cross-reference all location names in Mappedin Maker with the resource display names in Microsoft Places or the exported CSV. Names must match exactly (case-sensitive & spelling). 2. **Check for duplicate locations.** Open the Locations panel in Maker and look for duplicate location names or a single location attached to multiple spaces. 3. **Check room doors.** If rooms are missing from Places, verify every room has at least one door. Rooms without doors are exported as "nonpublic" and hidden. 4. **Check desk orientation.** If desks appear rotated incorrectly, verify the rotation stem direction. ## Frequently Asked Questions ### Export and Sync **My export or sync keeps failing. What should I check first?** The most common cause is location name duplication. For the IMDF export, verify that the CSV resource names and Mappedin location names match. **Should I use the automated sync or the IMDF export?** The two methods serve different environments. The IMDF export supports pre-existing Exchange resources and provides full control over the IMDF output via PowerShell. The automated sync handles resource creation and IMDF upload in a single step from Mappedin Maker. See the method comparison for details. **Can the automated sync be used with pre-existing Exchange resources?** No. The automated sync creates its own resources and cannot connect to pre-existing ones. To link to existing rooms or desks in Exchange, use the IMDF export. **The sync was partially successful. What happened?** Each resource creation during a sync is an independent operation. If some succeed and others fail, the successful ones already exist in Places. Review which resources were created, fix the issues that caused failures, and retry. The sync does not roll back previously created resources. ### Rooms **Rooms are not showing up in Places.** Check that every room has at least one door. Rooms without an entrance are automatically categorized as "nonpublic" in the IMDF file and hidden in Places. Also verify the room has a location label and the name matches what is configured in Places. **Why don't kitchen icons show up in Places?** Places currently renders icons for restrooms, stairs/escalators, and elevators. Kitchen icons are not displayed. ### Desks **Desks look rotated incorrectly in Places.** In Maker, select each desk object and check that the rotation stem is pointing upward. If the issue persists, enable the **Preserve Rotation** toggle in the export's advanced options. **Desks are difficult to see in Places.** Desks currently require significant zoom to become visible in Microsoft Places. ### Configuration **What Microsoft subscription is required?** See Microsoft's license requirements. **Is an Exchange Online mailbox required?** Yes. Places requires Exchange Online. On-premises mailboxes are not supported. **Can a multi-building campus map be sent to Places?** No. The Places integration supports a single building at a time. Multiple buildings must each be mapped as a separate venue in Maker and synced or exported individually. **Can the same building be synced to multiple tenants?** Yes. Synced resources are tracked per tenant ID. **Is a live map required?** No. Both draft and live maps can be synced or exported. **How long before changes show up?** Usually within a few hours, but new or updated resources can take up to 48 hours to appear in Microsoft 365 apps. **Why do some walls not appear in Places?** Places only renders fully enclosed walls. Partial walls or room dividers that do not form a complete enclosure will not appear on the map. ## Known Limitations The following are known limitations in the current Microsoft Places integration: | Limitation | Details | | --- | --- | | Kitchen icons not displayed | Kitchen icons are not currently rendered in Places. | | Desk visibility at low zoom | Desk icons require significant zoom to become visible in the Places UI. | | Propagation delays | New or updated resources can take up to 48 hours to appear in Microsoft 365 apps. | ## Resources - Microsoft Places overview - Set up and manage Places in Microsoft 365 - Microsoft Places IMDF file requirements