IndoorAtlas Positioning REST API allows tracking of any devices that are able to scan their surrounding Wi-Fi and/or BLE beacon environment. This service is ideal for devices that are not able to run the full IndoorAtlas SDK such as wearables, IoT devices or even PCs.


The Positioning API uses the same mapping data and the same radio positioning technology (WiFi, BLE beacons) that our full blown SDKs use in the sensor fusion together with geomagnetic data and other sensor data. This means that with the same mapping work, you can now mix smartphones running our SDKs and other devices such as wearables or IoT devices using our Positioning API. 


The positioning accuracy depends on the richness of the surrounding radio environment and typically ranges from 5 to 15 meters. You can freely select the position update frequency -- e.g. from 3s between positions to checking position every hour or once a day.



Note!
For tracking of mobile phones, it is highly recommended to use the IndoorAtlas SDKs for better accuracy.


Prerequisites

  • The relevant premises are mapped with IndoorAtlas MapCreator
  • The API key used is created with Positioning API scope enabled.


Rate Limit


The default POsitioning REST API rate limit is 10000 requests per hour. If you think this is not enough for your application, please contact our support. 


Example


To use the positioning API, the application must be able to read a Wi-Fi scan from the device. It is a list of observed Wi-Fi access point BSSIDs ('macAddress' in the example below) and the corresponding signal strengths (RSSIs in dBm).

To find the location of the device, the Wi-Fi scan is sent to the /locate endpoint of the API as the JSON payload of an HTTP POST request, for example:


curl -X POST "https://positioning-api.indooratlas.com/v1/locate?key=$APIKEY" \
  -H "Content-Type: application/json" \
  -d '{"wifis":[
    {"macAddress":"06:18:d6:c1:c0:89","signalStrength":-55},
    {"macAddress":"de:99:ad:37:be:1c","signalStrength":-82}
  ]}'



which returns the corresponding coordinates, floor number and accuracy (uncertainty radius):


{
  "location": {
    "floorNumber": 7,
    "coordinates": {
      "lat": 60.17066855531062,
      "lon": 24.945905116025607
    },
    "accuracy": 10
  },
  "context": {
    "indooratlas": {
      "floorPlanId": "a314b673-d27d-4bd1-a9bf-bc0cdbd7147c",
      "venueId": "9760790b-4069-41d0-949a-3ed28ad2dbe8"
    }
  }
}



The response also includes the associated floor plan and location contexts as floorPlanId and venueId.


The complete API reference with WiFi and BLE input format specs is available here.


See more about accessing Venue metadata from Venue REST API.



REST API Positioning Accuracy

Note that the Positioning REST API performs positioning using radio data. In summary, here's what you can do to improve accuracy when needed:

  1. Make sure all areas are green in Wifi mapping coverage. Make sure all areas where position is used are fingerprinted.
  2. If you installed beacons, verify the beacon installation.
  3. Use long enough scanning duration: make sure all access points and/or all nearby beacons are heard. Typically around 2s-5s scan duration works well. If there is more than one observation from an access point in the scan, select the strongest observed RSSI to the Positioning REST API query. 
  4. Add beacons to areas where you don't get good enough accuracy for your use case. Re-fingerprint those areas. This assumes your positioned device supports beacon scanning.