Approcci
Per ottenere le migliori prestazioni con Fleet Engine, fornisci un flusso di veicoli la posizione viene aggiornata almeno una volta al 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 località vengono inoltrate tramite il backend, o se usi dispositivi diversi da Android o iOS. Questo documento illustra questo approccio.
Indipendentemente da come fornisci gli aggiornamenti sulla posizione del veicolo, il tuo backend responsabile dell'aggiornamento di Fleet Engine quando un veicolo per le consegne è diretto verso un fermata e quando arriva a una fermata. incluso il deposito stesso. Fleet Engine non rileva automaticamente questi eventi.
Aggiorna esempi di posizione del veicolo
Puoi utilizzare la libreria gRPC Java per aggiornare la posizione di un veicolo nel parco risorse o 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