Trip

This section describes the trip analysis API.

Description

The overall approach behind DriveQuant’s trip analysis service is based on vehicle dynamics and powertrain modeling. Using vehicle or smartphone sensors, our services estimate the efforts applied to the powertrain enabling us, for example, to remodel the efforts between the road and the wheels or to estimate the exhaust pollutants.

DriveQuant’s data analysis service delivers a wide range of indicators describing vehicle usage and driver behavior. For a single trip, DriveQuant’s trip analysis service retrieves:

  1. eco-driving indicators,

  2. an estimate of the fuel consumption,

  3. safety indicators,

  4. tire and brake wear measurements,

  5. pollutant emissions estimation,

  6. a distraction score (phone use),

  7. and a speed limit score.

The trip analysis API is automatically requested by the DriveKit SDK at the end of each trip.

This API can also be used without the DriveKit SDK if you have your own GPS data collection system (OBD dongle, black box, vehicle data).

The distraction score (phone use) is only available for SDK users.

An additional cost is required for the use of the speed limit score, which is calculated using data coming from map data providers.

This section explains how to query the trip analysis API, how driving indicators are computed and how they are structured.

DriveQuant services provide additional data by collecting all vehicle trips so you can easily retrieve statistics for each of your vehicles. We recommend to add a new vehicle before requesting the trip analysis API if you target a vehicule mantenance use case.

Trip

POST https://service.drivequant.com/v2/trip

This method returns all driving analytics calculated by DriveQuant for a trip.

Request Body

NameTypeDescription

account

object

Identification data for the trip

route

object

GPS or vehicle recorded data for the trip

vehicle

object

Vehicle characteristics used for the trip

itineraryData

object

Data of the trip

metaData

object

