Skip to content

Navigation Events

Info

This document is a work in progress.

Currently, Search events contain below events, still working in progress:

  • Navigation Events
    • MPPMismatch Event - When MPP(most probable path) mismatch, HMI/application should send "MPPMismatch" event.
    • NavStart Event - When user initiates a route and starts a navigation, HMI/application should send "NavStart" event.
    • NavEnd Event - When user stops a route and ends a navigation, HMI/application should send "NavEnd" event.
    • Route Event - When user initiates a route and starts a navigation, HMI/application should send "Route" event.
    • Waypoint Event - When user creates a new waypoint, HMI/application should send "Waypoint" event.
    • DriveEdges Event - When user start a new navigation session, HMI/application should send "DriveEdges" event.
    • CVPJump Event - When a DRG Alert event detected by HMI/application, it should send "CVPJump" event.
    • ContentSwitch Event - When HMI/application wants to use a newer version of map downloaded via cloud, HMI/application should send "ContentSwitch" event.

MPPMismatch Event

When MPP(most probable path) mismatch, HMI/application should send "MPPMismatch" event

Key methods

Method Details
setGuidanceMode(GuidanceMode guidance_mode) Whether the user is in active or inactive guidance mode, mandatory dat field.
setType(MPPMismatchTypeValue type) Get The reason behind the mismatch, mandatory dat field.
enum index GuidanceMode
0 AGV
1 IGV
enum index MPPMismatchTypeValue
0 DATA_MISMATCHES
1 ROUTING_ALGORITHM_DIFFERENCES
2 OTHER

Sample code

1
2
3
4
5
6
SendEventRequest.Builder builder = dataCollectorClient.sendEventRequest();
SendEventResponse response = builder.setEvent(MPPMismatchEvent.builder()
    .setGuidanceMode(MPPMismatchEvent.GuidanceMode.AGV)
    .setType(MPPMismatchEvent.MPPMismatchTypeValue.DATA_MISMATCHES)
    .build());
    .build()).build().execute();
1
2
3
4
5
6
var builder = dataCollectorClient.sendEventRequest()
var response = builder.setEvent(MPPMismatchEvent.builder()
    .setGuidanceMode(MPPMismatchEvent.GuidanceMode.AGV)
    .setType(MPPMismatchEvent.MPPMismatchTypeValue.DATA_MISMATCHES)
    .build());
  .build()).build().execute()

Response example

1
2
3
4
5
{
  "code": "SUCCESS",
  "message": "SendEventResponse Success",
  "response_time": 1
}

When user initiates a route and starts a navigation, HMI/application should send "NavStart" event.

Key methods:

Method Details
setDestLat(Double dest_lat) Latitude for navigation request destination, mandatory data field.
setDestLon(Double dest_lon) Longitude for navigation request destination, mandatory data field.
setDistance(Double distance) Estimated distance for route journey in meters, mandatory data field.
setDuration(Double duration) Estimated time for route journey in seconds, mandatory data field.
setRouteId(String route_id) LogID for the route calculation screen that led to the navigation. This would be different in case of the different legs of the journey when a way point is added, mandatory data field.
setParentRouteId(String parent_route_id) RouteID of the original trip. If the intent of the route was RouteRequest, the ParentRouteID would be same as RouteID. If intent is Waypoint, Deviation, ResumeRoute, ResumeFromWP this field should have the RouteID of the first RouteCalculation in the trip, mandatory data field.
setOriginLat(Double origin_lat) Latitude for navigation request start point, mandatory data field.
setOriginLon(Double origin_lon) Longitude for navigation request start point, mandatory data field.
setDisplayScreen(RouteDisplayScreenType display_screen) The screen from which Drive was clicked, optional data field.
setInteractionMethod(InteractionMethodValue interaction_method) InteractionMethodValueFor each user interaction log the interaction, optional data field.
setEventLabel(String event_label) The label of the button or the icon interacted with, optional data field.
enum index RouteDisplayScreenType
0 ROUTE
1 NAV_DIRECTION_LIST

