Approaches
Um mit Fleet Engine die beste Leistung zu erzielen, sollten Sie einen Stream von Aktualisierungen des Fahrzeugstandorts mindestens einmal pro Minute und höchstens alle 5 Sekunden bereitstellen. Sie haben folgende Möglichkeiten, diese Updates bereitzustellen:
- Driver SDK verwenden: Das ist die einfachste Option.
- Benutzerdefinierten Code verwenden: Nützlich, wenn Standorte über Ihr Backend weitergeleitet werden oder Sie andere Geräte als Android- oder iOS-Geräte verwenden. In diesem Dokument wird dieser Ansatz erläutert.
Unabhängig davon, wie Sie Aktualisierungen des Fahrzeugstandorts bereitstellen, ist Ihr Back-End für die Aktualisierung von Fleet Engine verantwortlich, wenn ein Lieferfahrzeug auf dem Weg zu einer Haltestelle ist und an einer Haltestelle ankommt. Dazu gehört auch das Depot selbst. Fleet Engine erkennt diese Ereignisse nicht automatisch.
Beispiele für die Aktualisierung der Fahrzeugposition
Sie können die Java-gRPC-Bibliothek verwenden, um den Standort eines Fahrzeugs in 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
-Entität enthalten, die Felder so angibt:
Pflichtfelder:
Feld Wert lastLocation.supplementalLocation
Der Standort des Fahrzeugs. lastLocation.supplementalLocationTime
Der letzte bekannte Zeitstempel, mit dem sich das Fahrzeug an diesem Standort befand. lastLocation.supplementalLocationSensor
Sollte mit CUSTOMER_SUPPLIED_LOCATION
ausgefüllt werden.Optionale Felder:
Feld Wert lastLocation.supplementalLocationAccuracy
Die 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