Approcci
Per ottenere le migliori prestazioni con Fleet Engine, fornisci uno stream di aggiornamenti della posizione del veicolo almeno una volta ogni minuto e al massimo una volta ogni 5 secondi. Per fornire questi aggiornamenti, utilizza uno dei seguenti metodi:
- Utilizza l'SDK Driver: l'opzione più semplice.
- Utilizza codice personalizzato: utile se le posizioni vengono ritrasmesse tramite il tuo backend o se utilizzi dispositivi diversi da Android o iOS. Questo documento illustra questo approccio.
Indipendentemente da come fornisci gli aggiornamenti della posizione del veicolo, il tuo backend è responsabile dell'aggiornamento di Fleet Engine quando un veicolo di consegna è in viaggio verso una fermata e quando arriva a una fermata. Sono inclusi il deposito stesso. Fleet Engine non rileva automaticamente questi eventi.
Esempi di aggiornamento della posizione del veicolo
Puoi utilizzare la libreria gRPC Java per aggiornare la posizione di un veicolo in Fleet Engine oppure utilizzare REST.
Java
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle myDeliveryVehicle = DeliveryVehicle.newBuilder()
.setLastLocation(DeliveryVehicleLocation.newBuilder()
.setSupplementalLocation(LatLng.newBuilder()
.setLatitude(37.3382)
.setLongitude(121.8863))
.setSupplementalLocationTime(now())
.setSupplementalLocationSensor(DeliveryVehicleLocationSensor.CUSTOMER_SUPPLIED_LOCATION)
.setSupplementalLocationAccuracy(DoubleValue.of(15.0))) // Optional
.build();
// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
UpdateDeliveryVehicleRequest.newBuilder() // No need for the header
.setName(vehicleName)
.setDeliveryVehicle(myDeliveryVehicle)
.setUpdateMask(FieldMask.newBuilder()
.addPaths("last_location"))
.build();
try {
DeliveryVehicle updatedDeliveryVehicle =
deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
break;
case PERMISSION_DENIED:
break;
}
return;
}
REST
PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=last_location
Dettagli della richiesta
Il corpo della richiesta deve contenere un'entità DeliveryVehicle
che specifica i campi come segue:
Campi obbligatori:
Campo Valore lastLocation.supplementalLocation
La posizione del veicolo. lastLocation.supplementalLocationTime
L'ultimo timestamp noto in cui il veicolo si trovava in questa posizione. lastLocation.supplementalLocationSensor
Deve essere compilato con CUSTOMER_SUPPLIED_LOCATION
.Campi facoltativi:
Campo Valore lastLocation.supplementalLocationAccuracy
Precisione della posizione fornita, in metri.
# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"lastLocation": {
"supplementalLocation": {"latitude": 12.1, "longitude": 14.5},
"supplementalLocationTime": "$(date -u --iso-8601=seconds)",
"supplementalLocationSensor": "CUSTOMER_SUPPLIED_LOCATION",
"supplementalLocationAccuracy": 15
}
}
EOM