Sample code

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
SendEventRequest.Builder builder = dataCollectorClient.sendEventRequest();
SendEventResponse response = builder.setEvent(NavStartEvent.builder()
    .setDestLat(7.0)
    .setDestLon(7.0)
    .setDistance(7.0)
    .setDuration(7.0)
    .setRouteId("id")
    .setParentRouteId("id")
    .setOriginLat(7.0)
    .setOriginLon(7.0)
    .build()).build().execute();
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
var builder = dataCollectorClient.sendEventRequest();
var response = builder
    .setEvent(NavStartEvent.builder()
    .setDestLat(7.0)
    .setDestLon(7.0)
    .setDistance(7.0)
    .setDuration(7.0)
    .setRouteId("id")
    .setParentRouteId("id")
    .setOriginLat(7.0)
    .setOriginLon(7.0)
    .build()).build().execute()

Response example

1
2
3
4
5
{
  "code": "SUCCESS",
  "message": "SendEventResponse Success",
  "response_time": 1
}

When user stops a route and ends a navigation, HMI/application should send "NavEnd" event.

Key methods:

Method Details
setCausedBy(NavEndType caused_by) The reason why navigation was ended, mandatory data field.
setDistanceTravelled(Double distance_travelled) Distance for route journey in miles (Actual distance), mandatory data field.
setDistancedRemaining(Double distance_remaining) Distance for route journey in miles (remaining distance), mandatory data field.
setDistance(Double distance) Actual distance for route journey in miles, mandatory data field.
setDuration(Double duration) Actual time for route journey in minutes, mandatory data field.
setRouteId(String route_id) Corresponding LogID of the route chosen, mandatory data field.
setParentRouteId(String parent_route_id) RouteID of the original trip. If this is the original trip, then make it same as route_id of trip, mandatory data field.
setNavId(String nav_id) LogID of corresponding NavEnd event, mandatory data field.
setInteractionMethod(InteractionMethodValue interaction_method) InteractionMethodValueFor each user interaction log the interaction, optional data field.
enum index NavEndType
0 EXIT
1 ARRIVAL
2 STOP

Sample code

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SendEventRequest.Builder builder = dataCollectorClient.sendEventRequest();
SendEventResponse response = builder.setEvent(NavEndEvent.builder()
    .setCausedBy(NavEndEvent.NavEndType.ARRIVAL)
    .setDistance(7.0)
    .setDuration(7.0)
    .setRouteId("id")
    .setParentRouteId("id")
    .setNavId("id")
    .setDistancedRemaining(7.0)
    .build()).build().execute();
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
var builder = dataCollectorClient.sendEventRequest();
var response = builder.setEvent(NavEndEvent.builder()
    .setCausedBy(NavEndEvent.NavEndType.ARRIVAL)
    .setDistance(7.0)
    .setDuration(7.0)
    .setRouteId("id")
    .setParentRouteId("id")
    .setNavId("id")
    .setDistancedRemaining(7.0)
    .build()).build().execute()

Response example

1
2
3
4
5
{
  "code": "SUCCESS",
  "message": "SendEventResponse Success",
  "response_time": 1
}

Route Event

When user initiates a route and starts a navigation, HMI/application should send "Route" event.

Key methods:

Method Details
setTrigger(RouteTriggerType trigger) The purpose of the Route calculation depending on what action triggered it. If a drive was paused and resumed later by clicking on Resume Route, trigger would be ResumeRoute. Calculation of route to original destination from Waypoint-ResumeFromWP. If user manually alters a step in the Navigation direction Listing by adding a detour, log as Detour, mandatory data field.
setType(RouteRecommendationType type) Applicable for auto.Whether route was personalized, fastest, etc mandatory data field.
setTrafficFlowVendor(String traffic_flow_vendor) Traffic Flow Vendor Name, optional data field.
setTrafficIncidentVendor(String traffic_incident_vendor) Traffic Incident Vendor Name, optional data field.
setOriginLat(Double origin_lat) Latitude of origin., mandatory data field.
setOriginLon(Double origin_lon) Longitude of origin, mandatory data field.
setDestLat(Double dest_lat) Latitude of destination, mandatory data field.
setDestLon(Double dest_lon) Longitude of destination, mandatory data field.
setEntityId(String entity_id) Entity ID of the destination that was chosen, mandatory data field.
setEntityLat(Double entity_lat) Latitude of entity, mandatory data field.
setEntityLon(Double entity_lon) Longitude of entity, mandatory data field.
setIId(String iid) Impression ID of the chosen destination POI from SRP or Coupon page, mandatory data field.
setMerchantId(String merchant_id) Merchant ID of the coupon if route was calculated for a coupon selection, mandatory data field.
setDistance(Double distance) Calculated distance to destination for the specific route in miles, mandatory data field.
setEta(Double eta) Estimated time in minutes to arrive at the destination, mandatory data field.
setEtaStatic(Double eta_static) Estimated time in minutes to arrive at the destination, mandatory data field.
setEtaDynamic(Double eta_dynamic) Estimated time in minutes to arrive at the destination, mandatory data field.
setShareEta(SettingType share_eta) Route setting for whether ETA is shared or not, mandatory data field.
setNumberOfIncidents(Double number_of_incidents) The number of traffic incidents displayed on the route, mandatory data filed.
setRoutePosition(Double route_position) When multiple routes are displayed for a destination, the position of the route displayed on the screen. 1 would be the leftmost route on the screen, mandatory data field
setDestType(RouteDestType dest_type) Type of destination on how the route calculation was initiated, mandatory data field.
setSearchId(String search_id) The LogID of the Search that resulted in the Route Calculation if the caused by a Search, optional data field.
setCouponDetailId(String coupon_detail_id) The LogID of the CouponDetails selection that resulted in the Route Calculation if caused by Coupon select, optional data field.
setParentSearchId(String parent_search_id) LogID of the original Search for the trip. This would be different from SearchID when a Search is initiated with intent as Waypoint, optional data field.
setRouteId(String route_id) The RouteID of the immediate parent. For example, for a route with trigger=deviation, the route_id field should have the RouteID of the segment within which the deviation occurred, optional data field.
setParentRouteId(String parent_route_id) RouteID of the original trip.If the intent of the route was RouteRequest,the ParentRouteID would be same as RouteID. If trigger is any other, then RouteID of the first RouteCalculation in the trip, mandatory data field.
setEdgeId(String edge_id) Edge id at the point deviation occurred when trigger is deviation, optional data field.
setCausedBy(DeviationCauseType caused_by) If the trigger is deviation, then the reason for deviation, optional data field.
setMode(RouteModeType mode) Whether routing for automobile or pedestrian, optional data field.
setSource(ConnectionType source) States the connection type whether it is onboard or cloud connection, mandatory data field.
setResponseTime(Double response_time) Response time to each request in milliseconds, mandatory data field.
setNavId(String nav_id) LogID of corresponding NavStart event, Required only when trigger is Deviation or Waypoint, optional data field.
setInteractionMethod(InteractionMethodValue interaction_method) InteractionMethodValueFor each user interaction log the interaction, optional data field.
setFirstTime(FirstTimeType first_time) Marks the first time this combination of values for the properties event_label, event_environment and page_title is fired for a user, optional data field.
setEventEnvironmentValue(EventEnvironmentValue event_environment) Set sser overall rating. Range 1-5.
setEventLabel(String event_label) The label of the button or the icon interacted with, optional data field.
enum index RouteTriggerType
0 ROUTE_REQUEST
1 DEVIATION
2 WAYPOINT
3 RESUME_ROUTE
4 RESUME_FROM_WP
5 DETOUR
6 WAYPOINT_DELETED
7 MAP_ICON
8 ETA_CALC
9 WATCH
enum index RouteRecommendationType
0 PERSONALIZED
1 FASTEST
2 SHORTEST
3 ECO_FRIENDLY
enum index DeviationCauseType
0 TRAFFIC
1 USER
2 ACCIDENT
3 DETOUR
4 CONGESTION
5 HAZARDS
6 POLICE
7 CONSTRUCTION
8 ROAD_CLOSED
9 DISABLED_VEHICLE
10 EVENT
11 PLANNED_EVENT
12 MISCELLANEOUS
13 OTHER
enum index RouteModeType
0 AUTOMOBILE
1 PEDESTRIAN
2 BIKE
3 FASTEST
4 SHORTEST
5 ECO_FRIENDLY
6 PERSONALIZED
enum index ConnectionType
0 ONBOARD
1 CLOUD
enum index FirstTimeType
0 YES
1 NO
2 NONE