Customer specific data

  {
    "status": true,
    "itinId": "6030ebe4ea60426b34e9b3bf",
    "userId": "<UNIQUE USER OR ASSET ID>",
    "comments": [{
      "errorCode": 16,
      "comment": "Engine speed not available"
      },
      {
        "errorCode": 0,
        "comment": "OK"
      }
    ],
    "itineraryStatistics": {
        "tripDuration": 1996.0,
        "drivingDuration": 1737.0,
        "idlingDuration": 259.0,
        "drivingPercentage": 87.0,
        "idlingPercentage": 13.0,
        "distance": 15801.0,
        "speedMean": 30.5,
        "subdispNb": 60,
        "meteo": 2,
        "day": true,
        "weekDay": false,
        "transportationMode": 1
    },
    "ecoDriving": {
        "score": 7.1,
        "scoreAccel": -1.7,
        "scoreMain": 0.9,
        "scoreDecel": -0.5,
        "stdDevAccel": 2.2006383,
        "stdDevMain": 0.99105114,
        "stdDevDecel": 3.797757,
        "energyClass": 2
    },
    "fuelEstimation": {
        "co2Mass": 2.691,
        "co2Emission": 170.0,
        "fuelVolume": 1.153,
        "fuelConsumption": 7.3,
        "idleFuelVolume": 0.049,
        "idleFuelPercentage": 4.28,
        "idleFuelConsumption": 0.696,
        "idleCo2Emission": 1.625,
        "idleCo2Mass": 0.115,
        "engineTempStatus": true,
        "coldFuelVolume": 0.018
    },
    "safety": {
        "safetyScore": 9.1,
        "nbAdh": 2,
        "nbAccel": 0,
        "nbDecel": 3,
        "nbAdhCrit": 0,
        "nbAccelCrit": 0,
        "nbDecelCrit": 1
    },
    "advancedEcoDriving": {
        "ecoDrivingContext": [
            {
                "contextId": 0,
                "distance": 6.9,
                "duration": 19.1,
                "efficiencyScore": 11.0,
                "scoreAccel": 6.0,
                "scoreMain": 6.0,
                "scoreDecel": 6.0
            },
            {
                "contextId": 1,
                "distance": 3.7,
                "duration": 6.5,
                "efficiencyScore": 6.1,
                "scoreAccel": -2.8,
                "scoreMain": 0.3,
                "scoreDecel": 1.3
            },
            {
                "contextId": 2,
                "distance": 64.8,
                "duration": 61.8,
                "efficiencyScore": 6.7,
                "scoreAccel": -1.7,
                "scoreMain": 0.6,
                "scoreDecel": -1.3
            },
            {
                "contextId": 3,
                "distance": 12.7,
                "duration": 7.8,
                "efficiencyScore": 6.6,
                "scoreAccel": -1.8,
                "scoreMain": 1.6,
                "scoreDecel": 0.8
            },
            {
                "contextId": 4,
                "distance": 11.8,
                "duration": 4.9,
                "efficiencyScore": 8.4,
                "scoreAccel": -1.1,
                "scoreMain": 0.1,
                "scoreDecel": -2.9
            }
        ]
    },
    "advancedFuelEstimation": {
        "fuelEstimationContext": [
            {
                "contextId": 0,
                "distance": 6.9,
                "duration": 19.1,
                "co2Mass": 0.199,
                "co2Emission": 179.0,
                "fuelVolume": 0.085,
                "fuelConsumption": 7.69
            },
            {
                "contextId": 1,
                "distance": 3.7,
                "duration": 6.5,
                "co2Mass": 0.099,
                "co2Emission": 167.0,
                "fuelVolume": 0.042,
                "fuelConsumption": 7.139
            },
            {
                "contextId": 2,
                "distance": 64.8,
                "duration": 61.8,
                "co2Mass": 1.832,
                "co2Emission": 176.0,
                "fuelVolume": 0.785,
                "fuelConsumption": 7.535
            },
            {
                "contextId": 3,
                "distance": 12.7,
                "duration": 7.8,
                "co2Mass": 0.264,
                "co2Emission": 130.0,
                "fuelVolume": 0.113,
                "fuelConsumption": 5.549
            },
            {
                "contextId": 4,
                "distance": 11.8,
                "duration": 4.9,
                "co2Mass": 0.182,
                "co2Emission": 96.0,
                "fuelVolume": 0.078,
                "fuelConsumption": 4.107
            }
        ]
    },
    "advancedSafety": {
        "safetyContext": [
            {
                "contextId": 0,
                "distance": 6.9,
                "duration": 19.1,
                "nbAdh": 0,
                "nbAccel": 0,
                "nbDecel": 0,
                "nbAdhCrit": 0,
                "nbAccelCrit": 0,
                "nbDecelCrit": 0,
                "safetyScore": 11.0
            },
            {
                "contextId": 1,
                "distance": 3.7,
                "duration": 6.5,
                "nbAdh": 0,
                "nbAccel": 0,
                "nbDecel": 0,
                "nbAdhCrit": 0,
                "nbAccelCrit": 0,
                "nbDecelCrit": 0,
                "safetyScore": 11.0
            },
            {
                "contextId": 2,
                "distance": 64.8,
                "duration": 61.8,
                "nbAdh": 2,
                "nbAccel": 0,
                "nbDecel": 2,
                "nbAdhCrit": 0,
                "nbAccelCrit": 0,
                "nbDecelCrit": 1,
                "safetyScore": 9.1
            },
            {
                "contextId": 3,
                "distance": 12.7,
                "duration": 7.8,
                "nbAdh": 0,
                "nbAccel": 0,
                "nbDecel": 0,
                "nbAdhCrit": 0,
                "nbAccelCrit": 0,
                "nbDecelCrit": 0,
                "safetyScore": 10.0
            },
            {
                "contextId": 4,
                "distance": 11.8,
                "duration": 4.9,
                "nbAdh": 0,
                "nbAccel": 0,
                "nbDecel": 1,
                "nbAdhCrit": 0,
                "nbAccelCrit": 0,
                "nbDecelCrit": 0,
                "safetyScore": 8.0
            }
        ]
    },
    "pollutants": {
        "co": 436.34,
        "hc": 105.19,
        "nox": 43.45,
        "soot": 0.01
    },
    "tireWear": {
        "frontTireWear": 625151,
        "rearTireWear": 194424,
        "frontTireDistance": 6522,
        "rearTireDistance": 6522,
        "frontTireAutonomy": 25010,
        "rearTireAutonomy": 159958,
        "frontTireTotalWear": 20.6847961834131,
        "rearTireTotalWear": 3.917838643900801,
        "frontTireWearRate": 3.1593584519985076,
        "rearTireWearRate": 0.5879650354629268
    },
    "brakeWear": {
        "frontBrakePadWear": 652316,
        "rearBrakePadWear": 490585,
        "frontBrakeDistance": 6522,
        "rearBrakeDistance": 6522,
        "frontBrakeAutonomy": 51081,
        "rearBrakeAutonomy": 70712,
        "frontBrakeTotalWear": 11.322879923360654,
        "rearBrakeTotalWear": 8.444911708095175,
        "frontBrakeWearRate": 1.6040543118399773,
        "rearBrakeWearRate": 1.1953688298028098
    },
    "safetyEvents": [
        {
            "time": 198.0,
            "longitude": 2.2345499992370605,
            "latitude": 48.865421295166016,
            "velocity": 27.597404310389447,
            "heading": 181.3752105740906,
            "elevation": 21.428831625626,
            "distance": 1803.0,
            "type": 3,
            "level": 1,
            "value": -1.9984114049011923
        },
        {
            "time": 886.0,
            "longitude": 2.228440046310425,
            "latitude": 48.829158782958984,
            "velocity": 9.322159013829488,
            "heading": 115.71003406053404,
            "elevation": 35.0165024497636,
            "distance": 5811.0,
            "type": 1,
            "level": 1,
            "value": 0.2091391662960067
        },
        {
            "time": 1179.0,
            "longitude": 2.2220299243927,
            "latitude": 48.776981353759766,
            "velocity": 59.56077714321047,
            "heading": 196.14873235105892,
            "elevation": 169.4896656907427,
            "distance": 8721.0,
            "type": 3,
            "level": 1,
            "value": -1.851640380003413
        },
        {
            "time": 1352.0,
            "longitude": 2.2241098880767822,
            "latitude": 48.76197814941406,
            "velocity": 23.478607191677995,
            "heading": 231.66262821151452,
            "elevation": 96.56055945085538,
            "distance": 11036.0,
            "type": 1,
            "level": 1,
            "value": 0.2596086644093922
        },
        {
            "time": 1352.0,
            "longitude": 2.2241098880767822,
            "latitude": 48.76197814941406,
            "velocity": 23.478607191677995,
            "heading": 231.66262821151452,
            "elevation": 96.56055945085538,
            "distance": 11036.0,
            "type": 3,
            "level": 2,
            "value": -3.1478373502646355
        },
        {
            "time": 1902.0,
            "longitude": 2.2364699840545654,
            "latitude": 48.742130279541016,
            "velocity": 29.11161620369841,
            "heading": 127.70357513427746,
            "elevation": 76.72611043725985,
            "distance": 14436.0,
            "type": 3,
            "level": 1,
            "value": -2.095731316728654
        }
    ],
    "endDate": "2021-02-20T10:56:37.188+0000",
    "itineraryData": {
        "endDate": "2021-02-20T10:56:37.188+0000",
        "startDate": "2021-02-20T10:23:22.188+0000",
        "departureCity": "<DEPARTURE>",
        "arrivalCity": "<ARRIVAL>",
        "departureAddress": "<DEPARTURE ADDRESS>",
        "arrivalAddress": "<ARRIVAL ADDRESS>"
    },
    "driverDistraction": {
        "nbUnlock": 1,
        "durationUnlock": 97.0,
        "durationPercentUnlock": 4.86002640172576,
        "distanceUnlock": 403.68833585416337,
        "distancePercentUnlock": 2.5548277694713204,
        "score": 1.9159997325752993,
        "scoreUnlock": 6.7627283707197705,
        "scoreCall": 1.9159997325752993,
        "calls": [
            {
                "id": 0,
                "start": 544.0035407543182,
                "end": 634.0030286312103,
                "durationS": 89,
                "duration": 5,
                "distanceM": 456,
                "distance": 3,
                "status": "OUTGOING",
                "audioSystem": "SPEAKER",
                "forbidden": true
            }
        ]
    },
    "distractionEvents": [
        {
            "time": 539.0,
            "latitude": 48.85495,
            "longitude": 2.22616,
            "velocity": 12.168000411987304,
            "heading": -1.616703658463509,
            "elevation": 23.05337370577991,
            "distance": 3245.3746307904125,
            "type": 1,
            "duration": 97,
            "index": 539
        },
        {
            "time": 636.0,
            "latitude": 48.85034,
            "longitude": 2.22683,
            "velocity": 45.22616824022174,
            "heading": -1.3488582653419061,
            "elevation": 29.8860134067469,
            "distance": 3746.5653789286157,
            "type": 2,
            "duration": 1360,
            "index": 636
        }
    ],
    "callEvents": [
        {
            "time": 544.0035407543182,
            "latitude": 48.85475,
            "longitude": 2.22616,
            "velocity": 12.456000137329102,
            "heading": -1.5768984084633124,
            "elevation": 23.53374615925395,
            "distance": 0.0,
            "type": 3,
            "duration": 1,
            "index": 544,
            "audioSystem": "SPEAKER",
            "callType": "OUTGOING",
            "forbidden": true
        },
        {
            "time": 634.0030286312103,
            "latitude": 48.85059,
            "longitude": 2.22674,
            "velocity": 46.44316055270816,
            "heading": -1.3482454261409265,
            "elevation": 30.170426377189013,
            "distance": 456.0,
            "type": 4,
            "duration": 89,
            "index": 634,
            "audioSystem": "SPEAKER",
            "callType": "OUTGOING",
            "forbidden": true
        }
    ],
    "speedingEvents": [
        {
            "longitude": 2.240690719770278,
            "latitude": 48.87119316290749,
            "time": 96.0,
            "type": 1,
            "index": 36
        },
        {
            "longitude": 2.2389993413999454,
            "latitude": 48.87022711541927,
            "time": 106.0,
            "type": 0,
            "index": 39
        },
        {
            "longitude": 2.226948759849819,
            "latitude": 48.8285248546614,
            "time": 899.0,
            "type": 1,
            "index": 220
        },
        {
            "longitude": 2.2247798257606703,
            "latitude": 48.82771252373621,
            "time": 910.0,
            "type": 0,
            "index": 229
        },
        {
            "longitude": 2.220820796904408,
            "latitude": 48.790306020720436,
            "time": 1121.87393116951,
            "type": 1,
            "index": 374
        },
        {
            "longitude": 2.222806342988146,
            "latitude": 48.781090574187054,
            "time": 1158.87393116951,
            "type": 0,
            "index": 409
        },
        {
            "longitude": 2.221726988867627,
            "latitude": 48.776698917142845,
            "time": 1181.87393116951,
            "type": 1,
            "index": 428
        },
        {
            "longitude": 2.221415682498137,
            "latitude": 48.77728241347195,
            "time": 1198.87393116951,
            "type": 0,
            "index": 449
        },
        {
            "longitude": 2.2259807317602576,
            "latitude": 48.77630605611952,
            "time": 1222.87393116951,
            "type": 1,
            "index": 472
        },
        {
            "longitude": 2.229023362169593,
            "latitude": 48.77273423930304,
            "time": 1252.87393116951,
            "type": 0,
            "index": 499
        },
        {
            "longitude": 2.2291619672238197,
            "latitude": 48.77164365290039,
            "time": 1259.87393116951,
            "type": 1,
            "index": 502
        },
        {
            "longitude": 2.229596580809962,
            "latitude": 48.76831710988511,
            "time": 1281.87393116951,
            "type": 0,
            "index": 525
        }
    ],
    "speedingStatistics": {
        "distance": 15857,
        "duration": 1727,
        "speedingDistance": 1956,
        "speedingDuration": 105,
        "score": 4.82,
        "speedLimitContexts": [
            {
                "speedLimit": 30,
                "distance": 966,
                "duration": 138,
                "speedingDistance": 188,
                "speedingDuration": 16,
                "score": 1.09
            },
            {
                "speedLimit": 50,
                "distance": 11115,
                "duration": 1367,
                "speedingDistance": 1112,
                "speedingDuration": 65,
                "score": 3.0
            },
            {
                "speedLimit": 70,
                "distance": 1504,
                "duration": 95,
                "speedingDistance": 0,
                "speedingDuration": 0,
                "score": 10.0
            },
            {
                "speedLimit": 80,
                "distance": 655,
                "duration": 62,
                "speedingDistance": 0,
                "speedingDuration": 0,
                "score": 10.0
            },
            {
                "speedLimit": 90,
                "distance": 1617,
                "duration": 65,
                "speedingDistance": 656,
                "speedingDuration": 24,
                "score": 0.0
            }
        ]
    },
    "energyEstimation":{
    "energy": 0.0,
    "energyConsumption": 0.0,
    "energyOpti": 0.0,
    "energyOptiConsumption": 0.0
  },
  "advancedEnergyEstimation": [
    {
      "contextId": 0,
      "distance": 6.9,
      "duration": 19.1,
      "energy": 0.0,
      "energyConsumption": 0.0,
      "energyOpti": 0.0,
      "energyOptiConsumption": 0.0
    },
    {
      "contextId": 1,
      "distance": 3.7,
      "duration": 6.5,
      "energy": 0.0,
      "energyConsumption": 0.0,
      "energyOpti": 0.0,
      "energyOptiConsumption": 0.0
    },
    {
      "contextId": 2,
      "distance": 64.8,
      "duration": 61.8,
      "energy": 0.0,
      "energyConsumption": 0.0,
      "energyOpti": 0.0,
      "energyOptiConsumption": 0.0
    },
    {
      "contextId": 3,
      "distance": 12.7,
      "duration": 7.8,
      "energy": 0.0,
      "energyConsumption": 0.0,
      "energyOpti": 0.0,
      "energyOptiConsumption": 0.0
    },
    {
      "contextId": 4,
      "distance": 11.8,
      "duration": 4.9,
      "energy": 0.0,
      "energyConsumption": 0.0,
      "energyOpti": 0.0,
      "energyOptiConsumption": 0.0
    }
  ]
  }

