Niagara 4 - 3D Maps with Values

  • Mapbox FREE Api
  • Add Map Markers & Links
  • Show Points with Icons
  • Multiple Themes
  • Add/Change marker images
  • Markers cluster together at different zoom levels
  • Location search box - Zooms in and pans
  • Marker Images update in Real-time
  • Values Update in Real-Time
  • Show markers in tabular format
  • Mobile touch friendly
  • Requires Internet Connection*
  • Works in Workbench and Modern Browser
Add to Cart


The 3d Mapping displays buildings in 3D using the Mapbox api and displays a street map of the world and you can add markers via a simple JSON config. Choose between multiple themes. The JSON config allows you to set up to 5 ord values. The values are shown on a tooltip via single click, which is great for mobile users as well. Markers can have different images OR bind each marker to a boolean/enum, and the marker image will change based on the value. A search box will easily find your marker with a zoom/pan feature after clicking the entry. At high zoom levels, markers cluster together. You can add custom marker images or use the defaults ones provided.

*You need an internet connection to view the maps, however if you are on a restricted network, its recommended you set up an outbound firewall rule to the mapping server:
Sign up for a free Mapbox api key at
The first 50,000 page loads per month are free which is more than enough.

The widget has a number of configurable properties that can be used to modify look, feel, and functionality.

Are you looking for a cost effective way to manage and visualize data for all your customers? Why not have a look at View Builder?


Before you start. Download the modules from our portal (see your order confirmation, which also explains licensing). Copy the modules file to your modules directory. Restart BOTH station and Workbench.

1. Copy the mapping3d-ux.jar file to your modules directory.
2. Open the module from your palette file.
3. Drag and drop the widget from the palette onto your px view.
4. API KEY (!important):
Make sure you enter the api key in the widget property sheet or the map will not load.

Web Service Content Security Policy (!important):

Note: in >4.10 you will need to modify the Web Service settings in the station to allow maps to show up:

'self' workbench ws://%hostname%:%port% wss://%hostname%:%port%

'self' workbench

'self' workbench data:

'self' workbench 'unsafe-inline'

'self' workbench 'unsafe-inline' 'unsafe-eval' blob://*

Tridium mapping library


bms map properties

The widget has a number of configurable properties that can be used to modify look, feel, and functionality. Change the properties as required:

File Config

A JSON config for map markers. See below for setup.
You can point the menu to a file that exists on the station.
Valid values are ords e.g.: file:^openMapsFolder/config.txt
If you do not specify a file reference, an message will show up.
Verify all point exist in your config.

Heres a sample config to help you get started. Download


The map will display at this location when initialised.


The viewing angle of the map. You can hold down the right mouse button to change the pitch angle on screen.

Overview Control, Scale Control, Zoom Control

Shows/hides the controls on the map. Set to true or false.


The default zoom level.


Set these values to manually set the height/width of the map frame.

Map Style

Possible values
outdoors-v11, light-v10, dark-v10, satellite-v9, satellite-streets-v11, navigation-day-v1, navigation-night-v1

Map Box Api Url and Map Box CSS Style

At the time of writing this document the version was 2.10.0.

So you can change the following on the widget property sheet:

Api Url:
Css Style Url:

Check the latest version here:

Marker Change

Set the markerChangeValueOrd to a boolean or enum point. The value or index for each determines which marker to show.

defaultMarkerImage: boolean value false. enum index of 0
value1MarkerImage: boolean value true. enum index of 1
value2MarkerImage: enum index of 2
value3MarkerImage: enum index of 3
value4MarkerImage: enum index of 4

Tridium map cluster

You can use the default images within the module, or place a marker image in the stations shared folder and set it on the widget property sheet.


At high zoom levels, the markers will cluster together so they don't gather together on the map. Markers clustered up to 25 will be clusterCountLow, 25 - 100, clusterCountMedium, > 100, clusterCountHigh.

Tridium map cluster

Search Box

Finds markers from your map config file. When an entry is clicked it will zoom and pan to that location accordingly. To move the search box to another location modify the searchBoxLPositionLeft. Default is calc(50% - 125px), which is centered. calc(0% - 125px) = left. calc(100% - 125px) = right.