Sample code

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
SendEventRequest.Builder builder = dataCollectorClient.sendEventRequest();
SendEventResponse response = builder.setEvent(RouteEvent.builder()
    .setTrigger(RouteTriggerType.DETOUR)
    .setTrafficFlowVendor("vendor")
    .setTrafficIncidentVendor("vendor")
    .setOriginLat(7.0)
    .setOriginLon(7.0)
    .setDestLat(7.0)
    .setDestLon(7.0)
    .setDistance(7.0)
    .setEntityId("id")
    .setEta(7.0)
    .setEdgeId("id")
    .setNumberOfIncidents(7.0)
    .setRoutePosition(7.0)
    .setDestType(RouteDestType.LABELLED_DEST)
    .setParentRouteId("id")
    .setParentSearchId("id")
    .setResponseTime(7.0)
    .build()).build().execute();
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
var builder = dataCollectorClient.sendEventRequest();
var response = builder.setEvent(RouteEvent.builder()
    .setTrigger(RouteTriggerType.DETOUR)
    .setTrafficFlowVendor("vendor")
    .setTrafficIncidentVendor("vendor")
    .setOriginLat(7.0)
    .setOriginLon(7.0)
    .setDestLat(7.0)
    .setDestLon(7.0)
    .setDistance(7.0)
    .setEntityId("id")
    .setEta(7.0)
    .setEdgeId("id")
    .setNumberOfIncidents(7.0)
    .setRoutePosition(7.0)
    .setDestType(RouteDestType.LABELLED_DEST)
    .setParentRouteId("id")
    .setParentSearchId("id")
    .setResponseTime(7.0)
    .build()).build().execute()

Response example

1
2
3
4
5
{
  "code": "SUCCESS",
  "message": "SendEventResponse Success",
  "response_time": 1
}

Waypoint Event

When user creates a new waypoint, HMI/application should send "Waypoint" event.

Key methods:

Method Details
setAction(WaypointActionType action) Log AddStop when user adds a stop during navigation. Log Cancel if user cancels the result returned without adding the stop. Log DeleteStop when user removes the detour after adding the stop, mandatory data field.
setTrigger(SearchType trigger)) The type of search that triggered the waypoint like near or along the route, mandatory data field.
setEntityId(String entity_id) Entity ID of the POI added or deleted, optional data field.
setNavId(String nav_id) LogID of NavStart, optional data field.
setSearchId(String search_id) LogID of Search that led to the detail page, mandatory data field.
setRouteId(String route_id) LogID of Search that led to the detail page, mandatory data field.
setStatus(StatusType status) Successfully submitted or not if action was Submit, optional data field.
setCausedBy(String caused_by) If the trigger is deviation, then the reason for deviation, optional data field.
setInteractionMethod(InteractionMethodValue interaction_method) InteractionMethodValueFor each user interaction log the interaction, optional data field.
enum index WaypointActionType
0 ADDSTOP
1 DELETESTOP
2 CANCEL
3 ADDTOROUTE
4 NEWROUTE
enum index SearchType
0 ALONG
1 NEAR
2 DISTANCE
3 BEST_MATCH
4 PRICE
5 RANKING

Sample code

1
2
3
4
5
6
7
8
SendEventRequest.Builder builder = dataCollectorClient.sendEventRequest();
SendEventResponse response = builder.setEvent(WaypointEvent.builder()
    .setAction(WaypointEvent.WaypointActionType.ADDSTOP)
    .setTrigger(SearchType.ALONG)
    .setEntityId("id")
    .setNavId("id")
    .setSearchId("id")
    .build()).build().execute();