Request

Account

FieldTypeDescription

account

string

API key

userId

string

User unique identifier

vehicleId

string

Vehicle unique identifier

DriveQuant counts the number of active assets per customer. The DriveQuant API is a pay-per-active-asset API. An asset is considered active if it has performed at least one trip on a monthly basis. An asset can be a driver (identified with its driverId) or a vehicle (identified by a vehicleId).

Three main use cases can be considered:

  1. The request includes only a driverId: This is common when the data collected comes from a mobile application installed on a driver's phone. The total number of assets per customer is equal to the number of unique driverId's.

  2. The request includes only a vehicleId: This is common when the data collected comes from a telematics device plugged into the vehicle. The total number of assets per customer is equal to the number of unique vehicleId's.

  3. The request includes a driverId and a vehicleId: This is common when a group of drivers can use several vehicle within a fleet. The total number of assets may be the number of unique vehicleId's or driverId's. Billing and counting will depend on your business model and the difference between the number of drivers and vehicles. Please contact DriveQuant sales department to find out the best pricing model.

The Account object must contain the account and the userId or vehicleId attributes.

Route

FieldTypeDescription

gpsVelocity

array[double]

GPS speed vector in km/h

latitude

array[double]

Latitude vector in degree

longitude

array[double]

Longitude vector in degree

gpsAccuracy

array[double]

GPS accuracy vector in meter

gpsElevation

array[double]

Elevation vector in meter

gpsHeading

array[double]

Heading vector in degree

gpsDate

array[double]

GPS timestamp vector in second

vehVelocity

array[double]

Vehicle speed vector in km/h

vehEngineSpeed

array[double]

Engine speed vector in rotation per minute

vehTankLevel

array[double]

Fuel tank volume in liter

vehWheelAngle

array[double]

Steering angle vector in degree

batteryVoltage

array[double]

Measurement of the car battery voltage vector in volt

vehDate

array[double]

Vehicle date timestamp vector in second

  • A request must contain all the data corresponding to a single trip. The trip data analysis cannot be cut into multiple queries. It is not recommended to merge data from several trips into a single request.

  • Route object must contain at least the vehDate or gpsDate and at least gpsVelocity or vehVelocity attributes.

  • The input variables included into Route object are arrays which must contain the same number of data points.

  • The sample period for all input vectors must be 1 second. The sampling frequency of 1Hz is a standard for GPS sensors. in case your telematics device does not satisfy this constraint, please contact us to determine what alternative can be applied.

