Enterprise — Set up a custom feature layer for tracking (optional)

Available with the ArcGIS Indoors Maps extension.

ArcGIS Indoors supports device location sharing through a custom feature layer hosted on a spatiotemporal data store associated with your portal. You can use this service instead of the Location Sharing service.

Caution:

This service only supports collecting device tracks (historic locations). The feature that searches for colleagues and their last known location is not available through this setup.

The Indoors mobile app always reports locations to the Location Sharing feature layer if it is enabled on your portal, even when you configure a custom feature layer.

Device tracking feature schema

The following table describes the fields and data types of the tracking feature class:

Field name Field alias Data type Description Sample values

activity

Activity

esriFieldTypeInteger

Activity reported by the device (stationary, walking, driving, and so on)

0, 1, 2, ...

altitude

Altitude

esriFieldTypeDouble

Altitude value reported by the GPS receiver on the device

0.5, 1.0, 5.0

app_id

App ID

esriFieldTypeString

Name of the app

ArcGIS Indoors (constant)

background_mode

Background Mode

esriFieldTypeSmallInteger

State of the app when running on the device (background or foreground)

0,1

battery_percentage

Battery Percentage

esriFieldTypeDouble

Battery power reported by the device

1–100

battery_state

Battery State

esriFieldTypeInteger

State of battery reported by the device (charging, discharging)

1,2

course

Course

esriFieldTypeDouble

Heading direction relative to true north

0–359

device_id

Device ID

esriFieldTypeString

Unique identifier of a device running the app

GUID

device_type

Device Type

esriFieldTypeString

Make and model of the device

iPhone 7, Pixel 2

floor

Floor

esriFieldTypeInteger

Vertical order reported by the indoor positioning system

0, 1, 2

horizontal_accuracy

Horizontal Accuracy

esriFieldTypeDouble

Radius of uncertainty of the latitude and longitude values in meters

0.5, 1.0, 2.5

latitude

Latitude

esriFieldTypeDouble

Latitude value reported by the GPS receiver on the device

-90 to 90

location_source

Location Source

esriFieldTypeString

Source of the indoor positioning system signal reported by ELSS

BLE, Wi-Fi, GPS

location_timestamp

Location Timestamp

esriFieldTypeDate

Date and time value when location information was posted

2/21/2019, 10:46 PM

longitude

Longitude

esriFieldTypeDouble

Longitude value reported by the GPS receiver on the device

-180 to 180

session_id

Session ID

esriFieldTypeString

Value representing the tracking session

Tracking Note

signal_strength

Signal Strength

esriFieldTypeDouble

Power present in a received radio signal (RSSI)

-1, -90

speed

Speed

esriFieldTypeDouble

Speed of movement reported by the sensors of the device

1.0 (meter per second)

user_id

User ID

esriFieldTypeString

Username used to sign in to the app

user_Indoors

vertical_accuracy

Vertical Accuracy

esriFieldTypeDouble

Vertical accuracy of the altitude value

0.0, 0.5, 1.0

Create the device tracking feature layer

A feature layer must be set up on your portal and must be created with the device tracking schema to store location data. A spatiotemporal big data store is recommended, as it can scale to manage large amounts of tracking data.

Set up a spatiotemporal data store

To set up a spatiotemporal data store for your portal, complete the following steps:

  1. Install ArcGIS Data Store.
  2. Create a spatiotemporal data store.
    Note:

    Go to https://<my big data store>/arcgis/datastore/ to confirm the configuration status and ensure that the ArcGIS Enterprise server specified in the installation process is listed.

Create a feature layer

