This document covers how to customize the look and feel of routes for tracked
vehicles on a map. Routes are drawn on a map in polylines. For each pair of
coordinates in a vehicle's active or remaining path the library creates a
google.maps.Polyline
object.
You can style the Polyline
objects by specifying polyline customizations that
the library then applies in two situations:
- Before adding the objects to the map
- When the data used for the objects have changed
Style polylines
Similar to how you can customize markers, you can style route polylines in different ways:
Style route polylines by type: Use
PolylineOptions
to apply to all of the matchedPolyline
objects when they are created or updated. For an example, see Style polylines by type.Style route polylines based on data: Specify a customization function based on data from fleet tracking, or from outside sources:
Data from fleet tracking: Fleet tracking passes polyline data to the customization function, including data on the current vehicle state. You can style polylines based on this data, including coloring the
Polyline
object a deeper shade, or making it thicker when the vehicle is moving slower.Outside sources: You can combine fleet tracking data with data from sources outside Fleet Engine and style the
Polyline
object based on that information.
For an example, see Style polylines based on data.
Control the visibility of route polylines: You can hide or show polylines using the
visible
property. For details, see Control the visibility of polylines in this guide.Display additional information for a vehicle or location marker: You can show additional information using the
infowindow
property. For details, see Display additional information for a vehicle or location marker in this guide.
Polyline customization options
The following customizations options are available in both
FleetEngineVehicleLocationProviderOptions
and
FleetEngineDeliveryVehicleLocationProviderOptions
.
You can set customizations for different path states in the vehicle's
journey:
Already traveled path: Use
takenPolylineCustomization
- On-demand trips, Scheduled tasks reference.Actively traveling path: Use
activePolylineCustomization
- On-demand trips, Scheduled tasks reference.Not yet traveled path: Use
remainingPolylineCustomization
- On-demand trips, Scheduled tasks reference.
Style route polylines by type
To style route polylines by type, change the styling of Polyline
objects
using PolylineOptions
.
The following example shows how to configure the styling for a Polyline
object
with PolylineOptions
. Follow this pattern to customize the styling of any
Polyline
object using any of the route polyline customizations listed in
Polyline customization options in this guide.
Example for either on-demand trips or scheduled tasks
JavaScript
activePolylineCustomization = {
strokeWidth: 5,
strokeColor: 'black',
};
TypeScript
activePolylineCustomization = {
strokeWidth: 5,
strokeColor: 'black',
};
Style route polylines using data
To style route polylines using data, change the styling of Polyline
objects
using customization functions.
The following example shows how to configure the styling for an active route
using a customization function. Follow this pattern to customize the styling of
any Polyline
object using any of the polyline customization parameters listed
in Polyline customization options in this guide.
On-demand trips example
JavaScript
// Color the Polyline objects in green if the vehicle is nearby.
activePolylineCustomization =
(params) => {
const distance = params.vehicle.waypoints[0].distanceMeters;
if (distance < 1000) {
// params.polylines contains an ordered list of Polyline objects for
// the path.
for (const polylineObject of params.polylines) {
polylineObject.setOptions({strokeColor: 'green'});
}
}
};
TypeScript
// Color the Polyline objects in green if the vehicle is nearby.
activePolylineCustomization =
(params: VehiclePolylineCustomizationFunctionParams) => {
const distance = params.vehicle.waypoints[0].distanceMeters;
if (distance < 1000) {
// params.polylines contains an ordered list of Polyline objects for
// the path.
for (const polylineObject of params.polylines) {
polylineObject.setOptions({strokeColor: 'green'});
}
}
};
Scheduled tasks example
JavaScript
// Color the Polyline objects in green if the vehicle is nearby.
activePolylineCustomization =
(params) => {
const distance = params.deliveryVehicle.remainingDistanceMeters;
if (distance < 1000) {
// params.polylines contains an ordered list of Polyline objects for
// the path.
for (const polylineObject of params.polylines) {
polylineObject.setOptions({strokeColor: 'green'});
}
}
};
TypeScript
// Color the Polyline objects in green if the vehicle is nearby.
activePolylineCustomization =
(params: DeliveryVehiclePolylineCustomizationFunctionParams) => {
const distance = params.deliveryVehicle.remainingDistanceMeters;
if (distance < 1000) {
// params.polylines contains an ordered list of Polyline objects for
// the path.
for (const polylineObject of params.polylines) {
polylineObject.setOptions({strokeColor: 'green'});
}
}
};
Traffic-aware styling example (on-demand trips only)
Fleet Engine returns traffic speed data for the active and remaining paths for
the followed vehicle. You can use this information to style Polyline
objects according to their traffic speeds:
JavaScript
// Color the Polyline objects according to their real-time traffic levels
// using '#05f' for normal, '#fa0' for slow, and '#f33' for traffic jam.
activePolylineCustomization =
FleetEngineVehicleLocationProvider.
TRAFFIC_AWARE_ACTIVE_POLYLINE_CUSTOMIZATION_FUNCTION;
// Or alter the objects further after the customization function has been
// run -- in this example, change the blue for normal to green:
activePolylineCustomization =
(params) => {
FleetEngineVehicleLocationProvider.
TRAFFIC_AWARE_ACTIVE_POLYLINE_CUSTOMIZATION_FUNCTION(params);
for (const polylineObject of params.polylines) {
if (polylineObject.get('strokeColor') === '#05f') {
polylineObject.setOptions({strokeColor: 'green'});
}
}
};
TypeScript
// Color the Polyline objects according to their real-time traffic levels
// using '#05f' for normal, '#fa0' for slow, and '#f33' for traffic jam.
activePolylineCustomization =
FleetEngineVehicleLocationProvider.
TRAFFIC_AWARE_ACTIVE_POLYLINE_CUSTOMIZATION_FUNCTION;
// Or alter the objects further after the customization function has been
// run -- in this example, change the blue for normal to green:
activePolylineCustomization =
(params: VehiclePolylineCustomizationFunctionParams) => {
FleetEngineVehicleLocationProvider.
TRAFFIC_AWARE_ACTIVE_POLYLINE_CUSTOMIZATION_FUNCTION(params);
for (const polylineObject of params.polylines) {
if (polylineObject.get('strokeColor') === '#05f') {
polylineObject.setOptions({strokeColor: 'green'});
}
}
};
Control the visibility of polylines
By default, all Polyline
objects are visible. To make a Polyline
object
invisible, set its visible
property to false
.
Example for either on-demand trips or scheduled tasks
JavaScript
remainingPolylineCustomization = {visible: false};
TypeScript
remainingPolylineCustomization = {visible: false};
Display an information window for a vehicle or location marker
You can use an InfoWindow
to display additional information about a
vehicle or location marker.
The following example shows how to create an InfoWindow
and attach it to a
vehicle marker.
On-demand trips example
JavaScript
// 1. Create an info window.
const infoWindow = new google.maps.InfoWindow(
{disableAutoPan: true});
// (Assumes a vehicle location provider.)
locationProvider.addListener('update', e => {
if (e.vehicle) {
const distance =
e.vehicle.remainingDistanceMeters;
infoWindow.setContent(
`Your vehicle is ${distance}m away from the next drop-off point.`);
// 2. Attach the info window to a vehicle marker.
// This property can return multiple markers.
const marker = mapView.vehicleMarkers[0];
infoWindow.open(mapView.map, marker);
}
});
// 3. Close the info window.
infoWindow.close();
TypeScript
// 1. Create an info window.
const infoWindow = new google.maps.InfoWindow(
{disableAutoPan: true});
// (Assumes a vehicle location provider.)
locationProvider.addListener('update', (e: google.maps.journeySharing.FleetEngineVehicleLocationProviderUpdateEvent) => {
if (e.vehicle) {
const distance =
e.vehicle.remainingDistanceMeters;
infoWindow.setContent(
`Your vehicle is ${distance}m away from the next drop-off.`);
// 2. Attach the info window to a vehicle marker.
// This property can return multiple markers.
const marker = mapView.vehicleMarkers[0];
infoWindow.open(mapView.map, marker);
}
});
// 3. Close the info window.
infoWindow.close();
Scheduled tasks example
JavaScript
// 1. Create an info window.
const infoWindow = new google.maps.InfoWindow(
{disableAutoPan: true});
// (Assumes a delivery vehicle location provider.)
locationProvider.addListener('update', e => {
if (e.deliveryVehicle) {
const distance =
e.deliveryVehicle.remainingDistanceMeters;
infoWindow.setContent(
`Your vehicle is ${distance}m away from the next task.`);
// 2. Attach the info window to a vehicle marker.
// This property can return multiple markers.
const marker = mapView.vehicleMarkers[0];
infoWindow.open(mapView.map, marker);
}
});
// 3. Close the info window.
infoWindow.close();
TypeScript
// 1. Create an info window.
const infoWindow = new google.maps.InfoWindow(
{disableAutoPan: true});
// (Assumes a delivery vehicle location provider.)
locationProvider.addListener('update', (e: google.maps.journeySharing.FleetEngineDeliveryVehicleLocationProviderUpdateEvent) => {
if (e.deliveryVehicle) {
const distance =
e.deliveryVehicle.remainingDistanceMeters;
infoWindow.setContent(
`Your vehicle is ${distance}m away from the next task.`);
// 2. Attach the info window to a vehicle marker.
// This property can return multiple markers.
const marker = mapView.vehicleMarkers[0];
infoWindow.open(mapView.map, marker);
}
});
// 3. Close the info window.
infoWindow.close();