Vehicle

FieldTypeDescription

carTypeIndex

int

carEngineIndex

int

carPower

double

Vehicle power in hp. This value must be entered in horsepower. In case you only have the engine power in kW you can apply the following formula: P[hp]=P[kW]/0.7355P [hp] = P [kW] / 0.7355

carMass

double

Vehicle mass in kg

carGearboxIndex

int

carConsumption

double

Combined fuel consumption [l/100km] measured during the New European Driving Cycle (NEDC)

carAutoGearboxNumber

int

Number of gear ratios for the automatic gearbox. This parameter is taken into account only if carGearboxIndex is set to 1

Some parameters have a default value if not set, and a min and max limitations:

FieldDefault valueMinMax

carTypeIndex

1 (compact)

-

-

carEngineIndex

1 (gasoline)

-

-

carPower

150

40

450

carMass

1400

700

3500

carGearboxIndex

2 (manual 5-speed)

-

-

carConsumption

4.5

3

20

ItineraryData

Itinerary object is optional.

FieldTypeDescription

startDate

date

Trip start date

Date format: YYYY-MM-dd’T’HH:mm:ss.SSSZ

endDate

date

Trip end date Date format: YYYY-MM-dd’T’HH:mm:ss.SSSZ

departureCity

string

Name of the departure city

arrivalCity

string

Name of the arrival city

MetaData

Metadata can be used if you want to add some of your specific data in a trip. They can be added to the Trip API as a key/value object where the key and value have a String type

Example of JSON body request

{
	"account": {
		"account": "<API KEY>",
		"userId": "<UNIQUE USER ID>",
		"vehicleId": "<UNIQUE VEHICLE ID>" 
	},
	"vehicle": {
		"carTypeIndex": 4,
		"carEngineIndex": 1,
		"carPower": 205.0,
		"carMass": 1430.0,
		"engineDisplacement": 1618.0,
		"carGearboxIndex": 2,
		"carConsumption": 6.0
	},
	"itineraryData": {
    "startDate": "2018-02-15T15:20:00.000+0200",
		"endDate": "2018-02-15T15:50:00.000+0200",
		"departureCity": "<DEPARTURE>",
		"arrivalCity": "<ARRIVAL>"
	},
	"route": {
		"gpsVelocity": [...],
		"latitude": [...],
		"longitude": [...],
		"gpsHeading": [...],
		"gpsElevation": [...],
		"gpsDate": [...],
		"gpsAccuracy": [...]
	},
	"metaData" : {
		"customerStringData" : "<CUSTOMER STRING DATA>",
		"customerJsonData" : "{\"customerTestNumber\" : 1, \"customerTestString\" : \"<CUSTOMER TEXT>\"}"
  }
}

Response

The table below summarizes the list of driving data analysis modules. The comments and itinerary statistics modules are included by default. All other modules are optional and can be combined as needed.

FieldTypeDescription

itinId

string

Trip unique identifier

status

boolean

true if no problem, false otherwise

comments

array[object]

itineraryStatistics

object

itineraryData

object

ecoDriving

object

advancedEcoDriving

object

fuelEstimation

object

advancedFuelEstimation

object

safety

object

advancedSafety

object

safetyEvents

array[object]

tireWear

object

brakeWear

object

pollutants

object

userId

string

unique id of the user

firstname

string

first name of the user

lastname

string

Last name of the user

endDate

string

End date of the trip

driverDistraction

object

distractionEvents

array[object]

callEvents

array[object]

speedingStatistics

object

speedingEvents

array[object]

energyEstimation

object

advancedEnergyEstimation

array[object]

Comment

FieldTypeDescription

errorCode

int

Error code

comment

string

Error description

Possible values are described here.

ItineraryStatistics

Itinerary Statistics module provides several indicators that characterize the trip conditions: the trip distance, the vehicle movement duration and the idle duration. We also compute the number of sub-displacements. A trip can be characterized as a succession of events either dictated by the driver’s will or by external factors. These events, called breakpoints, are indicated with black dots in the figure below. Each section of a trip between two breakpoints is called sub-displacement. The figure illustrates these concepts for a short trip with one traffic light (vehicle stopped) and one intersection with priority (vehicle deceleration followed by acceleration).

FieldTypeDescription

distance

double

Distance travelled in meter

speedMean

double

Mean vehicle speed in km/h

tripDuration

double

Total trip duration in second

drivingDuration

double

Vehicle movement duration in second

idlingDuration

double

Total duration of idling phases (vehicle stopped)

in second

drivingPercentage

double

Percentage of vehicle movement

idlingPercentage

double

Percentage of idling phases

subdispNb

int

Number of sub-displacements detected during the trip

meteo

int

day

boolean

true if day, false if night

weekDay

boolean

true: Monday to Friday, false: Saturday to Sunday

transportationMode

int

ItineraryData

FieldTypeDescription

startDate

date

Trip start date Date format: YYYY-MM-dd’T’HH:mm:ss.SSSZ

endDate

date

Trip end date Date format: YYYY-MM-dd’T’HH:mm:ss.SSSZ

departureCity

string

Name of the departure city

arrivalCity

string

Name of the arrival city

departureAddress

string

Departure full address

arrivalAddress

string

Arrival full address

Eco-driving

Description

Eco-driving module performs an analysis of the entire trip, characterized by a succession of events and road segments. The driving efficiency is computed by comparing the vehicle speed recorded with an optimal speed profile, for each segment. This calculation takes into account the actual driving conditions and a physical vehicle model that captures the inertial dynamics of the vehicle and the efficiency of the powertrain components. The eco-driving score ranges from 0 and 10, and is calculated by comparing the actual energy consumed during the trip with the energy that would have been consumed using the optimal speed profile. The best eco-driving score corresponds to the highest driving efficiency.

FieldTypeDescription

score

double

Eco-driving score (min: 0, max: 10). If trip is too short to be scored, score is set to 11.

scoreAccel

double

Score of the acceleration phases. If trip is too short to be scored, score is set to 6.

scoreMain

double

Score of the stabilized speed phases. If trip is too short to be scored, score is set to 6.

scoreDecel

double

Score of the deceleration phases. If trip is too short to be scored, score is set to 6.

stdDevAccel

double

Standard deviation of acceleration score

stdDevMain

double

Standard deviation of stabilized speed score

stdDevDecel

double

Standard deviation of deceleration score

energyClass

int

See Energy Class:

0: energy class A

1: energy class B

2: energy class C

3: energy class D

4: energy class E

Scores definitions