To create a feature layer for device tracking, complete the following steps:

  1. Go to https://<my indoors portal>/portal/sharing/rest/login and sign in with the primary administrator's account.
  2. Go to https://<my indoors portal>/sharing/rest/content/users/<admin>/createService.
  3. Type the JSON template in the Create Parameters text box and click Create Service.
    
    {
      "name" : "DeviceTracking_BDS",
      "editorTrackingInfo": {
        "enableEditorTracking": true,
        "enableOwnershipAccessControl": true,
        "allowOthersToUpdate": false,
        "allowOthersToDelete": false,
        "allowOthersToQuery": false
       },
      "capabilities" : "Create,Delete,Query,Update,Editing",
    options: {"dataSourceType":"spatiotemporal"}
    }
    Note:

    Note the service URL when the service is created and ensure that it exists.

Create a feature layer

To create a feature layer for device tracking, complete the following steps:

  1. Go to https://<my indoors portal>/server/rest/admin/services/Hosted/<name>/FeatureServer/addToDefinition.
  2. Type the JSON template in the Input text box and click addToDefinition.
    {
                    "layers": [{
                                    "currentVersion": 10.7,
                                    "cimVersion": "2.3.0",
                                    "id": 0,
                                    "name": "DeviceTracking_BDS",
                                    "type": "Feature Layer",
                                    "parentLayer": null,
                                    "defaultVisibility": true,
                                    "minScale": 0,
                                    "maxScale": 0,
                                    "geometryType": "esriGeometryPoint",
                                    "description": "",
                                    "copyrightText": "",
                                    "editFieldsInfo": {
                                                    "creationDateField": "created_date",
                                                    "creatorField": "created_user",
                                                    "editDateField": "last_edited_date",
                                                    "editorField": "last_edited_user"
                                    },
                                    "syncCanReturnChanges": true,
                                    "relationships": [],
                                    "isDataVersioned": false,
                                    "isDataArchived": false,
                                    "isDataBranchVersioned": false,
                                    "isCoGoEnabled": false,
                                    "supportsRollbackOnFailureParameter": true,
                                    "supportsStatistics": true,
                                    "supportsAdvancedQueries": true,
                                    "supportsValidateSQL": true,
                                    "supportsCoordinatesQuantization": true,
                                    "supportsCalculate": true,
                                    "advancedQueryCapabilities": {
                                                    "supportsReturningQueryExtent": true,
                                                    "supportsStatistics": true,
                                                    "supportsDistinct": true,
                                                    "supportsPagination": true,
                                                    "supportsOrderBy": true,
                                                    "supportsQueryWithDistance": true,
                                                    "supportsLod": false,
                                                    "supportsPaginationOnAggregatedQueries": true,
                                                    "supportsQueryWithResultType": true,
                                                    "supportsCountDistinct": true,
                                                    "supportsReturningGeometryCentroid": false,
                                                    "supportsHavingClause": true,
                                                    "supportsTopFeaturesQuery": false,
                                                    "supportsOrderByOnlyOnLayerFields": true
                                    },
                                    "extent": {
                                                    "xmin": "NaN",
                                                    "ymin": "NaN",
                                                    "xmax": "NaN",
                                                    "ymax": "NaN",
                                                    "spatialReference": {
                                                                    "wkid": 102100,
                                                                    "latestWkid": 3857,
                                                                    "xyTolerance": 0.001,
                                                                    "zTolerance": 0.001,
                                                                    "mTolerance": 0.001,
                                                                    "falseX": -2.204125862706707E7,
                                                                    "falseY": -3.3265068604224768E7,
                                                                    "xyUnits": 1.3538524994349548E8,
                                                                    "falseZ": -100000,
                                                                    "zUnits": 10000,
                                                                    "falseM": -100000,
                                                                    "mUnits": 10000
                                                    }
                                    },
                                    "sourceSpatialReference": {
                                                    "wkid": 102100,
                                                    "latestWkid": 3857,
                                                    "xyTolerance": 0.001,
                                                    "zTolerance": 0.001,
                                                    "mTolerance": 0.001,
                                                    "falseX": -2.20412586270671E7,
                                                    "falseY": -3.32650686042248E7,
                                                    "xyUnits": 1.35385249943495E8,
                                                    "falseZ": -100000,
                                                    "zUnits": 10000,
                                                    "falseM": 0,
                                                    "mUnits": 1
                                    },
                                    "drawingInfo": {
                                                    "renderer": {
                                                                    "type": "simple",
                                                                    "symbol": {
                                                                                    "type": "esriSMS",
                                                                                    "style": "esriSMSCircle",
                                                                                    "color": [
                                                                                                    28,
                                                                                                    130,
                                                                                                    0,
                                                                                                    255
                                                                                    ],
                                                                                    "size": 4,
                                                                                    "angle": 0,
                                                                                    "xoffset": 0,
                                                                                    "yoffset": 0,
                                                                                    "outline": {
                                                                                                    "color": [
                                                                                                                    0,
                                                                                                                    0,
                                                                                                                    0,
                                                                                                                    255
                                                                                                    ],
                                                                                                    "width": 1
                                                                                    }
                                                                    }
                                                    },
                                                    "scaleSymbols": true,
                                                    "transparency": 0,
                                                    "labelingInfo": null
                                    },
                                    "hasM": false,
                                    "hasZ": true,
                                    "supportsVCSProjection": true,
                                    "allowTrueCurvesUpdates": false,
                                    "onlyAllowTrueCurveUpdatesByTrueCurveClients": true,
                                    "hasAttachments": false,
                                    "supportsApplyEditsWithGlobalIds": true,
                                    "htmlPopupType": "esriServerHTMLPopupTypeAsHTMLText",
                                    "objectIdField": "objectid",
                                    "globalIdField": "globalid",
                                    "displayField": "app_id",
                                    "typeIdField": "",
                                    "fields": [{
                                                                    "name": "objectid",
                                                                    "type": "esriFieldTypeOID",
                                                                    "alias": "OBJECTID",
                                                                    "domain": null,
                                                                    "nullable": false,
                                                                    "editable": false,
                                                                    "sqlType": "sqlTypeInteger"
                                                    },
                                                    {
                                                                    "name": "activity",
                                                                    "type": "esriFieldTypeInteger",
                                                                    "alias": "Activity",
                                                                    "domain": null,
                                                                    "editable": true,
                                                                    "nullable": false,
                                                                    "length": 10,
                                                                    "sqlType": "sqlTypeInteger"
                                                    },
                                                    {
                                                                    "name": "altitude",
                                                                    "type": "esriFieldTypeDouble",
                                                                    "alias": "Altitude",
                                                                    "domain": null,
                                                                    "editable": true,
                                                                    "nullable": false,
                                                                    "length": 38,
                                                                    "sqlType": "sqlTypeNumeric"
                                                    },
                                                    {
                                                                    "name": "app_id",
                                                                    "type": "esriFieldTypeString",
                                                                    "alias": "App ID",
                                                                    "domain": null,
                                                                    "editable": true,
                                                                    "nullable": false,
                                                                    "length": 255,
                                                                    "sqlType": "sqlTypeVarchar"
                                                    },
                                                    {
                                                                    "name": "background_mode",
                                                                    "type": "esriFieldTypeSmallInteger",
                                                                    "alias": "Background Mode",
                                                                    "domain": null,
                                                                    "editable": true,
                                                                    "nullable": false,
                                                                    "length": 5,
                                                                    "sqlType": "sqlTypeSmallInt"
                                                    },
                                                    {
                                                                    "name": "battery_percentage",
                                                                    "type": "esriFieldTypeDouble",
                                                                    "alias": "Battery Percentage",
                                                                    "domain": null,
                                                                    "editable": true,
                                                                    "nullable": false,
                                                                    "length": 38,
                                                                    "sqlType": "sqlTypeNumeric"
                                                    },
                                                    {
                                                                    "name": "battery_state",
                                                                    "type": "esriFieldTypeInteger",
                                                                    "alias": "Battery State",
                                                                    "domain": null,
                                                                    "editable": true,
                                                                    "nullable": false,
                                                                    "length": 10,
                                                                    "sqlType": "sqlTypeInteger"
                                                    },
                                                    {
                                                                    "name": "course",
                                                                    "type": "esriFieldTypeDouble",
                                                                    "alias": "Course",
                                                                    "domain": null,
                                                                    "editable": true,
                                                                    "nullable": false,
                                                                    "length": 38,
                                                                    "sqlType": "sqlTypeNumeric"
                                                    },
                                                    {
                                                                    "name": "device_id",
                                                                    "type": "esriFieldTypeString",
                                                                    "alias": "Device ID",
                                                                    "domain": null,
                                                                    "editable": true,
                                                                    "nullable": false,
                                                                    "length": 256,
                                                                    "sqlType": "sqlTypeVarchar"
                                                    },
                                                    {
                                                                    "name": "device_type",
                                                                    "type": "esriFieldTypeString",
                                                                    "alias": "Device Type",
                                                                    "domain": null,
                                                                    "editable": true,
                                                                    "nullable": false,
                                                                    "length": 255,
                                                                    "sqlType": "sqlTypeVarchar"
                                                    },
                                                    {
                                                                    "name": "floor",
                                                                    "type": "esriFieldTypeInteger",
                                                                    "alias": "Floor",
                                                                    "domain": null,
                                                                    "editable": true,
                                                                    "nullable": false,
                                                                    "length": 10,
                                                                    "sqlType": "sqlTypeInteger"
                                                    },
                                                    {
                                                                    "name": "horizontal_accuracy",
                                                                    "type": "esriFieldTypeDouble",
                                                                    "alias": "Horizontal Accuracy",
                                                                    "domain": null,
                                                                    "editable": true,
                                                                    "nullable": false,
                                                                    "length": 38,
                                                                    "sqlType": "sqlTypeNumeric"
                                                    },
                                                    {
                                                                    "name": "latitude",
                                                                    "type": "esriFieldTypeDouble",
                                                                    "alias": "Latitude",
                                                                    "domain": null,
                                                                    "editable": true,
                                                                    "nullable": false,
                                                                    "length": 38,
                                                                    "sqlType": "sqlTypeNumeric"
                                                    },
                                                    {
                                                                    "name": "location_source",
                                                                    "type": "esriFieldTypeString",
                                                                    "alias": "Location Source",
                                                                    "domain": null,
                                                                    "editable": true,
                                                                    "nullable": false,
                                                                    "length": 256,
                                                                    "sqlType": "sqlTypeVarchar"
                                                    },
                                                    {
                                                                    "name": "location_timestamp",
                                                                    "type": "esriFieldTypeDate",
                                                                    "alias": "Location Timestamp",
                                                                    "domain": null,
                                                                    "editable": true,
                                                                    "nullable": false,
                                                                    "length": 29,
                                                                    "sqlType": "sqlTypeTimestamp"
                                                    },
                                                    {
                                                                    "name": "longitude",
                                                                    "type": "esriFieldTypeDouble",
                                                                    "alias": "Longitude",
                                                                    "domain": null,
                                                                    "editable": true,
                                                                    "nullable": false,
                                                                    "length": 38,
                                                                    "sqlType": "sqlTypeNumeric"
                                                    },
                                                    {
                                                                    "name": "signal_strength",
                                                                    "type": "esriFieldTypeDouble",
                                                                    "alias": "Signal Strength",
                                                                    "domain": null,
                                                                    "editable": true,
                                                                    "nullable": false,
                                                                    "length": 38,
                                                                    "sqlType": "sqlTypeNumeric"
                                                    },
                                                    {
                                                                    "name": "session_id",
                                                                    "type": "esriFieldTypeString",
                                                                    "alias": "Session ID",
                                                                    "domain": null,
                                                                    "editable": true,
                                                                    "nullable": false,
                                                                    "length": 256,
                                                                    "sqlType": "sqlTypeVarchar"
                                                    },
                                                    {
                                                                    "name": "speed",
                                                                    "type": "esriFieldTypeDouble",
                                                                    "alias": "Speed",
                                                                    "domain": null,
                                                                    "editable": true,
                                                                    "nullable": false,
                                                                    "length": 38,
                                                                    "sqlType": "sqlTypeNumeric"
                                                    },
                                                    {
                                                                    "name": "user_id",
                                                                    "type": "esriFieldTypeString",
                                                                    "alias": "User ID",
                                                                    "domain": null,
                                                                    "editable": true,
                                                                    "nullable": false,
                                                                    "length": 256,
                                                                    "sqlType": "sqlTypeVarchar"
                                                    },
                                                    {
                                                                    "name": "vertical_accuracy",
                                                                    "type": "esriFieldTypeDouble",
                                                                    "alias": "Vertical Accuracy",
                                                                    "domain": null,
                                                                    "editable": true,
                                                                    "nullable": false,
                                                                    "length": 38,
                                                                    "sqlType": "sqlTypeNumeric"
                                                    },
                                                    {
                                                                    "name": "globalid",
                                                                    "type": "esriFieldTypeGlobalID",
                                                                    "alias": "GlobalID",
                                                                    "domain": null,
                                                                    "editable": false,
                                                                    "nullable": false,
                                                                    "length": 38,
                                                                    "sqlType": "sqlTypeVarchar"
                                                    },
                                                    {
                                                                    "alias": "created_user",
                                                                    "name": "created_user",
                                                                    "length": 255,
                                                                    "domain": null,
                                                                    "nullable": true,
                                                                    "type": "esriFieldTypeString",
                                                                    "editable": false,
                                                                    "sqlType": "sqlTypeVarchar"
                                                    },
                                                    {
                                                                    "alias": "created_date",
                                                                    "name": "created_date",
                                                                    "length": 29,
                                                                    "domain": null,
                                                                    "nullable": true,
                                                                    "type": "esriFieldTypeDate",
                                                                    "editable": false,
                                                                    "sqlType": "sqlTypeTimestamp"
                                                    },
                                                    {
                                                                    "alias": "last_edited_user",
                                                                    "name": "last_edited_user",
                                                                    "length": 255,
                                                                    "domain": null,
                                                                    "nullable": true,
                                                                    "type": "esriFieldTypeString",
                                                                    "editable": false,
                                                                    "sqlType": "sqlTypeVarchar"
                                                    },
                                                    {
                                                                    "alias": "last_edited_date",
                                                                    "name": "last_edited_date",
                                                                    "length": 29,
                                                                    "domain": null,
                                                                    "nullable": true,
                                                                    "type": "esriFieldTypeDate",
                                                                    "editable": false,
                                                                    "sqlType": "sqlTypeTimestamp"
                                                    }
                                    ],
                                    "geometryField": {
                                                    "name": "shape",
                                                    "type": "esriFieldTypeGeometry",
                                                    "alias": "Shape",
                                                    "domain": null,
                                                    "editable": true,
                                                    "nullable": true,
                                                    "defaultValue": null,
                                                    "modelName": "Shape"
                                    },
                                    "indexes": [{
                                                                    "name": "r59_sde_rowid_uk",
                                                                    "fields": "OBJECTID",
                                                                    "isAscending": true,
                                                                    "isUnique": true,
                                                                    "description": ""
                                                    },
                                                    {
                                                                    "name": "uuid_59",
                                                                    "fields": "GlobalID",
                                                                    "isAscending": true,
                                                                    "isUnique": true,
                                                                    "description": ""
                                                    },
                                                    {
                                                                    "name": "a32_ix1",
                                                                    "fields": "Shape",
                                                                    "isAscending": true,
                                                                    "isUnique": true,
                                                                    "description": ""
                                                    }
                                    ],
                                    "dateFieldsTimeReference": {
                                                    "timeZone": "UTC",
                                                    "respectsDaylightSaving": false
                                    },
                                    "types": [],
                                    "templates": [{
                                                    "name": "DeviceTracking",
                                                    "description": "",
                                                    "prototype": {
                                                                    "attributes": {
                                                                                    "vertical_accuracy": 0,
                                                                                    "user_id": " ",
                                                                                    "activity": 0,
                                                                                    "altitude": 0,
                                                                                    "app_id": " ",
                                                                                    "background_mode": 0,
                                                                                    "battery_percentage": 0,
                                                                                    "battery_state": 0,
                                                                                    "course": 0,
                                                                                    "device_id": " ",
                                                                                    "device_type": " ",
                                                                                    "floor": 0,
                                                                                    "horizontal_accuracy": 0,
                                                                                    "latitude": 0,
                                                                                    "location_source": " ",
                                                                                    "location_timestamp": -2209161600000,
                                                                                    "longitude": 0,
                                                                                    "signal_strength": 0,
                                                                                    "session_id": " ",
                                                                                    "speed": 0
                                                                    }
                                                    },
                                                    "drawingTool": "esriFeatureEditToolPoint"
                                    }],
                                    "useStandardizedQueries": true,
                                    "standardMaxRecordCount": 32000,
                                    "tileMaxRecordCount": 8000,
                                    "maxRecordCountFactor": 1,
                                    "supportedQueryFormats": "JSON, geoJSON",
                                    "maxRecordCount": 2000,
                                    "allowGeometryUpdates": true,
                                    "hasMetadata": true,
                                    "supportsAttachmentsByUploadId": true,
                                    "hasStaticData": false,
                                    "supportsAsyncDelete": true
                    }]
    }
  3. Once the process completes successfully, go to https://<my indoors portal>/portal/home/content and ensure that the item exists.