1
2
3
4
5
6
7
8
var builder = dataCollectorClient.sendEventRequest();
var response = builder.setEvent(WaypointEvent.builder()
    .setAction(WaypointEvent.WaypointActionType.ADDSTOP)
    .setTrigger(SearchType.ALONG)
    .setEntityId("id")
    .setNavId("id")
    .setSearchId("id")
    .build()).build().execute()

Response example

1
2
3
4
5
{
  "code": "SUCCESS",
  "message": "SendEventResponse Success",
  "response_time": 1
}

DriveEdges Event

When user has feedbacks after search operation is performed, HMI/application should send "ENTITY_FEEDBACK" event.

Key methods:

Method Details
setDriveEdgeList(DriveEdgeItem[] drive_edge_list) The EntityId address/POI that was selected, mandatory data field.

DriveEdgeItem

Key methods

Method Details
setEdgeId(String edge_id) Set Edge ID traversed while driving, mandatory data field.
setRoadType(RoadType road_type) Set RoadTyperoad type, e.g highway, local, mandatory data field.
setRoadSubType(RoadSubType road_sub_type) Set road sub type, e.g. ramp, service, mandatory data field.
setSpeedLimit(Double speed_limit) Set speed limit of the road edge in meter per second, mandatory data field.
setEdgeLength(Double edge_length) Set edge length in meters, mandatory data field.
setEdgeStartLocationLat(Double edge_start_location_lat) Set Edge start location latitude, mandatory data field.
setEdgeStartLocationLon(Double edge_start_location_lon) Set Edge start location longitude, mandatory data field.
setEdgeEndLocationLat(Double edge_end_location_lat) Set Edge end location latitude, mandatory data field.
setEdgeEndLocationLon(Double edge_end_location_lon) Set Edge end location longitude, mandatory data field.
setTrafficSpeed(Double traffic_speed) Set The traffic speed at the time in meter per second, mandatory data field.
setDriveSpeed(Double drive_speed) Set The driving speed at the time in meter per second, mandatory data field.
enum index RoadSubType
0 TRAFFICCIRCLE
1 MAINROADSEP
2 CONNECTION
3 LINKWITHININTERSECTION
4 RAMP
5 SERVICE
6 SASERVICEROADLINK
7 OVERBRIDGE
8 UNDERPASS
9 TUNNEL
10 BRIDGE
11 DEFAULT
12 INVALID