Acceleration, deceleration and speed maintain phases have a large impact on the vehicle’s fuel consumption. As a consequence, by comparing the real and the optimal speed profiles, eco-driving analysis module returns 3 key driving indicators.

The acceleration and deceleration scores range from -5 to +5. For a value of (-5), your acceleration or deceleration is too slow. For the highest value (+5) you are accelerating or decelerating too fast. A score of (0) indicates that your acceleration or deceleration perfectly matches with an eco-driving style.

The speed maintain score ranges from 0 to 5. The minimum value (0) indicates that the driver has an appropriate behavior and drives at a constant speed. On the other hand, if the driving analysis module detects an oscillating speed profile, this score increases. The highest value (+5) indicates that you can improve to keep a constant speed to reduce your fuel consumption.

These indicators will help you improve your driving efficiency and reduce your energy consumption. They can also illustrate the level of anticipation that the drivers should adopt to avoid harsh accelerations and brakings.

The numerical values of driving scores can be transformed into driving tips. The tables below give examples of content that can be returned to a driver based on the driving notes of a trip:

scoreAccelDescription

-5 to -4

Acceleration is too low

-4 to -2

Weak acceleration

-2 to 1

Good acceleration

1 to 3

Strong acceleration

3 to 5

Acceleration is too high

scoreMainDescription

0 to 1.5

Good speed maintain

1.5 to 3.5

Irregular speed

3.5 to 5

Very fluctuating speed

scoreDecelDescription

-5 to -4

Deceleration is too low

-4 to -2

Weak deceleration

-2 to 1

Good deceleration

1 to 3

Strong deceleration

3 to 5

Deceleration is too high

The eco-driving analysis is performed for vehicle displacement greater than 100 meters and speed higher than 10 km/h. This avoids providing inaccurate driving scores during vehicle maneuvers (slow driving in traffic jams or in parking lots...). In that case, eco-driving analysis module returns the following error codes:

  • 11 for the eco-driving score

  • 6 for acceleration phase, stabilized speed phase and deceleration phase

Energy class

The energy class « energyClass » depends on the average fuel consumption of the vehicle. It positions the trip fuel consumption with respect to the average consumption of the vehicle.

  • Class A corresponds to 0.5 x the NEDC consumption of the vehicle expressed in gCO2/km.

  • Class E corresponds to 1.5 x the NEDC consumption of the vehicle expressed in gCO2/km

Then we defined the 5 classes with a uniform distribution between class A and class E. The energy class « energyClass » is calculated from the trip CO2 emission « co2Emission » and the function below:

Advanced eco-driving

FieldTypeDescription

ecoDrivingContext

array[object]

In order to provide fair scoring and to facilitate drivers comparison, the trip scores can be accompanied by road class scores. These scores are included in the EcoDrivingContext class into the Advanced Modules. This service differentiates 5 types of road conditions (contextId) to contextualize the driving scores:

  • 0 - Traffic jam: This corresponds to vehicle displacements of less than 100 meters and performed with speeds below 10 km/h. In traffic jams, it is obviously not possible to improve your driving, that is why scoring are not provided for this type of road.

  • 1 - Heavy urban traffic

  • 2 - City

  • 3 - Suburban

  • 4 - Expressways

In case a road type is not included in the trip, the distance and duration percentages are equal to zero, the efficiency score is set to 11 and the driving scores (Accel/Main/Decel) are set to 6.

EcoDrivingContext

FieldTypeDescription

distance

double

Percentage of distance travelled in a road type

duration

double

Percentage of elapsed time in a road type

efficiencyScore

double

Eco-driving score

scoreAccel

double

Score of the acceleration phases

scoreMain

double

Score of the stabilized speed phases

scoreDecel

double

Score of the deceleration phases

contextId

int

Fuel estimation

Description

The fuel consumption is obtained from a backward computation based on a mathematical modeling of the vehicle and powertrain. Fuel consumption estimation asseses the mechanical traction power from the vehicle speed and mass. A power transfer is performed between each component of the powertrain to compute the engine torque. Finally, the engine torque combined with the vehicle speed help to process the fuel mass from an engine consumption map developed by IFPEN. This fuel mapping is adapted according to the vehicle parameters and is valid for any type of vehicle or fleet of vehicles.

This approach is particularly adapted to estimate real-driving fuel consumption which can be more than 20% above the homologation data provided by car manufacturers. The main advantage lies in the accuracy of the estimate that can reach 5% when all input variables are available and the vehicle parameters set. The estimation method accounts for the physical fuel characteristics. These parameters are listed below:

Fuel typeDensity (kg/L)Lower heating value (GJ/t)CO2 emission factor (tCO2/TJ)CO2 emission factor (kgCO2/l)

Gasoline

0.755

44

70.26

2.3340

Diesel

0.845

42

75.70

2.6866

Values calculated by fuel estimation module are described below:

FieldTypeDescription

co2Mass

double

Total Mass of CO2 in kg

co2Emission

double

Total Mass of CO2 per unit of distance in g/km

fuelConsumption

double

Total fuel consumption per unit of distance in l/100km

fuelVolume

double

Total fuel consumption in liter

idleFuelPercentage

double

Idle fuel consumption percentage

idleFuelConsumption

double

Idle fuel consumption per unit of distance in l/100km

idleCo2Emission

double

Idle CO2 emission in g/km

idleCo2Mass

double

Idle CO2 mass in kg

engineTempStatus

boolean

Engine cold start ?

coldFuelVolume

double

Cold engine fuel volume

Advanced fuel estimation

FieldTypeDescription

fuelEstimationContext

array[object]

In order to provide detailed fuel consumption estimation across the vehicle trips, the advanced fuel estimation service may return the fuel consumption for each driving context of the vehicle. This service differentiates 5 types of road conditions (contextId):

  • 0 - Traffic jam

  • 1 - Heavy urban traffic

  • 2 - City

  • 3 - Suburban

  • 4 - Expressways

In case a road type is not included in the trip, the percentages of distance and duration are equals to zero as well as the co2Mass, co2Emission, fuelVolume and fuelConsumption.

FuelEstimationContext

FieldTypeDescription

contextId

int

Road conditions

distance

double

Percentage of distance travelled in a road type

duration

double

Percentage of elapsed time in a road type

co2Mass

double

Total Mass of CO2 in kg

co2Emission

double

Total Mass of CO2 per unit of distance in g/km

fuelVolume

double

Total fuel consumption in liter

fuelConsumption

double

Total fuel consumption per unit of distance in L/100km

EnergyEstimation

For electric vehicles, DriveQuant provides energy information instead of fuel estimation.

FieldTypeDescription

energy

double

Estimated energy in kWh

energyConsumption

double

Estimated energy consumption in kWh/100km

energyOpti

double

Optimal energy in kWh

energyOptiConsumption

double

Optimal energy consumption in kWh/100km

The EnergyEstimation sub-document is only present in the response body for electric vehicles. If the configured vehicle is a conventional vehicle, the energy estimation is not added in the response body.

