Aggiorna la posizione di un veicolo per la consegna

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:

    CampoValore
    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:

    CampoValore
    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

Passaggi successivi