Sample code

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
SendEventRequest.Builder builder = dataCollectorClient.sendEventRequest();
SendEventResponse response = builder.setEvent(DriveEdgesEvent.builder()
    .setDriveEdgeList(new DriveEdgeItem[] {
        DriveEdgeItem.builder()
        .setEdgeId("setEdgeId")
        .setRoadType(RoadType.HIGHWAY)
        .setRoadSubType(RoadSubType.BRIDGE)
        .setEdgeLength(100.0)
        .setEdgeStartLocationLat(37.0)
        .setEdgeStartLocationLon(-122.0)
        .setEdgeEndLocationLon(-122.0)
        .setEdgeEndLocationLat(37.0)
        .build()
    })
    .build()).build().execute();
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
var builder = dataCollectorClient.sendEventRequest();
var response = builder.setEvent(DriveEdgesEvent.builder()
    .setDriveEdgeList(arrayof(
        DriveEdgeItem.builder()
        .setEdgeId("setEdgeId")
        .setRoadType(RoadType.HIGHWAY)
        .setRoadSubType(RoadSubType.BRIDGE)
        .setEdgeLength(100.0)
        .setEdgeStartLocationLat(37.0)
        .setEdgeStartLocationLon(-122.0)
        .setEdgeEndLocationLon(-122.0)
        .setEdgeEndLocationLat(37.0)
        .build()
    )
.build()).build().execute()

Response example

1
2
3
4
5
{
  "code": "SUCCESS",
  "message": "SendEventResponse Success",
  "response_time": 1
}

CVPJump Event

When a DRG Alert event detected by HMI/application, it should send "CVPJump" event.

Key methods:

Method Details
setTrigger(CVPJumpTriggerValue trigger) Set Trigger OFFROAD for changes in the CVP go from a Matched Road location to a raw DR location Trigger SNAPBACK for changes in the CVP go from a raw DR location to a Matched Road location, mandatory data field.
setRawDRLat(Double raw_dr_lat) Set Insert Raw Dead Reckoning DR Latitude, mandatory data field.
setRawDRLon(Double raw_dr_lon) Set Insert Raw Dead Reckoning DR longitude, mandatory data field.
setDREHPE(Double raw_dr_ehpe) Set Insert Raw Dead Reckoning DR EHPE, mandatory data field.
setMatchedRoadLat(Double matched_road_lat) Set Insert Matched Road latitude, mandatory data field
setMatchedRoadLon(Double matched_road_lon) Set Insert Matched Road longitude, mandatory data field
enum index CVPJumpTriggerValue
0 OFFROAD
1 SNAPBACK

Sample code

1
2
3
4
5
6
7
8
9
SendEventRequest.Builder builder = dataCollectorClient.sendEventRequest();
SendEventResponse response = builder.setEvent(CVPJumpEvent.builder()
    .setTrigger(CVPJumpTriggerValue.OFFROAD)
    .setRawDRLat(35.0)
    .setRawDRLon(-122.0)
    .setDREHPE(7.0)
    .setMatchedRoadLat(35.0)
    .setMatchedRoadLon(-122.0)
    .build()).build().execute();
1
2
3
4
5
6
7
8
9
var builder = dataCollectorClient.sendEventRequest();
var response = builder.setEvent(CVPJumpEvent.builder()
    .setTrigger(CVPJumpTriggerValue.OFFROAD)
    .setRawDRLat(35.0)
    .setRawDRLon(-122.0)
    .setDREHPE(7.0)
    .setMatchedRoadLat(35.0)
    .setMatchedRoadLon(-122.0)
    .build()).build().execute()

Response example

1
2
3
4
5
{
  "code": "SUCCESS",
  "message": "SendEventResponse Success",
  "response_time": 1
}

ContentSwitch Event

When HMI/application wants to use a newer version of map downloaded via cloud, HMI/application should send "ContentSwitch" event. Key methods:

Method Details
setPreviousMapType(MapType previous_map_type) Set The map the switched started from, mandatory data field.
setCurrentMapType(MapType current_map_type) Set The map resulted after the switch, mandatory data field.
setStatus(ContentSwitchStatusValue status) The status of content switch, mandatory data field.
setErrorType(ContentSwitchErrorType error_type) Set The reason if there was a switch fail, optional data field.
enum index MapType
0 BASE_MAP
1 STREAMING
enum index ContentSwitchStatusValue
0 FAIL
1 SUCCESS
2 MISMATCHED
3 IN_USE
4 OUT_OF_USE
enum index ContentSwitchErrorType
0 NETWORK_UNAVAILABLE
1 EXPAND_DATA_NOT_AVAILABLE
2 OTHER

Sample code

1
2
3
4
5
6
SendEventRequest.Builder builder = dataCollectorClient.sendEventRequest();
SendEventResponse response = builder.setEvent(ontentSwitchEvent.builder()
    .setPreviousMapType(ContentSwitchEvent.MapType.BASE_MAP)
    .setCurrentMapType(ContentSwitchEvent.MapType.STREAMING)
    .setStatus(ContentSwitchEvent.ContentSwitchStatusValue.MISMATCHED)
    .build()).build().execute();
1
2
3
4
5
6
var builder = dataCollectorClient.sendEventRequest();
var response = builder.setEvent(ontentSwitchEvent.builder()
    .setPreviousMapType(ContentSwitchEvent.MapType.BASE_MAP)
    .setCurrentMapType(ContentSwitchEvent.MapType.STREAMING)
    .setStatus(ContentSwitchEvent.ContentSwitchStatusValue.MISMATCHED)
    .build()).build().execute()

Response example

1
2
3
4
5
{
  "code": "SUCCESS",
  "message": "SendEventResponse Success",
  "response_time": 1
}