AdvancedEnergyEstimation

To provide more details on the energy consumption, the service may return the energy data for each driving context of the vehicle.

FieldTypeDescription

energy

double

Estimated energy in kWh

energyConsumption

double

Estimated energy consumption in kWh/100km

energyOpti

double

Optimal energy in kWh

energyOptiConsumption

double

Optimal energy in kWh/100km

contextId

int

Road conditions

distance

double

Percentage of distance travelled in a road type

duration

double

Percentage of elapsed time in a road type

The AdvancedEnergyEstimation sub-document is only present in the response body for electric vehicles. If the configured vehicle is a conventional vehicle, the energy estimation is not added in the response body.

Safety

FieldTypeDescription

safetyScore

double

Driver risk index for a given itinerary

Ranges from 3 to 10

nbAdh

int

Number of adherence threshold crossing

nbAccel

int

Number of strong accelerations

nbDecel

int

Number of strong decelerations

nbAdhCrit

int

Number of adherence threshold crossing (critical)

nbAccelCrit

int

Number of critical accelerations (critical)

nbDecelCrit

int

Number of critical decelerations (critical)

If trip is too short to be scored, safetyScore is set to 11.

Advanced safety

FieldTypeDescription

safetyContext

array[object]

Array of SafetyContext

SafetyContext

FieldTypePercentage of distance travelled in a road type

distance

double

Percentage of distance travelled in a road type

duration

double

Percentage of elapsed time in a road type

safetyScore

double

Ranges from 3 to 10

nbAdh

int

Number of adherence threshold crossing

nbAccel

int

Number of strong accelerations

nbDecel

int

Number of strong decelerations

nbAdhCrit

int

Number of adherence threshold crossing (critical)

nbAccelCrit

int

Number of critical accelerations (critical)

nbDecelCrit

int

Number of critical decelerations (critical)

contextId

int

Road conditions

In case a road type is no included in the trip, the distance and duration percentages are equal to zero and the safety score is set to 11.

SafetyEvents

The data provided in the following table helps to display safety events on your map system and deliver the locations of harsh braking or acceleration as well as the coordinates where a tire to road adherence threshold has been crossed.

FieldTypeDescription

time

double

Time since the beginning of the trip in second

latitude

double

Latitude in degree

longitude

double

Longitude in degree

velocity

double

Vehicle speed in km/h

heading

double

Vehicle heading in degree

elevation

double

Altitude in meter

distance

double

Distance travelled since the beginning of the trip in meter

type

int

Type of event 1. Adherence 2. Acceleration 3. Braking

level

int

Intensity related to the event 1. Strong 2. Harsh

value

int

Absolute value of the event:

  • in m/s2 for acceleration and braking events

  • normalized between 0 and 1 for the adherence events

The service provides the time, coordinate and severity level of each event. Two levels of severity are calculated using specific threshold values for each event.

Type of eventUnitStrongHarsh

Acceleration

m/s2

2.0

2.5

Braking

m/s2

-1.8

-2.4

Adherence limit

-

0.2

0.3

Pollutants

FieldTypeDescription

co

double

Carbon monoxide (CO) emissions expressed in mg/km

hc

double

Hydrocarbons (HC) emissions expressed in mg/km

nox

double

Nitrogen oxide emissions (NOx) expressed in mg/km

soot

double

Soot emissions expressed in mg/km

Tire and brake wear estimates

Description

The wear analysis service has been designed to monitor the brake pads and tires wear levels. This service was designed to improve vehicle maintenance solutions and can be used to create maintenance alerts.

The wear estimation relates to the power dissipated in the tire - road or brake disc - brake contact. To compute this variable our service relies on the vehicle’s dynamic modelling that estimates the braking efforts and the efforts at the contact between the tire and the road.

For each trip, the service gives for each components (front/rear brakes/tires):

  • The worn mass fraction during the trip.

  • The total worn percentage since the installation of new tires or brakes.

Tire and brake wear indicators for a single trip

The wear analysis service measures tire wear and brake pad wear. The service allows to distinguish the front and rear axles of the vehicle. The wear is assumed to be the same for the right tire and the left tire of the vehicle. A similar assumption is made for the brake pads.

The output value corresponds to a mass fraction of the worn component (tire or brake pad). This value is expressed in thousandth part of parts-per-million (ppm) which is a unit equivalent to a parts-per-billion (ppb).

The worn mass fraction (tire or brake pad) is given for each individual trip. To obtain the total worn mass fraction, the sum of all the trip’s values must be done. The total worn mass fraction value is bounded between a minimum and a maximum value:

  • Minimum value = 0 ppb. If the total worn mass fraction is 0, the component (tire or brake pad) is assumed to have no wear.

  • Maximum value = 10910^9ppb. If the total worn mass fraction reaches the maximum value, this means that the component (tire or brake pad) is fully worn and must be replaced.

For a tire, the maximum value for the mass fraction (10910^9ppb) indicates that the tire has lost all its usable mass of rubber. This corresponds to a minimum tire tread height of 1.6 mm. In France, a tire must legally have a minimum tread height of 1.6 mm over its entire circumference.

The wear calculation service estimates for each trip:

  • The worn fraction of front tires

  • The worn fraction of the rear tire

  • The worn fraction of the front brakes

  • The worn fraction of the rear brakes.

Example of tire autonomy calculation:

Assuming a vehicle that has performed NN trips, the tire autonomy ( dad_a ) in km can be computed as follow:

da=f(w)×k=1Ndid_a=f(w)\times\sum_{k=1}^Nd_i with f(w)=1109×k=1Nwi1f(w)=\frac{1}{10^9\times\sum_{k=1}^Nw_i}-1

where ω is the tire worn mass fraction for the trip i (in ppb) and di is the distance (in km) of the trip i. The wear function f(ω) is a decreasing function that goes from infinity to zero. When f(ω) equals zero, the tire has no longer autonomy and must be replaced. This function is displayed below:

Total tire and brake wear indicators

In order to facilitate the integration within a vehicle maintenance service, the DriveQuant API provides for all your requests the following set of data related to any component (tires or brakes):

  • The total distance traveled with a given component (Distance)

  • The level of wear of the considered component (TotalWear)

  • The remaining autonomy before a complete wear (Autonomy)

  • The average wear speed of the considered component (WearRate)

  • The total autonomy of the considered component is assumed to be equal to the total travelled distance plus the remaining autonomy (Distance + Autonomy).

The diagram below illustrates the principle and the meaning of these quantities. The figure shows the evolution of the wear as a function of the distance traveled with the component. This is a generic representation that applies to a brake pad or a tire.

The autonomy of a set of tires or brakes is calculated for each axle (front and rear). For example, the most worn tire between the left tire and the right tire on the same axle is used.

FieldTypeDescription

frontTireWear

int

