Approaches
Para obtener el mejor rendimiento con Fleet Engine, proporciona una transmisión de actualizaciones de ubicación del vehículo al menos una vez por minuto y, como máximo, una vez por 5 segundos. Usa cualquiera de las siguientes formas para proporcionar estas actualizaciones:
- Usa el SDK de Driver: Es la opción más sencilla.
- Usar código personalizado: Es útil si las ubicaciones se reenvían a través de tu backend o si usas dispositivos que no son Android o iOS. En este documento, se aborda ese enfoque.
Independientemente de cómo proporciones las actualizaciones de ubicación del vehículo, tu backend es responsable de actualizar Fleet Engine cuando un vehículo de entrega está en camino a una parada y cuando llega a una parada. Esto incluye el depósito en sí. Fleet Engine no detecta estos eventos automáticamente.
Ejemplos de actualización de la ubicación del vehículo
Puedes usar la biblioteca de gRPC de Java para actualizar la ubicación de un vehículo en Fleet Engine o usar 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
Detalles de la solicitud
El cuerpo de la solicitud debe contener una entidad DeliveryVehicle
que especifique los campos de la siguiente manera:
Campos obligatorios:
Campo Valor lastLocation.supplementalLocation
Es la ubicación del vehículo. lastLocation.supplementalLocationTime
Es la última marca de tiempo conocida en la que el vehículo estuvo en esta ubicación. lastLocation.supplementalLocationSensor
Debe propagarse con CUSTOMER_SUPPLIED_LOCATION
.Campos opcionales:
Campo Valor lastLocation.supplementalLocationAccuracy
Es la precisión de la ubicación proporcionada, en metros.
# 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