Standort eines Lieferfahrzeugs aktualisieren

Approaches

Für eine optimale Leistung von Fleet Engine sollten Sie mindestens einmal pro Minute und höchstens einmal alle 5 Sekunden einen Stream mit Standortaktualisierungen für Fahrzeuge bereitstellen. Sie haben zwei Möglichkeiten, diese Aktualisierungen vorzunehmen:

  • Driver SDK verwenden: Dies ist die einfachste Option.
  • Benutzerdefinierten Code verwenden: Diese Option ist nützlich, wenn Standorte über Ihr Backend weitergeleitet werden oder wenn Sie andere Geräte als Android- oder iOS-Geräte verwenden. In diesem Dokument wird dieser Ansatz beschrieben.

Unabhängig davon, wie Sie Updates zum Fahrzeugstandort bereitstellen, ist Ihr Backend dafür verantwortlich, Fleet Engine zu aktualisieren, wenn ein Lieferfahrzeug auf dem Weg zu einem Stopp ist und wenn es an einem Stopp ankommt. Dazu gehört auch das Depot selbst. Fleet Engine erkennt diese Ereignisse nicht automatisch.

Beispiele für die Aktualisierung des Fahrzeugstandorts

Sie können die Java-gRPC-Bibliothek verwenden, um den Standort eines Fahrzeugs in der Fleet Engine zu aktualisieren, oder 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

Anfragedetails

Der Anfragetext muss eine DeliveryVehicle-Einheit mit den folgenden Feldern enthalten:

  • Pflichtfelder:

    FeldWert
    lastLocation.supplementalLocation Der Standort des Fahrzeugs.
    lastLocation.supplementalLocationTime Der letzte bekannte Zeitstempel, zu dem sich das Fahrzeug an diesem Standort befand.
    lastLocation.supplementalLocationSensor Sollte mit CUSTOMER_SUPPLIED_LOCATION ausgefüllt werden.

  • Optionale Felder:

    FeldWert
    lastLocation.supplementalLocationAccuracy Genauigkeit des angegebenen Standorts in Metern.

  # 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

Nächste Schritte