Worn mass fraction of the front tires (right/ left) for current trip

Unit : thousandths part of ppm = ppb

Min. value = 0 / Max. value = 10910^9

rearTireWear

int

Worn mass fraction of the rear tires (right/left) for current trip

Unit : thousandths part of ppm = ppb

Min. value = 0 / Max. value = 10910^9

frontBrakePadWear

int

Worn mass fraction of the front brakes (right/left) for current trip

Unit : thousandths part of ppm = ppb

Min. value = 0 / Max. value = 10910^9

rearBrakePadWear

int

Worn mass fraction of the rear brakes (right/left) for current trip

Unit : thousandths part of ppm = ppb

Min. value = 0 / Max. value = 10910^9

frontTireDistance

int

Total distance analyzed for the front tires (in km)

Min. value = 0 / Max. value = 1 000 000

rearTireDistance

int

Total distance analyzed for the rear tires (in km)

Min. value = 0 / Max. value = 1 000 000

frontBrakeDistance

int

Total distance analyzed for the front brakes (in km)

Min. value = 0 / Max. value = 1 000 000

rearBrakeDistance

int

Total distance analyzed for the rear brakes (in km)

Min. value = 0 / Max. value = 1 000 000

frontTireAutonomy

int

Front tires remaining distance before change (in km)

Min. value = 0 / Max. value = 1 000 000

rearTireAutonomy

int

Rear tires remaining distance before change (in km)

Min. value = 0 / Max. value = 1 000 000

frontBrakeAutonomy

int

Front brakes remaining distance before change (in km)

Min. value = 0 / Max. value = 1 000 000

rearBrakeAutonomy

int

Rear brakes remaining distance before change (in km)

Min. value = 0 / Max. value = 1 000 000

frontTireTotalWear

double

Total worn mass percentage of the front tires (right/left)

Min. value = 0% / Max. value = 100%

rearTireTotalWear

double

Total worn mass percentage of the rear tires (right/left)

Min. value = 0% / Max. value = 100%

frontBrakeTotalWear

double

Total worn mass percentage of the front brakes (right/left)

Min. value = 0% / Max. value = 100%

rearBrakeTotalWear

double

Total worn mass percentage of the rear brakes (right/left)

Min. value = 0% / Max. value = 100%

frontTireWearRate

double

Average wear rate for the front tires (in %/1000 km )

rearTireWearRate

double

Average wear rate for the rear tires (in %/1000 km )

frontBrakeWearRate

double

Average wear rate for the rear brakes (in %/1000 km )

rearBrakeWearRate

double

Average wear rate for the rear brakes (in %/1000 km )

The wear rate measures the component wear (in %) as a function of distance. This variable allows to compare vehicles and to inform a vehicle fleet manager whose components are wearing out too quickly. The wear rate is related to the type of vehicle, the driving style, the type of road used and the driving condition. This is why its value can change if the typology of trips changes and if the vehicle is driven by several drivers who have different driving styles.

Driver distraction (score)

Distracted driving becomes a serious problem and is becoming a major road safety issue.

That's why we've developed a service that measures the driver's interactions with his smartphone while driving. The objective is to increase driver awareness through a distraction score. This can be used to compare drivers, to classify them or to organize driving challenges.

The DriveKit SDK is capable of measuring the two main indicators of distracted driving:

  1. screen unlocks,

  2. and outgoing or incoming (and answered) phone calls.

The distraction score depends on 2 parameters :

  • the smartphone unlocking frequency;

  • the total duration of the call (or calls if there are several in the same trip).

Each parameter is giving a sub-score from 0 to 10. The distraction score is the minimum between these two sub-scores.

The sensitivity function linking the number of unlocks per 100 km to the unlock score is shown below.

The sensitivity function linking the call duration to the call score is shown below.

This service is only available with the DriveKit mobile SDK.

The response body includes the trip scores as well as detailed data related to unlocks and calls. This way you can better understand the score construction and provide clear explanations to the driver.

The data returned by the service are listed in the table below:

FieldTypeDescription

nbUnlock

int

Number of phone screen unlock events

nbLock

int

Number of phone screen lock events

distance

double

Relative distance traveled with the screen on (in %)

distanceM

double

Distance traveled with the screen on (in m)

duration

double

Relative duration traveled with the screen on (in %)

durationS

double

Duration traveled with the screen on (in s)

score

double

Phone distraction score (Min. value = 0, Max. value = 10)

scoreUnlock

double

Distraction sub-score which takes into account the number of locking/unlocking

scoreCall

double

Distraction sub-score which takes into account the number of calls during the trip

calls

array[object]

Call

The Driver distraction score provides an array with all the calls answered or made by the driver. For each call, it contains information about its conditions.

ValueTypeDescription

id

int

Unique identifier of the call

start

double

Seconds from beginning of the trip when call starts

end

double

Seconds from beginning of the trip when call ends

durationS

double

Duration traveled in call (in s)

duration

double

Relative duration traveled in call (in %)

distanceM

double

Distance traveled in call (in m)

distance

double

Relative distance traveled in call (in %)

status

string

INCOMING : incoming call

OUTGOING : outgoing call

UNKNOWN : unknown call status

audioSystem

string

Audio system used to make the call (SPEAKER, LOUDSPEAKER, A2DP, HANDSFREE, HEADPHONE, CAR_AUDIO, UNKNOWN)

forbidden

boolean

true if the call is forbidden

false if the call is authorized (made with handsfree)

Response body example

"driverDistraction": {
    "nbUnlock": 0,
    "durationUnlock": 13,
    "durationPercentUnlock": 2.5,
    "distanceUnlock": 33.54196351499925,
    "distancePercentUnlock": 0.4636710466546759,
    "score": 10,
    "scoreUnlock": 10,
    "scoreCall": 10,
    "calls": [
      {
        "id": 0,
        "start": 85,
        "end": 118,
        "durationS": 33,
        "duration": 6,
        "distanceM": 734,
        "distance": 10,
        "status": "INCOMING",
        "audioSystem": "HANDSFREE",
        "forbidden": false
      },
      {
        "id": 1,
        "start": 320,
        "end": 344,
        "durationS": 24,
        "duration": 5,
        "distanceM": 295,
        "distance": 4,
        "status": "UNKNOWN",
        "audioSystem": "HANDSFREE",
        "forbidden": false
      }
    ]
  }

Example of use

The screenshot below shows how to display the phone use data on a mobile phone interface:

Driver distraction (events)

The distraction score service provides additional information related to screen unlock and screen lock events. Thus, it is possible to get the location of events related to phone use. These informations are useful if you need to display these data on your mapping system or if you want to perform advanced data analysis.

The table below lists all the data returned by the service:

FieldTypeDescription

time

double

Time since the beginning of the trip (in s)

latitude

double

Latitude (in deg)

longitude

double

Longitude (in deg)

velocity

double

Vehicle speed (in km/h)

