Este documento aborda como personalizar marcadores de veículo e local no mapa que você usa para o app de rastreamento de remessas baseado na Web para consumidores.
Com o SDK do consumidor JavaScript, você pode personalizar a aparência de dois tipos de marcadores adicionados ao mapa:
- Marcadores do veículo de entrega: use
deliveryVehicleMarkerCustomization
- Marcadores de destino: use
destinationMarkerCustomization
Isso pode ser feito de duas maneiras:
- Mais simples: especifique um objeto
MarkerOptions
para aplicar a todos os marcadores do mesmo tipo. O SDK do consumidor aplica o estilo em duas situações: antes de adicionar os marcadores ao mapa e quando os dados usados para os marcadores mudam. - Mais avançado: especifique uma função de personalização. As funções de personalização permitem estilizar os marcadores com base nos dados e adicionar interatividade a eles, como o processamento de cliques. Especificamente, o SDK do consumidor transmite dados à função de personalização sobre o tipo de objeto que o marcador representa: veículo ou destino. Isso permite que o estilo do marcador seja alterado com base no estado atual do próprio elemento do marcador. Por exemplo, o número de paradas planejadas restantes até o destino. Você pode até mesclar dados de fontes externas ao Fleet Engine e estilizar o marcador com base nessas informações.
Exemplo simples: use MarkerOptions
O exemplo a seguir mostra como configurar o estilo de um marcador de veículo com um objeto MarkerOptions
. Neste exemplo, a opacidade do marcador é definida como 50%.
JavaScript
deliveryVehicleMarkerCustomization = {
opacity: 0.5
};
TypeScript
deliveryVehicleMarkerCustomization = {
opacity: 0.5
};
Exemplo avançado: usar uma função de personalização
O exemplo a seguir mostra como configurar o estilo de um marcador de veículo para mostrar o número de paradas restantes antes de chegar à parada para a tarefa programada.
JavaScript
deliveryVehicleMarkerCustomization =
(params) => {
var stopsLeft = params.taskTrackingInfo.remainingStopCount;
params.marker.setLabel(`${stopsLeft}`);
};
TypeScript
deliveryVehicleMarkerCustomization =
(params: ShipmentMarkerCustomizationFunctionParams) => {
const stopsLeft = params.taskTrackingInfo.remainingStopCount;
params.marker.setLabel(`${stopsLeft}`);
};
Adicionar o gerenciamento de cliques aos marcadores
É possível adicionar o processamento de cliques a qualquer marcador, como no exemplo a seguir para um marcador de veículo.
JavaScript
deliveryVehicleMarkerCustomization =
(params) => {
if (params.isNew) {
params.marker.addListener('click', () => {
// Perform desired action.
});
}
};
TypeScript
deliveryVehicleMarkerCustomization =
(params: ShipmentMarkerCustomizationFunctionParams) => {
if (params.isNew) {
params.marker.addListener('click', () => {
// Perform desired action.
});
}
};
Mostrar mais informações sobre marcadores
Você pode usar um InfoWindow
para mostrar mais informações sobre um veículo ou marcador de local. O exemplo a seguir cria um InfoWindow
e o anexa a um marcador de veículo:
JavaScript
// 1. Create an info window.
const infoWindow = new google.maps.InfoWindow(
{disableAutoPan: true});
locationProvider.addListener('update', e => {
const stopsCount =
e.taskTrackingInfo.remainingStopCount;
infoWindow.setContent(
`Your vehicle is ${stopsCount} stops away.`);
// 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});
locationProvider.addListener('update', (e: google.maps.journeySharing.FleetEngineShipmentLocationProviderUpdateEvent) => {
const stopsCount =
e.taskTrackingInfo.remainingStopCount;
infoWindow.setContent(
`Your vehicle is ${stopsCount} stops away.`);
// 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();