Configure security settings

Configure the security settings on the device tracking feature layer based on your organization’s security needs.

To configure security settings, complete the following steps:

  1. In your portal, click the Settings tab.
  2. In the Feature Layer section, in the Editing subsection, check the Enable editing check box.
  3. Optionally, check the Keep track of created and updated features check box.
  4. Depending on your organization's storage policies and security needs, choose one of the options in the What kind of editing is allowed section:
    • Add and update features
    • Add, update, and delete features
    Note:

    The Add features option is not supported in this release.

  5. If you checked the Keep track of created and updated features check box, choose the option for the What features can editors see and What features can editors edit sections:
    • Editors can see all features
    • Editors can only see their own features
    • Editors can't see any features, even those they add

    It is recommended that you leave the default selection of Editors can only see their own features and Editors can only edit their own features for these sections.

    Learn more about managing editor settings and editor tracking.

  6. Click Save.

Configure share settings

To add location information by sharing the feature layer, complete the following steps:

  1. Click the Overview tab and click Share.

    The Share dialog box appears.

  2. Share with your portal members or groups.
    Tip:

    Set the URL of the Overview page as the Config Value field for DEVICE_MONITOR_ENDPOINT_FEATURESERVICE in the Indoors Configuration table. You can now view device tracking points in a web map.

Prepare a map for device tracking

The mobile map package used by your organization must be updated to activate the device tracking feature of the mobile apps.

Learn more about creating tracking zones for device tracking and configuring device location sharing settings.

View device tracking data

To create a web map to view tracking data and share it with members of your organization, complete the following steps:

  1. In your portal, click Content and click the My Content tab.
  2. Click Create > Map.
  3. Choose the newly created map and click Open in Map Viewer.
  4. Click Add and add the device tracking feature layer.
  5. Zoom to your site and click Save.
  6. Click Share and choose the members with whom you want to share the map.
  7. Click Done.

Create a dashboard

A dashboard is a view of device location sharing data that you can use to monitor events or activities. Dashboards display multiple visualizations that work together on a single screen. They offer a comprehensive view of the data to provide insight for data management. You can create a dashboard to help you monitor device location sharing data.

Related topics