Standort eines Lieferfahrzeugs aktualisieren

Approaches

Für die beste Leistung mit Fleet Engine sollten Sie mindestens einmal pro Minute und höchstens einmal alle 5 Sekunden Updates zum Fahrzeugstandort senden. Dazu haben Sie folgende Möglichkeiten:

  • Verwenden Sie das Driver SDK: Die einfachste Option.
  • Benutzerdefinierten Code verwenden: Nützlich, wenn Standorte über Ihr Back-End weitergeleitet werden, oder wenn Sie andere Geräte als Android- oder iOS-Geräte verwenden. Dieser Ansatz wird in diesem Dokument behandelt.

Unabhängig davon, wie Sie Updates zum Fahrzeugstandort senden, ist Ihr Back-End dafür verantwortlich, Fleet Engine zu aktualisieren, wenn sich ein Lieferfahrzeug auf dem Weg zu einem Stopp befindet 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

Wenn Sie den Standort eines Fahrzeugs in Fleet Engine aktualisieren möchten, können Sie die Java gRPC-Bibliothek oder REST verwenden, wie im folgenden Beispiel gezeigt. Eine vollständige Liste der unterstützten Sprachen finden Sie unter Clientbibliotheken für geplante Aufgaben.

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-Entität enthalten, in der die Felder wie folgt angegeben sind:

  • Pflichtfelder:

    FeldWert
    lastLocation.supplementalLocation Der Standort des Fahrzeugs.
    lastLocation.supplementalLocationTime Der letzte bekannte Zeitstempel, an dem sich das Fahrzeug an diesem Standort befand.
    lastLocation.supplementalLocationSensor Muss mit CUSTOMER_SUPPLIED_LOCATION gefüllt sein.

  • 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