Aggiorna la posizione di un veicolo per la consegna

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: opzione più semplice.
  • Utilizza codice personalizzato. È utile se le località vengono inoltrate tramite il backend, o se usi dispositivi diversi da Android o iOS. In questo documento viene illustrato che l'importanza di un approccio umile.

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 specifichi campi come segue:

  • Campi obbligatori:

    CampoValore
    lastLocation.supplementalLocation La posizione del veicolo.
    lastLocation.supplementalLocationTime L'ultimo timestamp noto in cui si trovava il veicolo 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