heading

double

Vehicle heading (in deg)

elevation

double

Altitude (in m)

distance

double

Distance travelled since the beginning of the trip (in m)

type

int

Type of event : (1) Screen ON and (2) Screen OFF

Response body example

"distractionEvents": [
        {
            "time": 248.0,
            "latitude": 48.92460229,
            "longitude": 2.38685389,
            "velocity": 0.0,
            "heading": 0.6352998743575466,
            "elevation": 79.0,
            "distance": 3157.72999073565,
            "type": 1
        },
        {
            "time": 273.0,
            "latitude": 48.92434025,
            "longitude": 2.3891527,
            "velocity": 46.5839984893799,
            "heading": 0.006233303539059223,
            "elevation": 78.85714285714286,
            "distance": 3267.4199903160334,
            "type": 2
        }
    ]

CallEvents

Thanks to the distracted driving analysis service, you will be able to obtain contextualized and geolocalized data related to the detected events. This information is of great importance for the evaluation of the road risk and to help the driver to improve (by presenting this information on a map for example).

ValueTypeDescription

time

double

Time in second since the beginning of the trip

latitude

double

Latitude in degree

longitude

double

Longitude in degree

velocity

double

Vehicle speed in km/h

heading

double

Vehicle heading in degree

elevation

double

Altitude in meter

distance

double

Distance travelled during the call in meter

type

int

3: Call start

4: Call end

duration

int

Call duration in seconds

index

int

Position of the beginning of the event in the route date (phone call beginning of phone unlocking)

audioSystem

string

Audio system used to make the call (SPEAKER, LOUDSPEAKER, A2DP, HANDSFREE, HEADPHONE, CAR_AUDIO, UNKNOWN)

callType

string

Call type

Allowed values: INCOMING, OUTGOING, UNKNOWN

forbidden

boolean

true if the call is forbidden

false if the call is authorized (made with handsfree)

Response body example

"callEvents": [
   {
     "time": 85,
     "latitude": 46.90593,
     "longitude": -0.23254,
     "velocity": 77.03999862670898,
     "heading": -4.978726223953685,
     "elevation": 142.34007335844495,
     "distance": 0,
     "type": 3,
     "duration": 1,
     "index": 85,
     "audioSystem": "HANDSFREE",
     "callType": "INCOMING",
     "forbidden": false
   }, {
     "time": 118,
     "latitude": 46.91235,
     "longitude": -0.23023,
     "velocity": 85.60800247192383,
     "heading": -4.889215763272453,
     "elevation": 145.41845121837798,
     "distance": 734,
     "type": 4,
     "duration": 33,
     "index": 118,
     "audioSystem": "HANDSFREE",
     "callType": "INCOMING",
     "forbidden": false
   }, {
     "time": 320,
     "latitude": 46.90536,
     "longitude": -0.22448,
     "velocity": 45.93600082397461,
     "heading": -9.696301173649006,
     "elevation": 147.3037109375,
     "distance": 0,
     "type": 3,
     "duration": 1,
     "index": 320,
     "audioSystem": "HANDSFREE",
     "callType": "UNKNOWN",
     "forbidden": false
   },{
     "time": 344,
     "latitude": 46.90387,
     "longitude": -0.22633,
     "velocity": 34.23600082397461,
     "heading": -7.896966651865014,
     "elevation": 142.9379156203497,
     "distance": 295,
     "type": 4,
     "duration": 24,
     "index": 344,
     "audioSystem": "HANDSFREE",
     "callType": "UNKNOWN",
     "forbidden": false
   }
 ]

Speed Limit

This service measures distance and driving time when the vehicle speed exceeds the speed limit.

From this information, a speed limit score is calculated. The speed limit score is 10 if the overspeed distance is zero. The speed limit score decreases with the increase in the percentage of distance spent in overspeeding.

The sensitivity function linking the relative speeding distance (in %) with the speeding score is shown below.

This service returns a global (or trip) score for the entire trip as well as several sub-scores corresponding to each of the legal speed portions traveled during the trip.

The global (or trip) score is the average of the sub-scores weighted by distance.

FieldTypeDescription

distance

int

trip distance (m)

duration

int

trip duration (s)

speedingDistance

int

Distance travelled at a speed above the limit (m)

speedingDuration

int

Duration spent at a speed above the limit (s)

score

double

Speeding score

speedLimitContexts

array[object]

SpeedLimitContexts

FieldTypeDescription

speedLimit

int

Speed limit (in km/h) for the portion of the trip

distance

int

Total distance (in m) for the portion of the trip limited at the speed limit value

duration

int

Total duration (in s) for the portion of the trip limited at the speed limit value

speedingDistance

int

Distance travelled at a speed above the limit (in m) within the speed limit portion

speedingDuration

int

Duration spent at a speed above the limit (in s) within the speed limit portion

score

double

Speeding score for a given speed limit portion

Response body example

{
"speedingStatistics" : {
            "distance" : 6835,
            "duration" : 613,
            "speedingDistance" : 280,
            "speedingDuration" : 14,
            "score" : 9.55,
            "speedLimitContexts" : [ 
                {
                    "speedLimit" : 30,
                    "distance" : 21,
                    "duration" : 6,
                    "speedingDistance" : 0,
                    "speedingDuration" : 0,
                    "score" : 10.0
                }, 
                {
                    "speedLimit" : 50,
                    "distance" : 2378,
                    "duration" : 352,
                    "speedingDistance" : 169,
                    "speedingDuration" : 9,
                    "score" : 8.83
                }, 
                {
                    "speedLimit" : 70,
                    "distance" : 2153,
                    "duration" : 122,
                    "speedingDistance" : 111,
                    "speedingDuration" : 5,
                    "score" : 9.38
                }, 
                {
                    "speedLimit" : 90,
                    "distance" : 2283,
                    "duration" : 133,
                    "speedingDistance" : 0,
                    "speedingDuration" : 0,
                    "score" : 10.0
                }
            ]
        }
    }
}

SpeedingEvents

The service that computes the speeding score also returns location-based information about overspeeding events.

This type of information is used to indicate on a map the places on the trip where the speed of the vehicle exceeds the speed limit.

The start and end positions of overspeeding segments are included in the SpeedingEvents table.

ValueTypeDescription

time

double

Time in second since the beginning of the trip

latitude

double

Latitude in degree

longitude

double

Longitude in degree

type

int

1 = Overspeeding segment start point

0 = Overspeeding segment endpoint

index

int

Index of the speeding event in the matched route vector.

Response body example

"speedingEvents": [
    {
      "longitude": 2.240690719770278,
      "latitude": 48.87119316290749,
      "time": 96,
      "type": 1,
      "index": 36
    },
    {
      "longitude": 2.2389993413999454,
      "latitude": 48.87022711541927,
      "time": 106,
      "type": 0,
      "index": 39
    }
]

Last updated