Tridium mapping search

Show as table

Tridium map table

Markers & Links

The marker config is in JSON format. You can customise as needed. Special characters should be avoided. Advanced users can enter html content in the label and tooltipText properties. Heres a sample config to help you get started. All ords must resolve. Download

If no link is specified, the marker, label, and tooltip will be shown. For links to navigate correctly in Workbench, and if you're running 4.3 or above, there should be a "toggle preview" button at the end of the toolbar when looking at a Px graphic. This will show you your Px page rendered in a browser and the links will work correctly

  "markers": [
      "lat": "40.71278360606477",
      "long": "-74.00605081077515",
      "link": "/ord/file:%5Etemplates/viewBuilder/Niagara44_46_47_48/index.html%7Cview:web:FileDownloadView#/floorplanZoningView/station:|slot:/Drivers/Sites/Overview/Main$20Building?displayName=Main%20Building",
	  "linkTarget": "top",
      "label": "City Hall",
	  "defaultMarkerColor": "#3fa9f5",
	  "image": "/ord/file:%5Enyc.jpg",
	  "markerChangeValueOrd": "station:|slot:/Drivers/Sites/Overview/EnumWritable",
	  "ord": "station:|slot:/Drivers/Sites/Overview/COMeasurement",
	  "ordDisplayName": "",
	  "ord1": "station:|slot:/Drivers/Sites/Overview/Humidity",
	  "ord1DisplayName": "",
	  "ord1Icon": "",
	  "ord2": "station:|slot:/Drivers/Sites/Overview/Temperature",
	  "ord2DisplayName": "",
	  "ord2Icon": "",
	  "ord3": "station:|slot:/Drivers/Sites/Overview/TotalAlarms",
	  "ord3DisplayName": "",
	  "ord3Icon": "",
	  "ord4": "station:|slot:/Drivers/Sites/Overview/InAlarm",
	  "ord4DisplayName": "In Alarm",
	  "ord4Icon": ""
      "lat": "40.71345870797279",
      "long": "-74.00420073930606",
      "link": "/ord/station:|slot:/Drivers/Sites",
	  "linkTarget": "parent",
      "label": "NY Supreme Court",
	  "defaultMarkerColor": "#3fa9f5",
	  "image": "",
	  "markerChangeValueOrd": "station:|slot:/Drivers/Sites/Overview/InAlarm1",
	  "ord": "station:|slot:/Drivers/Sites/Overview/COMeasurement1",
	  "ordDisplayName": "Custom Name 1",
	  "ord1": "station:|slot:/Drivers/Sites/Overview/Humidity1",
	  "ord1DisplayName": "",
	  "ord1Icon": "/module/openStreetMapWithValues/rc/humidity-sm.png",
	  "ord2": "station:|slot:/Drivers/Sites/Overview/Temperature1",
	  "ord2DisplayName": "",
	  "ord2Icon": "/module/openStreetMapWithValues/rc/themometer-sm.png",
	  "ord3": "station:|slot:/Drivers/Sites/Overview/TotalAlarms1",
	  "ord3DisplayName": "",
	  "ord3Icon": "",
	  "ord4": "station:|slot:/Drivers/Sites/Overview/InAlarm1",
	  "ord4DisplayName": "",
	  "ord4Icon": ""
      "lat": "40.71342649582865",
      "long": "-74.00555140885042",
      "link": "",
	  "linkTarget": "parent",
      "label": "Old County Courthouse",
	  "defaultMarkerColor": "#3fa9f5",
	  "image": "/ord/file:%5Ecourthouse.jpg",
	  "markerChangeValueOrd": "station:|slot:/Drivers/Sites/Overview/InAlarm2",
	  "ord": "station:|slot:/Drivers/Sites/Overview/COMeasurement2",
	  "ordDisplayName": "",
	  "ord1": "station:|slot:/Drivers/Sites/Overview/Humidity2",
	  "ord1DisplayName": "",
	  "ord1Icon": "/module/openStreetMapWithValues/rc/humidity-sm.png",
	  "ord2": "station:|slot:/Drivers/Sites/Overview/Temperature2",
	  "ord2DisplayName": "",
	  "ord2Icon": "/module/openStreetMapWithValues/rc/themometer-sm.png",
	  "ord3": "station:|slot:/Drivers/Sites/Overview/TotalAlarms2",
	  "ord3DisplayName": "",
	  "ord3Icon": "",
	  "ord4": "station:|slot:/Drivers/Sites/Overview/InAlarm2",
	  "ord4DisplayName": "",
	  "ord4Icon": ""
      "lat": "40.71405935392493",
      "long": "-74.00555747032983",
      "link": "/ord/station:|slot:/Drivers/Sites",
	  "linkTarget": "parent",
      "label": "Sun Building",
	  "defaultMarkerColor": "#3fa9f5",
	  "image": "",
	  "markerChangeValueOrd": "station:|slot:/Drivers/Sites/Overview/InAlarm3",
	  "ord": "station:|slot:/Drivers/Sites/Overview/COMeasurement1",
	  "ordDisplayName": "Level",
	  "ord1": "station:|slot:/Drivers/Sites/Overview/Humidity1",
	  "ord1DisplayName": "",
	  "ord1Icon": "/module/openStreetMapWithValues/rc/humidity-sm.png",
	  "ord2": "station:|slot:/Drivers/Sites/Overview/Temperature1",
	  "ord2DisplayName": "",
	  "ord2Icon": "/module/openStreetMapWithValues/rc/themometer-sm.png",
	  "ord3": "station:|slot:/Drivers/Sites/Overview/TotalAlarms1",
	  "ord3DisplayName": "",
	  "ord3Icon": "",
	  "ord4": "station:|slot:/Drivers/Sites/Overview/InAlarm1",
	  "ord4DisplayName": "",
	  "ord4Icon": ""
      "lat": "40.71386671789514",
      "long": "-74.00686233672307",
      "link": "/ord/station:|slot:/Drivers/Sites",
	  "linkTarget": "parent",
      "label": "Financial Building",
	  "defaultMarkerColor": "#3fa9f5",
	  "image": "",
	  "markerChangeValueOrd": "station:|slot:/Drivers/Sites/Overview/InAlarm4",
	  "ord": "station:|slot:/Drivers/Sites/Overview/COMeasurement1",
	  "ordDisplayName": "Custom Name 1",
	  "ord1": "station:|slot:/Drivers/Sites/Overview/Humidity1",
	  "ord1DisplayName": "",
	  "ord1Icon": "/module/openStreetMapWithValues/rc/humidity-sm.png",
	  "ord2": "station:|slot:/Drivers/Sites/Overview/Temperature1",
	  "ord2DisplayName": "",
	  "ord2Icon": "/module/openStreetMapWithValues/rc/themometer-sm.png",
	  "ord3": "station:|slot:/Drivers/Sites/Overview/TotalAlarms1",
	  "ord3DisplayName": "",
	  "ord3Icon": "",
	  "ord4": "station:|slot:/Drivers/Sites/Overview/InAlarm1",
	  "ord4DisplayName": "",
	  "ord4Icon": ""

JSON Values Explained:

lat- geo coordinate.
long- geo coordinate.
link- link to when clicked on tooltip label.
linkTarget- link to target window. Default is parent. Possible values: blank, self, parent, or top.
label- label to show on map and tooltip.
defaultMarkerColor- default color for marker when spectrum binding is false.
image- image to show on tooltip. Flie can be in the stations shared directory e.g. /ord/file:%5Enyc.jpg
markerChangeValueOrd- ord binding to marker change value when spectrum binding is used. Absolute ord e.g. station:|slot:/Drivers/Sites/Overview/COMeasurement. Its best to use a boolean or enum. Boolean will be 0 or 1. The enum index will determine the value e.g. 0, 1, 2.
ord- ord value for tooltip data. Absolute ord e.g. station:|slot:/Drivers/Sites/Overview/COMeasurement
ordDisplayName- ord value display name on tooltip.
ord1- ord value 1 for tooltip data.
ord1DisplayName- ord value 1 display name on tooltip.
ord1Icon- icon to show on tooltip. File can be in the stations shared directory e.g. /ord/file:%5EopenMaps/brt-medium.png or come from a module e.g. /module/openStreetMapWithValues/rc/humidity-sm.png
ord2- ord 2 value.
ord2DisplayName- ord 2 display name.
ord2Icon- ord 2 icon.
ord3- ord 3 value.
ord3DisplayName- Ord 3 display name.
ord3Icon- ord 3 icon.
ord4- ord 4
ord4DisplayName- ord 4 display name.
ord4Icon- ord 4 icons.

JSON Editing To help build your menu configuration use an online JSON editor like:

Using in your HTML Page

You can now use the widget in your custom html page as long as the html file is in a appropriate station directory. E.g.:

1. Create an html page and place in your station files directory.
2. Create a div element and give it an id so you can inject the widget into this area. E.g.: widget1.
3. Add the following scripts before the closing head tag or the closing body tag. E.g.:

        <script type="text/javascript">

            var require = {
                paths: {
                    "nmodule": "/module",
                    "baja": "/module/bajaScript/rc/plugin/baja",
                    "bajaScript": "/module/bajaScript/rc",
                    "bajaux": "/module/bajaux/rc",
                    "lex": "/module/js/rc/lex/lexplugin",
                    "css": "/module/js/com/tridium/js/ext/require/css",

                    "jquery": "/module/js/rc/jquery/jquery-2.1.1",  // For N4.4 or higher use /module/js/rc/jquery/jquery-3.2.0.min
                    "Promise": "/module/js/rc/bluebird/bluebird",

                    // these are runtime dependencies
                    "hbs": "/module/js/rc/require-handlebars-plugin/hbs", // For N4.4 or higher use /module/js/rc/handlebars/handlebars.min-v4.0.6
                    "i18nprecompile": "/module/js/rc/require-handlebars-plugin/hbs/i18nprecompile",
                    "json2": "/module/js/rc/require-handlebars-plugin/hbs/json2",
                    "underscore": "/module/js/rc/underscore/underscore",

                hbs: {
                    disableI18n: true
        <script type="text/javascript" src="/module/js/com/tridium/js/ext/require/require.min.js"></script>
            require(['/module/mapping3d/rc/'], function (app) {
                    apiAccessToken: 'YOUR API KEY,  // sign up at first 50,000 page loads per month are free,
                    baseMapsUrl: 'https://{s}{z}/{x}/{y}.png', // see help for different styles
                    divId: '#widget1',
                    changeMarkerColorOnValue: true, // when true it will use the markerChangeValueOrd 0, 1, or 2 to change colors
                    mapStyle: 'dark-v10', // outdoors-v11, light-v10, dark-v10, satellite-v9, satellite-streets-v11, navigation-day-v1, navigation-night-v1
                    mapBoxApiUrl: '',
                    mapBoxCssStyle: '',
                    markerColorValue0: '#3fa9f5', // a value of 0 for the markerChangeValueOrd will change it to this color
                    markerColorValue1: '#ff0000', // a value of 1 for the markerChangeValueOrd ord will change it to this color
                    markerColorValue2: '#FF9C1B', // a value of 2 for the markerChangeValueOrd ord will change it to this color
                    mapConfig: 'file:^mapping3d/markers.txt',
                    labelFontColor: '#ffffff',
                    latitude: '40.71294499653521',
                    longitude: '-74.00399833899458',
                    height: '', // Set these values to manually set the height/width of the map frame
                    width: '', // Set these values to manually set the height/ width of the map frame
                    pitch: '45',
                    bearing: '-17.6',
                    zoom: 17,

        <!--2 Divs are required-->
        <div style="width:800px;height:450px;">
            <div id="widget1" style="width:800px;height:450px;"></div>
        <!--Rest of your html below...-->

You May Also Like

Open Street Maps With Values

N4 View Builder™©

tridium bms system

Multiline Chart

tridium charting

back to more widgets...